在服务端C#如何利用NPOI构建Excel模板
目前本人接触过两种模板导出的方式:(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模板的更多相关文章
- C#利用NPOI导出Excel类(简单版)
代码: using System.Data; using System.IO; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; namespac ...
- 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的路由方案,与原来的方案在使用上差别不 ...
- 利用NPOI将EXCEL转换成HTML的C#实现
领导说想做一个网页打印功能,而且模板可以自定义,我考虑了三个方案,一是打印插件,二是在线 html 编辑器,三是 excel 模板,领导建议用的是打印插件的形式,我研究了一下,一个是需要下载安装,二个 ...
- C#利用NPOI操作Excel文件
NPOI作为开源免费的组件,功能强大,可用来读写Excel(兼容xls和xlsx两种版本).Word.PPT文件.可是要让我们记住所有的操作,这便有点困难了,至此,总结一些在开发中常用的针对Excel ...
- .Net NPOI 根据excel模板导出excel、直接生成excel
一.根据Excel模板导出excel 1.导入NPOI.dll 2.DAL中添加类ExportExcel.cs using NPOI.SS.UserModel; using System; usin ...
- DateTable利用NPOI导出Excel 公共方法
protected void Export_Excel(DataTable dt) { string filename = "学生基本信息.xls"; ) { filename = ...
- 利用npoi导出Excel
npoi库是当下最流行的处理Excel.Word.PPT等Office文件格式 npoi的下载地址:http://npoi.codeplex.com/ npoi的官方学习地址: http://www. ...
- 利用NPOI解析Excel的通用类
using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using NPOI. ...
- .net利用NPOI生成excel文件
整理代码,这个是生成excel文件,用的是HSSF的方式,只能生成65535行,256列的数据,如果要看office07之后的生成,之前的随笔里提过.这个是一个完整的过程. 首先是已经查找好的数据,这 ...
随机推荐
- Vue源码探究-源码文件组织
Vue源码探究-源码文件组织 源码探究基于最新开发分支,当前发布版本为v2.5.17-beta.0 Vue 2.0版本的大整改不仅在于使用功能上的优化和调整,整个代码库也发生了天翻地覆的重组.可见随着 ...
- HDU 1022 之 Train Problem I
Train Problem I Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- 数据结构之 图论---bfs(邻接表)
数据结构实验之图论二:基于邻接表的广度优先搜索遍历 Time Limit: 1000MS Memory limit: 65536K 题目描述 给定一个无向连通图,顶点编号从0到n-1,用广度优先搜索( ...
- HTML&CSS——background: url() no-repeat 0 -64px;CSS中背景图片定位方法
CSS中背景图片的定位,困扰我很久了.今天总算搞懂了,一定要记下来. 在CSS中,背景图片的定位方法有3种: 1)关键字:background-position: top left; 2)像素:bac ...
- os、sys和shutil模块
运行环境:python3 OS模块:os 模块提供了一个统一的操作系统的接口函数 下面的path指路径的意思 os.stat(file) #查询文件属性操作 os.sep #取代操作系统特定的路径分隔 ...
- 官网下载java相关资源
官网下载java相关资源 官网地址:http://www.oracle.com 一.下载JDK 1.首先进入Downloads >> Java For Developers,如图 2.点击 ...
- [POI 2014] Little Bird
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=3831 [算法] 单调队列优化动态规划 时间复杂度 : O(N) [代码] #incl ...
- JAVA GUI THREAD---***
针对用户界面的多线程 GUI下面的多线程方式 1.与GUI类分离方式 分离方式,在创建线程类实例时需要代入GUI句柄,通过GUI句柄操作GUI,也就是说线程类和GUI类都要有对方的实例,以便相互操作. ...
- HTTP 请求的组成 方法 已经 请求的状态码
HTTP请求是指从客户端到服务器端的请求消息. 包括:消息首行中,对资源的请求方法.资源的标识符及使用的协议.从客户端到服务器端的请求消息包括,消息首行中,对资源的请求方法.资源的标识符及使用的协议. ...
- ORA-01152: 文件 1 没有从过旧的备份中还原
转自:http://blog.itpub.net/8520577/viewspace-1255794/ 做了一个全备 RMAN> show all; 使用目标数据库控制文件替代恢复目录db_un ...