又隔十多天没写博客了,最近都在忙项目的事情,公司人事变动也比较大,手头上就又多了一个项目。最近做用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[].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[];
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;
}
}

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. 判断jsp中是否存在某个javascript函数

    //判断父页是否存在某个javascript函数 function fnExist(fnName) { //return fnName in this && eval(fnName) ...

  2. [React] Using the classnames library for conditional CSS

    Classnames is a simple yet versatile javascript utility that joins CSS class names based on a set of ...

  3. 教你用笔记本破解无线路由器password

    近期非常多人问我怎么破解WiFipassword…看来大家都对免费的东西比較有兴趣.要么也可能是我太招摇了…囧… 好吧,我就写篇小小的教程,看完后,你应该可以破解大部分无线路由器password了,写 ...

  4. ltrace killed by SIGTRAP

    [Ltrace-devel] ltrace stucks with pthreads Heiko Carstens heiko.carstens at de.ibm.comFri Apr 14 11: ...

  5. mysqldump 备份原理8

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

  6. iOS中利用 runtime 一键改变字体

    1.准备 我们新建一个项目名叫ChangeFont,然后我就随便找了个名叫loveway.ttf的字体库拖进去,里面的工程目录大概就是这样的 目录 现在我们就简单的直接在storyboard上拖了一个 ...

  7. hysdk代码解析

    navigator 1. navigator.userAgent 浏览器的用户代理字符串 2. navigator.platform 浏览器所在的系统平台 window 1. window.devic ...

  8. iOS 网络编程:XML解析

    1 XML文档结构 1.1 简介 XML 指可扩展标记语言(eXtensible Markup Language).XML 被设计用来传输和存储数据.其非常像HTML的标记语言,但与之不同的是,XML ...

  9. Leetcode Python Solution(continue update)

    leetcode python solution 1. two sum (easy) Given an array of integers, return indices of the two num ...

  10. commons-io源码阅读心得

    FileCleanTracker: 开启一个守护线程在后台默默的删除文件. /* * Licensed to the Apache Software Foundation (ASF) under on ...