目前本人接触过两种模板导出的方式:(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. c语言基本函数

    1. 用宏定义写出swap(x,y) #define swap(x, y) x = x + y; y = x - y; x = x - y; 2.数组a[N],存放了1至N-1个数,其中某个数重复一次 ...

  2. codeforces 445B. DZY Loves Chemistry 解题报告

    题目链接:http://codeforces.com/problemset/problem/445/B 题目意思:给出 n 种chemicals,当中有 m 对可以发生反应.我们用danger来评估这 ...

  3. Oracle :多实例切换

    Connecting to 10.1.4.21:22...Connection established.To escape to local shell, press 'Ctrl+Alt+]'. La ...

  4. 「LuoguP2170」 选学霸(01背包

    Description 老师想从N名学生中选M人当学霸,但有K对人实力相当,如果实力相当的人中,一部分被选上,另一部分没有,同学们就会抗议.所以老师想请你帮他求出他该选多少学霸,才能既不让同学们抗议, ...

  5. 【POI 2006】 Tet-Tetris-3D

    [题目链接] 点击打开链接 [算法] 二维线段树(树套树) 注意标记永久化 [代码] #include<bits/stdc++.h> using namespace std; #defin ...

  6. Brackets(区间dp)

    Brackets Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8017   Accepted: 4257 Descript ...

  7. 一个获取google chrome扩展crx文件信息的PHP操作类

    此类中实现了从crx文件获取扩展的Appid.获取manifest.json文件内容.将crx文件转换为一般zip文件 代码如下: <?php class CrxParserException ...

  8. React 从入门到进阶之路(九)

    之前的文章我们介绍了 React propTypes  defaultProps.接下来我们将介绍 React 生命周期函数. 之前我们已经根据 create-react-app 模块创建了一个 Re ...

  9. git 命令参考手册

    你的本地仓库由 git 维护的三棵“树”组成.第一个是你的 工作目录,它持有实际文件:第二个是 缓存区(Index),它像个缓存区域,临时保存你的改动:最后是 HEAD,指向你最近一次提交后的结果. ...

  10. 2018 年度码云热门项目排行榜 TOP 10

    2016 年度码云热门项目排行榜 TOP 10 是通过开源项目2016年在码云上的 Watch.Star.Fork 数量来评定的榜单.码云平台发展至今,涌现了越来越多优秀的开源项目,越来越多的开源作者 ...