aspose.cells根据模板导出excel

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

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

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

  模板如下:

  

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

  

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

        /// <summary>
        /// 返回Excel文件流
        /// </summary>
        /// <param name="model">数据</param>
        /// <param name="templateFileName">模板文件,要全路径</param>
        /// <param name="sheetName">工作簿名称</param>
        /// <param name="outDesigner">工作簿名称</param>
        /// <returns></returns>
        public static MemoryStream OutModelFileToStream(DataTable model, string templateFileName, string sheetName, Action<WorkbookDesigner, DataTable> action)
        {
            WorkbookDesigner designer = new WorkbookDesigner();
            designer.Open(templateFileName);
            designer.SetDataSource(model);
            //对designer做额外操作
            if (action != null)
            {
                action(designer, model);
            }
            //SetCellWithPicture(designer, model.Rows[0]["ProductLogo"].ToString(), 3, 5, 17, 8);
            designer.Process();
            if (!string.IsNullOrEmpty(sheetName))
            {
                designer.Workbook.Worksheets[0].Name = sheetName;
            }
            return designer.Workbook.SaveToStream();
        }

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

  

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

  

        /// <summary>
        /// ActionResult的输出重写
        /// </summary>
        public override void ExecuteResult(ControllerContext context)
        {
            //下载
            System.IO.MemoryStream ms = AsposeExcelHelper.OutModelFileToStream(Model, TemplateFileName, SheetName, Action);
            byte[] bt = ms.ToArray();
            string fileName = FileNameHead + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";//客户端保存的文件名  

            //以字符流的形式下载文件
            HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
            //通知浏览器下载文件而不是打开
            HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
            HttpContext.Current.Response.BinaryWrite(bt);
            HttpContext.Current.Response.Flush();
            HttpContext.Current.Response.End();

        }

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

  

        /// <summary>
        ///
        /// </summary>
        /// <param name="designer"></param>
        /// <param name="url"></param>
        /// <param name="upX"></param>
        /// <param name="upY"></param>
        /// <param name="lowX"></param>
        /// <param name="lowY"></param>
        /// <param name="width">设置图片对应的单元格宽度</param>
        /// <param name="height">设置图片对应的单元格高度</param>
        public static void SetCellWithPicture(WorkbookDesigner designer, string url, int upX, int upY, int lowX, int lowY, int? width=null, int? height=null)
        {
            try
            {
                var sheet = designer.Workbook.Worksheets[0];
                if (width != null)
                {
                    sheet.Cells.SetColumnWidth(upX, width.Value);
                }
                if (height != null)
                {
                    sheet.Cells.SetRowHeight(upY, height.Value);
                }
                var objwebClient = new System.Net.WebClient();
                var objImage = new System.IO.MemoryStream(objwebClient.DownloadData(url));
                sheet.Pictures.Add(upX, upY, lowX, lowY, objImage);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
时间: 2024-10-27 10:22:51

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

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

Aspose.Cells组件可以不依赖excel来导入导出excel文件: 导入: [csharp] view plain copy print? public static System.Data.DataTable ReadExcel(String strFileName) { Workbook book = new Workbook(); book.Open(strFileName); Worksheet sheet = book.Worksheets[0]; Cells cells = 

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

Aspose.Cells组件可以不依赖excel来导入导出excel文件: 导入: public static System.Data.DataTable ReadExcel(String strFileName) { Workbook book = new Workbook(); book.Open(strFileName); Worksheet sheet = book.Worksheets[0]; Cells cells = sheet.Cells; return cells.Export

用Aspose.Cells控件读取Excel

Aspose是一个很强大的控件,可以用来操作word,excel,ppt等文件,用这个控件来导入.导出数据非常方便.其中Aspose.Cells就是用来操作Excel的,功能有很多.我所用的是最基本的功能,读取Excel的数据并导入到Dataset或数据库中.读取Excel表格数据的代码如下: 首先要引入命名空间:using Aspose.Cells; Workbook workbook = new Workbook(); workbook.Open("C:\\test.xlsx");

POI通过模板导出EXCEL文件

一般的EXCEL导出使用POI先创建一个HSSFWorkbook,然后通过不断创建HSSFRow,HSSFCell后设置单元格内容便可以完成导出. 这次在项目中需要用到模板,导出的内容包括(1.模板中的内容.样式.2.自己需要新增的内容.样式.),还需要设置单元格的样式,在网上搜了一些blog,完成后记录一下. 分析这次需求,最关键的就是如何获取到填充了模板的新HSSFWorkbook,如果获取到它,我们可以熟练的往里面添加内容. 1 File fi = new File("F:/usr/use

apache poi根据模板导出excel

需要预先新建编辑好一个excel文件,设置好样式. 编辑好输出的数据,根据excel坐标一一对应. 支持列表数据输出,列表中列合并. 代码如下: package com.icourt.util; import org.apache.commons.collections4.CollectionUtils; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss.user

C#使用模板导出Excel

前言:此随笔仅供自己学习,如有不足请指出 在某些情况导出的时候,会有很复杂的表头或者样式,如果靠代码去调整的话回很麻烦,需要写很多代码,这个时候可以预先设置好表格,这样就方便灵活很多. /// <summary> /// 使用模板导出Excel /// </summary> /// <param name="listEntity">数据集</param> /// <param name="path">路径&

WeihanLi.Npoi 根据模板导出Excel

WeihanLi.Npoi 根据模板导出Excel Intro 原来的导出方式比较适用于比较简单的导出,每一条数据在一行,数据列虽然自定义程度比较高,如果要一条数据对应多行就做不到了,于是就想支持根据模板导出,在 1.8.0 版本中引入了根据模板导出的功能 使用示例 示例模板 模板规划的可以有三种数据: Global:一个是导出的时候可以指定一些参数,作为 Global 参数,默认参数格式使用: $(Global:PropName) 的格式 Header:配置的对应属性的显示名称,默认是属性名称

C# 基于Aspose.Cells的数据导出到Excel

using Aspose.Cells; void WriteToExcel(string filePath, List<object[]> datas, string sheetName = "Sheet0") { try { Workbook workBook = new Workbook(); Worksheet sheet = workBook.Worksheets[0]; sheet.Name = sheetName; Aspose.Cells.Style styl

JXLS模板导出EXCEL

最近做要做一些报表导出的功能,由于表格内容比较复杂,直接生成excel比较麻烦,所以采用模板的方式来做,可惜自己不了解,也证明了自己技术有多差!通过多次资料,终于找到了适合自己的方法.特此记录,方便以后查找. maven用到的包  <dependency>     <groupId>net.sf.jxls</groupId>     <artifactId>jxls-core</artifactId>     <version>1.0