NPOI根据Excel模板生成原生的Excel文件实例
上周完成了一个报表小项目,使用开源组件NPOI作为主要组件。之所以采用第三方的开源组件而不使用COM或微软提供的API,原因就不多说了,大家懂的。
官方网站:http://npoi.codeplex.com/
http://www.cnblogs.com/tonyqus/archive/2009/03/16/1409966.html
在此分享NPOI的一个应用,利用Excel模板生成excel文件。这正是NPOI强于Myxls之处。
具体步骤如下:
一、准备数据
USE[MonthReportDemo]
GO
/****** Object: Table [dbo].[TradeReport] Script Date: 04/15/2011 19:10:37 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IFNOTOBJECT_ID('[TradeReport]') ISNULL
DROPTABLE[TradeReport]
GO
CREATETABLE[dbo].[TradeReport](
[CurName][nvarchar](255) NULL,
[PlanValue][decimal](20, 2) NULL,
[MonthMoney][decimal](38, 0) NULL,
[YearMoney][decimal](38, 0) NULL,
[Year_Percent][int]NOTNULL,
[D_ID][int]identity(1,1),
constraint PK_TradeReport primarykeyclustered ([D_ID])
)
GO
insertinto TradeReport
select'绍兴润和购物中心有限公司',30000.00,3400,10000,0
unionallselect'新农都实业有限公司',0,3000,6000,0
unionallselect'浙江农发市政园林工程有限公司',6000.00,300,2340,0
select*from TradeReport
GO
/****** Object: Table [dbo].[TradeReport] Script Date: 04/15/2011 19:10:37 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IFNOTOBJECT_ID('[TradeReport]') ISNULL
DROPTABLE[TradeReport]
GO
CREATETABLE[dbo].[TradeReport](
[CurName][nvarchar](255) NULL,
[PlanValue][decimal](20, 2) NULL,
[MonthMoney][decimal](38, 0) NULL,
[YearMoney][decimal](38, 0) NULL,
[Year_Percent][int]NOTNULL,
[D_ID][int]identity(1,1),
constraint PK_TradeReport primarykeyclustered ([D_ID])
)
GO
insertinto TradeReport
select'绍兴润和购物中心有限公司',30000.00,3400,10000,0
unionallselect'新农都实业有限公司',0,3000,6000,0
unionallselect'浙江农发市政园林工程有限公司',6000.00,300,2340,0
select*from TradeReport
二、新建一个项目,结构如下:
模板文件如下:
三、预览结果:
四、修正模板
重新生成:
循环每个Cell,如果为0,则置为空
#region Clear "0"
System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
int cellCount = headerRow.LastCellNum;
for (int i = (sheet.FirstRowNum +1); i <= sheet.LastRowNum; i++)
{
HSSFRow row = sheet.GetRow(i);
if (row !=null)
{
for (int j = row.FirstCellNum; j < cellCount; j++)
{
HSSFCell c = row.GetCell(j);
if (c !=null)
{
switch (c.CellType)
{
case HSSFCellType.NUMERIC:
if (c.NumericCellValue ==0)
{
c.SetCellType(HSSFCellType.STRING);
c.SetCellValue(string.Empty);
}
break;
case HSSFCellType.BLANK:
case HSSFCellType.STRING:
if (c.StringCellValue =="0")
{ c.SetCellValue(string.Empty); }
break;
}
}
}
}
}
#endregion
System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
int cellCount = headerRow.LastCellNum;
for (int i = (sheet.FirstRowNum +1); i <= sheet.LastRowNum; i++)
{
HSSFRow row = sheet.GetRow(i);
if (row !=null)
{
for (int j = row.FirstCellNum; j < cellCount; j++)
{
HSSFCell c = row.GetCell(j);
if (c !=null)
{
switch (c.CellType)
{
case HSSFCellType.NUMERIC:
if (c.NumericCellValue ==0)
{
c.SetCellType(HSSFCellType.STRING);
c.SetCellValue(string.Empty);
}
break;
case HSSFCellType.BLANK:
case HSSFCellType.STRING:
if (c.StringCellValue =="0")
{ c.SetCellValue(string.Empty); }
break;
}
}
}
}
}
#endregion
其实NPOI在实际项目中可以生成更加复杂的图表,如下图:
简单示例代码下载:
下载二
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
2010-04-16 InstallShield 2010集成.net Framework 4的安装包制作
2010-04-16 《Microsoft Sql server 2008 Internals》读书笔记--第六章Indexes:Internals and Management(9)