又隔十多天没写博客了,最近都在忙项目的事情,公司人事变动也比较大,手头上就又多了一个项目。最近做用aspose.cells根据模板导出excel报价单的功能,顺便把相关的核心记下来,先上模板和导出的效果图吧,如下:

  导出效果图(看到产品图,打不死的程(diao)序(si)员(猿)骚动吧,有没有不禁看了看自己粗大的右手):

  (其中红色框框起来的是动态填充的内容,工作薄名(产品信息)也是动态输出的)

  模板如下:

  

  大概流程是这样,先把需要输出到excel的内容存到一个model里面,然后把该model编程一个datatable,然后就直接绑定在指定的excel模板上,然后把excel转成流根据excel格式输出到客户端。

  

  以下为将置顶的model绑定在指定的模板上(模板后面附上)

  1. /// <summary>
  2. /// 返回Excel文件流
  3. /// </summary>
  4. /// <param name="model">数据</param>
  5. /// <param name="templateFileName">模板文件,要全路径</param>
  6. /// <param name="sheetName">工作簿名称</param>
  7. /// <param name="outDesigner">工作簿名称</param>
  8. /// <returns></returns>
  9. public static MemoryStream OutModelFileToStream(DataTable model, string templateFileName, string sheetName, Action<WorkbookDesigner, DataTable> action)
  10. {
  11. WorkbookDesigner designer = new WorkbookDesigner();
  12. designer.Open(templateFileName);
  13. designer.SetDataSource(model);
  14. //对designer做额外操作
  15. if (action != null)
  16. {
  17. action(designer, model);
  18. }
  19. //SetCellWithPicture(designer, model.Rows[0]["ProductLogo"].ToString(), 3, 5, 17, 8);
  20. designer.Process();
  21. if (!string.IsNullOrEmpty(sheetName))
  22. {
  23. designer.Workbook.Worksheets[].Name = sheetName;
  24. }
  25. return designer.Workbook.SaveToStream();
  26. }

  最后一个参数action是为了让用户可以在将基本的数据绑定在excel表上之后,可以做一些额外的补充操作,比如说控制某些特殊部分的格式或者说是某个位置要输出图片等,我做的时候,就是要在excel表的某个位置动态输出一个图片才做了如此操作。

  

  以下是输出excel到客户端的代码,如下:

  

  1. /// <summary>
  2. /// ActionResult的输出重写
  3. /// </summary>
  4. public override void ExecuteResult(ControllerContext context)
  5. {
  6. //下载
  7. System.IO.MemoryStream ms = AsposeExcelHelper.OutModelFileToStream(Model, TemplateFileName, SheetName, Action);
  8. byte[] bt = ms.ToArray();
  9. string fileName = FileNameHead + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";//客户端保存的文件名
  10.  
  11. //以字符流的形式下载文件
  12. HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
  13. //通知浏览器下载文件而不是打开
  14. HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
  15. HttpContext.Current.Response.BinaryWrite(bt);
  16. HttpContext.Current.Response.Flush();
  17. HttpContext.Current.Response.End();
  18.  
  19. }

  然后顺便附上通过委托action来自定义输出图像的代码,我这里是在指定的单元格输出指定大小的图片,如下:

  

  1. /// <summary>
  2. ///
  3. /// </summary>
  4. /// <param name="designer"></param>
  5. /// <param name="url"></param>
  6. /// <param name="upX"></param>
  7. /// <param name="upY"></param>
  8. /// <param name="lowX"></param>
  9. /// <param name="lowY"></param>
  10. /// <param name="width">设置图片对应的单元格宽度</param>
  11. /// <param name="height">设置图片对应的单元格高度</param>
  12. public static void SetCellWithPicture(WorkbookDesigner designer, string url, int upX, int upY, int lowX, int lowY, int? width=null, int? height=null)
  13. {
  14. try
  15. {
  16. var sheet = designer.Workbook.Worksheets[];
  17. if (width != null)
  18. {
  19. sheet.Cells.SetColumnWidth(upX, width.Value);
  20. }
  21. if (height != null)
  22. {
  23. sheet.Cells.SetRowHeight(upY, height.Value);
  24. }
  25. var objwebClient = new System.Net.WebClient();
  26. var objImage = new System.IO.MemoryStream(objwebClient.DownloadData(url));
  27. sheet.Pictures.Add(upX, upY, lowX, lowY, objImage);
  28. }
  29. catch (Exception ex)
  30. {
  31. throw ex;
  32. }
  33. }

