目前本人接触过两种模板导出的方式:(1)C#利用NPOI接口制作Excel模板,在服务端用数据渲染模板(2)在前端利用前人搭建好的框架,利用office编写xml制作模板,在客户端进行数据的渲染,导出的格式是word。在制作报表时两种方式都可以满足的基本需求,但excel模板更加强大,因为xml模板的布局大体在事先就要确定好,扩展性不高,而excel模板就可以根据数据的特点进行自定义布局,拓展性更强。下面介绍如何在服务端利用NPOI构建excel模板。

简单来讲,NPOI是一个库,它可以处理多种文件格式如xls、xlsx、doc、ppt、vsd等。除了制作excel模板,也可以读取excel中的数据。本文具体介绍制作excel模板。

添加引用NPOI后,在文件的头部引入如下几个接口,如图

HSSF使用于2007之前的xls版本,XSSF适用于2007及其之后的xlsx版本,它们是excel/doc格式读写库。NPOI.SS是Excel公用接口及Excel公式计算引擎。更多具体的功能以及接口可以自行百度。

具体实现如下:

 public List<string> GetExcel(string year, string month, string type, out string statusCode, out string errMsg)
{
statusCode = "";
errMsg = "";
List<string> response = new List<string>();
string strFilePath = "";
string strGuid = Guid.NewGuid().ToString();
string FilePath = "\\BufFile\\OutFiles\\DownLoadFiles\\ExportExcel\\" + strGuid;
//构建文件缓存目录
strFilePath = System.IO.Directory.GetParent(System.IO.Directory.GetParent(System.AppDomain.CurrentDomain.BaseDirectory).FullName).FullName + FilePath;
if (!System.IO.Directory.Exists(strFilePath))
{
System.IO.Directory.CreateDirectory(strFilePath);
}
//文件命名
string strFileName = strFilePath + "\\" + "XXXXXX.xls";
string ret = FilePath + "\\" + "XXXXXX.xls";
string uploadPath = System.IO.Directory.GetParent(System.IO.Directory.GetParent(System.AppDomain.CurrentDomain.BaseDirectory).FullName).FullName + "\\BufFile\\OutFiles\\UploadFiles\\";
List<CompletionRateModel> data = GetCompletionRate(year, month, out statusCode, out errMsg);
try
{ //创建工作薄
HSSFWorkbook hssfWorkBook = new HSSFWorkbook();
//编辑文件信息,如文件所属公司、作者、创建日期等
DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
dsi.Company = "ZondyCyber";
SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
si.Author = "ZondyCyber";
si.LastAuthor = "ZondyCyber";
si.CreateDateTime = DateTime.Now;
hssfWorkBook.DocumentSummaryInformation = dsi;
hssfWorkBook.SummaryInformation = si;
//创建名为YYYYYY的表sheet
HSSFSheet hssfSheet = hssfWorkBook.CreateSheet("YYYYYY") as HSSFSheet; //设置列宽
for (int c = ; c < ; c++)
{
hssfSheet.SetColumnWidth(c, * );
} //设置列头的单元格样式
HSSFCellStyle cellStyle = hssfWorkBook.CreateCellStyle() as HSSFCellStyle;
HSSFFont cellFont = hssfWorkBook.CreateFont() as HSSFFont;
cellFont.Boldweight = Convert.ToInt16(FontBoldWeight.Bold);
cellFont.FontName = "宋体";
cellFont.FontHeightInPoints = ;
cellStyle.Alignment = HorizontalAlignment.Center;
cellStyle.VerticalAlignment = VerticalAlignment.Center;
cellStyle.WrapText = true;
cellStyle.SetFont(cellFont);
cellStyle.BorderTop = cellStyle.BorderRight = cellStyle.BorderBottom = cellStyle.BorderLeft = BorderStyle.Thin;//BorderStyle.None
//左对齐样式
HSSFCellStyle leftCellStyle = hssfWorkBook.CreateCellStyle() as HSSFCellStyle;
leftCellStyle.CloneStyleFrom(cellStyle);
leftCellStyle.Alignment = HorizontalAlignment.Left;
//居中填充样式
HSSFCellStyle fillCellStyle = hssfWorkBook.CreateCellStyle() as HSSFCellStyle;
fillCellStyle.CloneStyleFrom(cellStyle);
fillCellStyle.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.Grey25Percent.Index;
//fillCellStyle.FillPattern = FillPattern.Diamonds;
//fillCellStyle.FillPattern = FillPattern.FineDots;
fillCellStyle.FillPattern = FillPattern.LeastDots;
fillCellStyle.FillBackgroundColor = NPOI.HSSF.Util.HSSFColor.Grey25Percent.Index; //居中填充样式(无边框)
HSSFCellStyle fillCellStyle2 = hssfWorkBook.CreateCellStyle() as HSSFCellStyle;
fillCellStyle2.CloneStyleFrom(fillCellStyle);
//fillCellStyle2.FillPattern = FillPattern.NoFill;
fillCellStyle2.BorderTop = fillCellStyle2.BorderRight = fillCellStyle2.BorderBottom = fillCellStyle2.BorderLeft = BorderStyle.None;//BorderStyle.None
//值的样式
HSSFCellStyle valueStyle = hssfWorkBook.CreateCellStyle() as HSSFCellStyle;
HSSFFont valueFont = hssfWorkBook.CreateFont() as HSSFFont;
valueFont.FontName = "宋体";
valueFont.FontHeightInPoints = ;
valueStyle.BorderTop = valueStyle.BorderRight = valueStyle.BorderBottom = valueStyle.BorderLeft = BorderStyle.Thin;//BorderStyle.None
valueStyle.WrapText = true;
valueStyle.Alignment = HorizontalAlignment.Center;
valueStyle.VerticalAlignment = VerticalAlignment.Center;
valueStyle.SetFont(valueFont);
//值的样式(无边框)
HSSFCellStyle valueStyle2 = hssfWorkBook.CreateCellStyle() as HSSFCellStyle;
valueStyle2.CloneStyleFrom(valueStyle);
valueStyle2.BorderTop = valueStyle2.BorderRight = valueStyle2.BorderBottom = valueStyle2.BorderLeft = BorderStyle.None;//BorderStyle.None //开始构建表格
int rowIndex = ;//记录用到第几行
//构建表题
String Title = "XXXXXX(" + type + ")统计 " + year + "年" + month + "月";
//创建表格的第一行的第一个单元格
hssfSheet.CreateRow().CreateCell().CellStyle = fillCellStyle;
//获取表格的第一行的第一个单元格,并为其赋值
hssfSheet.GetRow().GetCell().SetCellValue(Title);
//合并单元格
/*
* cellRangeAddress可以合并行或列,第一个参数是起始行号,第二个参数是终止行号,第三个参数是起始列号,第三个参数是终止列号
*/
CellRangeAddress region = new CellRangeAddress(rowIndex, rowIndex + , , );
hssfSheet.AddMergedRegion(region);
hssfSheet.SetEnclosedBorderOfRegion(region, BorderStyle.Thin, NPOI.HSSF.Util.HSSFColor.Black.Index);
rowIndex = rowIndex + ; //
String Type = "部门";
//构建表头
hssfSheet.CreateRow(rowIndex).CreateCell().CellStyle = valueStyle;
hssfSheet.GetRow(rowIndex).GetCell().SetCellValue("序号");
/**
** 构建表格的具体细节省略,无非是合并单元格,填充数据
**/
//表格构建完毕
FileStream file = new FileStream(strFileName, FileMode.Create);
hssfWorkBook.Write(file);
file.Close();
response.Add(ret);
}

在服务端C#如何利用NPOI构建Excel模板的更多相关文章

  1. C#利用NPOI导出Excel类(简单版)

    代码: using System.Data; using System.IO; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; namespac ...

  2. ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 try.dot.net 的正确使用姿势 .Net NPOI 根据excel模板导出excel、直接生成excel .Net NPOI 上传excel文件、提交后台获取excel里的数据

    ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案   ASP.NET Core 从2.2版本开始,采用了一个新的名为Endpoint的路由方案,与原来的方案在使用上差别不 ...

  3. 利用NPOI将EXCEL转换成HTML的C#实现

    领导说想做一个网页打印功能,而且模板可以自定义,我考虑了三个方案,一是打印插件,二是在线 html 编辑器,三是 excel 模板,领导建议用的是打印插件的形式,我研究了一下,一个是需要下载安装,二个 ...

  4. C#利用NPOI操作Excel文件

    NPOI作为开源免费的组件,功能强大,可用来读写Excel(兼容xls和xlsx两种版本).Word.PPT文件.可是要让我们记住所有的操作,这便有点困难了,至此,总结一些在开发中常用的针对Excel ...

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

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

  6. DateTable利用NPOI导出Excel 公共方法

    protected void Export_Excel(DataTable dt) { string filename = "学生基本信息.xls"; ) { filename = ...

  7. 利用npoi导出Excel

    npoi库是当下最流行的处理Excel.Word.PPT等Office文件格式 npoi的下载地址:http://npoi.codeplex.com/ npoi的官方学习地址: http://www. ...

  8. 利用NPOI解析Excel的通用类

    using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using NPOI. ...

  9. .net利用NPOI生成excel文件

    整理代码,这个是生成excel文件,用的是HSSF的方式,只能生成65535行,256列的数据,如果要看office07之后的生成,之前的随笔里提过.这个是一个完整的过程. 首先是已经查找好的数据,这 ...

随机推荐

  1. HDU4763 Theme Section —— KMP next数组

    题目链接:https://vjudge.net/problem/HDU-4763 Theme Section Time Limit: 2000/1000 MS (Java/Others)    Mem ...

  2. 软件安全测试新武器 ——浅谈基于Dynamic Taint Propagation的测试技术

    软件安全测试是保证软件能够安全使用的最主要的手段,如何进行高效的安全测试成为业界关注的话题.多年的安全测试经验告诉我们,做好软件安全测试的必要条件是:一是充分了解软件安全漏洞,二是拥有高效的软件安全测 ...

  3. Swift语言学习(三)基础操作符

    操作符是用于检测.更改或者组合值的特殊符号或短语.例如,加法操作符 (+) 将两个数字加到一起 (如 let i = 1 + 2).更复杂的例子包括逻辑与操作符 && (如 if en ...

  4. 使用masonry手写约束

    在iOS开发过程中,手写contraints是非常痛苦的一件事情,往往那么一丢丢功能要写大量的代码,非常容易发生错误,并且非常不方便调试.所以只有在不得以的情况下才采用手工方式写contraints, ...

  5. HNOI2008 GT考试 (KMP + 矩阵乘法)

    传送门 这道题目的题意描述,通俗一点说就是这样:有一个长度为n的数字串(其中每一位都可以是0到9之间任意一个数字),给定一个长度为m的模式串,求有多少种情况,使得此模式串不为数字串的任意一个子串.结果 ...

  6. mac上python3安装HTMLTestRunner

    下载支持python3版本的HTMLTestRunner.py文件后,拷贝到python3的lib目录下 在终端输入如下命令: 将HTMLTestRunner.py文件拷贝到如下目录后,pycharm ...

  7. HTML 新属性

    accesskey 属性 -- 代表链接的快捷键访问方式 定义了accesskey的链接可以使用快捷键(ALT+字母)访问. 主菜单与导航菜单使用accesskey,通常是不错的选择. 取值: 字母 ...

  8. 在 Ubuntu 系统中有三种设置环境变量 PATH 的方法。(ZT) repost

    来源地址: http://blog.csdn.net/jernymy/article/details/6547671 第一种适用于为单一用户设置PATH.第二种是为全局设置 PATH.第三种方法适合于 ...

  9. 用grep在子目录中指定的文件类型中查找(转载)

    转自:http://www.ai7.org/wp/html/653.html grep -r abcd *.py 这样的命令得不到你期待的结果,而 grep -r abcd * 这样得到的结果又太多, ...

  10. DPWL具关劳过农派广决建

    圆来压平便几从细样听二现当群世权半几影志土济长即江装家革候它准原打边社而从越何从式万难因造化阶求电么才论须指直很已毛有济做把活半或须白安共角争斗也重代只因识九少