在服务端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之后的生成,之前的随笔里提过.这个是一个完整的过程. 首先是已经查找好的数据,这 ...
随机推荐
- js 中继承的几种方式
继承的方式一共有三种: 一.原型继承 通过prototype 来实现继承. function Person(name,age) { this.name=name; this.age=age; } ...
- POJ3273 Monthly Expense —— 二分
题目链接:http://poj.org/problem?id=3273 Monthly Expense Time Limit: 2000MS Memory Limit: 65536K Tota ...
- 使用Windows Debugger调试托管代码----引用自官方帮助文档
以下文字引用在Windbg的帮助文档.觉得对初次调试托管代码,非常有用,故粘贴至此. ========================================================= ...
- java 开发面试题小整理(二)
51.Anonymous Inner Class(匿名内部类)是否可以继承其它类?是否可以实现接口? 答:可以继承其他类或实现其他接口,在Swing编程和Android开发中常用此方式来实现事件监听和 ...
- Java变量和常量声明
一.变量 1.变量的定义 变量是内存中的一个存储区域,该区域有自己的名称(变量名)和类型(数据类型),Java中每个变量必须先声明,后使用 该区域的数据可以在同一类型范围内 ...
- docker容器安装使用
window安装 1 下载 http://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/ docker toolbox 是一个 ...
- CodeForces-245H:Queries for Number of Palindromes(3-14:区间DP||回文串)
Times:5000ms: Memory limit:262144 kB 给定字符串S(|S|<=5000),下标由1开始.然后Q个问题(Q<=1e6),对于每个问题,给定L,R,回答区间 ...
- RobotFramework:App九宫格滑动解锁
转自:http://blog.csdn.net/codekxx/article/details/50577381 手势密码在很多手机应用都会运到,手势密码都要求至少连接4个点,但AppiumLibra ...
- .NETFramework:HttpRuntime
ylbtech-.NETFramework:HttpRuntime 1.返回顶部 1. #region 程序集 System.Web, Version=4.0.0.0, Culture=neutral ...
- qq截图原理
屏幕截图实现的大体思想是:发起截图时,将当前窗口的图像保存到内存中,然后弹出一个置顶的全屏窗口,将保存的桌面图片绘制到这个全屏窗口上:初始时绘制的是灰化的桌面图像,选择截图区域后,则将选中的区域绘制成 ...