aspose.cells根据模板导出excel的更多相关文章

  1. 使用Aspose.Cells利用模板导出Excel(C#)

    前言 随着互联网的流行,web项目逐渐占据主流.我相信大部分人开发项目的过程中都写过上传以及导出Excel和Word的功能,本文仅讨论导出Excel.C#中有很多第三方组件支持导出Excel,比如:N ...

  2. 使用Aspose.Cells 根据模板生成excel里面的 line chart

    目的: 1.根据模板里面的excel数据信息,动态创建line chart 2.linechart 的样式改为灰色 3.以流的形式写到客户端,不管客户端是否装excel,都可以导出到到客户端 4.使用 ...

  3. 基于C#语言MVC框架Aspose.Cells控件导出Excel表数据

    控件bin文件下载地址:https://download.csdn.net/download/u012949335/10610726 @{ ViewBag.Title = "xx" ...

  4. 【转】 (C#)利用Aspose.Cells组件导入导出excel文件

    Aspose.Cells组件可以不依赖excel来导入导出excel文件: 导入: public static System.Data.DataTable ReadExcel(String strFi ...

  5. (C#)利用Aspose.Cells组件导入导出excel文件

    Aspose.Cells组件可以不依赖excel来导入导出excel文件: 导入: public static System.Data.DataTable ReadExcel(String strFi ...

  6. Aspose.Cells Smart markers 基于模板导出Excel

    Aspose.Cells可以预先定义Excel模板,然后填充数据(官方文档:http://www.aspose.com/docs/display/cellsjava/Smart+Markers). 设 ...

  7. poi根据excel模板导出Excel

    /****单元格值对象**/public class Cells { /*** * 行 */ private int row; /** * 列 */ private int column; /** * ...

  8. POI通过模板导出EXCEL文件

    一般的EXCEL导出使用POI先创建一个HSSFWorkbook,然后通过不断创建HSSFRow,HSSFCell后设置单元格内容便可以完成导出. 这次在项目中需要用到模板,导出的内容包括(1.模板中 ...

  9. .Net NPOI 根据excel模板导出excel、直接生成excel

    一.根据Excel模板导出excel 1.导入NPOI.dll  2.DAL中添加类ExportExcel.cs using NPOI.SS.UserModel; using System; usin ...

随机推荐

  1. mysqldump 备份原理8

    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; http://www.cnblogs.com/lyhabc/p/38 ...

  2. python 2016 大会 pyconsk ppt ---python dtrace

    https://github.com/pyconsk/2016-slides PyCon SK 2016 - March 2016 1DTrace and PythonJesús Cea Aviónj ...

  3. mysql my.ini 详解

    linux下mysql配置文件my.cnf详解[转]   basedir = path 使用给定目录作为根目录(安装目录). character-sets-dir = path 给出存放着字符集的目录 ...

  4. Linux 释放cached内存

    使用free -m 查看系统使用的内存情况: # free -m             total      used      free      shared      buffers     ...

  5. iOS 并行编程:GCD Dispatch Queues

    1 简介 1.1 功能          Grand Central Dispatch(GCD)技术让任务并行排队执行,根据可用的处理资源,安排他们在任何可用的处理器核心上执行任务.任务可以是一个函数 ...

  6. 正则表达式 和 junit测试

    需要知道一些常规的正则表达式语句,然后可以仿照规则写出一下正则表达式语句.然后是关于junit测试. 知道了一个之前看过的文档,然后有功夫就看一下那个文档就可以,或者后面找时间搜索一下. 正则表达式是 ...

  7. ffmpeg之YUYV转RGB ARM使用流程分析

    本例基于3.2.2 ffmpeg 一.应用调用API 二.头文件包含的API接口 对应于libswscale.so.libswscale.so.4.libswscale.so.4.2.100中 sws ...

  8. Magento 使用心得

    Modules->模块 Controller->控制器 Model->模型 Magento是这个星球上最强大的购物车网店平台.当然,你应该已经对此毫无疑问了.不过,你可能还不知道,M ...

  9. css所有选择器的详解

    ----------------------------------------css 选择器---------------------------------------- 1,组合选择器: 1)e ...

  10. eclipse上传显示svn上传者名

    这里来记录下eclipse上传显示svn上传者名. 如图所示,修改即可.