NPOI根据模板生成chart图表导出Excel
导入NPOI的全部dll。
因为NPOI的API里面还没有对于Chart图表方面的操作,所以只能根据提示做好的图表作为模板,修改数据源的方法来改变图表。
注意:NPOI要用2003版以下的excel才能更好的支持,对才2007版以上的,导出来图表会变形。
一、制作好一个excel模板

二、读取模板填充数据源
1.给NPOI扩展两个方法,以免下面代码中进行过多的判断
/// <summary>
/// 扩展方法
/// </summary>
public static class ExtFunction
{
public static ICell Cell(this IRow row,int index)
{
ICell cell = row.GetCell(index);
if (cell == null)
{
cell = row.CreateCell(index);
}
return cell; }
public static IRow Row(this ISheet sheet,int index)
{
IRow row = sheet.GetRow(index);
if (row == null)
{
row = sheet.CreateRow(index);
}
return row;
}
}
2.主要代码:
//导出excel
private void btnExportExcel_Click(object sender, EventArgs e)
{ try
{
string filePath = string.Empty;
HSSFWorkbook workbook = null;
ISheet sheet1 = null;
IRow row = null;
int nowRowNum = ;//当前行2,表头第一行
if (diskInfos.Count < )
{
MessageBox.Show("没有数据");
return;
}
//选择文件保存路径
filePath = getFilePath();
if (filePath == "")
{
return;
}
//模板路径
string excelTempPath = System.Environment.CurrentDirectory + "/temp.xls";
//读取Excel模板
using (FileStream fs = new FileStream(excelTempPath, FileMode.Open, FileAccess.Read))
{
workbook = new HSSFWorkbook(fs);
}
//获取sheet1
sheet1 = workbook.GetSheetAt(); for (int i = ; i < diskInfos.Count; i++)
{
//获取当前行
row = sheet1.Row(nowRowNum);
//给行的单元格填充数据
row.Cell().SetCellValue(diskInfos[i].IP);
row.Cell().SetCellValue(diskInfos[i].DiskName);
row.Cell().SetCellValue(diskInfos[i].FreeSize);
row.Cell().SetCellValue(diskInfos[i].AllSize);
row.Cell().SetCellValue(diskInfos[i].Remark);
nowRowNum++;
} //保存文件
using (Stream stream = File.OpenWrite(filePath))
{
workbook.Write(stream);
}
//弹出消息框
MsgForm msgForm = new MsgForm(filePath);
msgForm.ShowDialog();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
} }
//弹出选择保存的路径
public string getFilePath()
{
string filePath = "";
SaveFileDialog sfd=new SaveFileDialog ();
//文件类型限制
sfd.Filter = "Files|*.xls";
//默认文件名
sfd.FileName = "DiskReport.xls";
if (sfd.ShowDialog() == DialogResult.OK)
{
filePath = sfd.FileName;
} return filePath;
}
功能为查询公司几个服务器的磁盘使用情况,最后导出的excel表为:

NPOI根据模板生成chart图表导出Excel的更多相关文章
- 分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility (续3篇-导出时动态生成多Sheet EXCEL)
ExcelUtility 类库经过我(梦在旅途)近期不断的优化与新增功能,现已基本趋向稳定,功能上也基本可以满足绝大部份的EXCEL导出需求,该类库已在我们公司大型ERP系统全面使用,效果不错,今天应 ...
- 分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility (续2篇-模板导出综合示例)
自ExcelUtility类推出以来,经过项目中的实际使用与不断完善,现在又做了许多的优化并增加了许多的功能,本篇不再讲述原理,直接贴出示例代码以及相关的模板.结果图,以便大家快速掌握,另外这些示例说 ...
- 分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility (续篇)
上周六我发表的文章<分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility>受到了大家的热烈支持与推荐,再此表示感谢,该ExcelUtility ...
- 分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility
1. ExcelUtility功能: 1.将数据导出到EXCEL(支持XLS,XLSX,支持多种类型模板,支持列宽自适应) 类名:ExcelUtility. Export 2.将EXCEL ...
- WinForm 使用 NPOI 2.2.1从datatable导出Excel
最新的NOPI应该是2.3了,但在官网上还是2.2.1. 也是第一次使用NPOI来导出Excel文件. 在写的时候搜不到2.2.1的教程,搜了一个2.2.0的教程. 不过也没什么问题,NPOI是真的方 ...
- Java利用模板生成pdf并导出
1.准备工作 (1)Adobe Acrobat pro软件:用来制作导出模板 (2)itext的jar包 2.开始制作pdf模板 (1)先用word做出模板界面 (2)文件另存为pdf格式文件 (3) ...
- C# 生成chart图表的三种方式
.net中,微软给我们提供了画图类(system.drawing.imaging),在该类中画图的基本功能都有.比如:直线.折线.矩形.多边形.椭圆形.扇形.曲线等等,因此一般的图形都可以直接通过代码 ...
- PowerDesigner 图表导出Excel格式
快捷方式打开运行界面:ctrl+shift+X '*************************************************************************** ...
- poi自动生成Ecxel表格和Chart图表
最近因为业务需求,需要做poi自动导出Ecxel表格和Chart折线图的功能. 所以我在网上找到了一篇关于poi生成Chart图表的博客,代码很详细,但是缺少相关注释说明. 想要将它改造成自己需要的样 ...
随机推荐
- Android Studio 中关于NDK编译及jni header生成的问题
之前由于工作原因使用grails这个基于groovy的框架做项目,对groovy感觉很好. 基于groovy的gradle构建系统对我而言自然也是好的没得说. Android Studio 正式版出来 ...
- 【原创】从零开始学SpagoBI5.X源码汉化编译
从零开始学SpagoBI5.X源码汉化编译 一.新建Tomact Server 服务器并配置测试1.文件-新建-其他-过滤server-服务类型选择Tomact V7.0 Server2.根据需要修改 ...
- 通过transform属性改变图片的位置大小等信息
对UIImageView的位置大小方向的改变可以通过改变其transform属性值实现. 位置改变: var transform = CGAffineTransformMakeTranslation( ...
- .NET Core:面向未来的开源跨平台开发技术
作为一种全新的开源和跨平台的开发平台,.NET Core 历经两年多的开发,终于在于2016年6月27日针对所有主流服务器和桌面操作系统发布 1.0 RTM 版本..NET Core 是一种通用开发平 ...
- 【C#|.NET】lock(this)其实是个坑
这里不考虑分布式或者多台负载均衡的情况只考虑单台机器,多台服务器可以使用分布式锁.出于线程安全的原因,很多种场景大家可能看代码中看到lock的出现,尤其是在资金类的处理环节. 但是lock(this) ...
- Js 一些方法(一)
(function ($) { var promoter = promoter || {}; promoter.utils = (function () { var controller = &quo ...
- [LeetCode] Range Sum Query 2D - Immutable
Very similar to Range Sum Query - Immutable, but we now need to compute a 2d accunulated-sum. In fac ...
- Linux探秘之用户态与内核态
一. Unix/Linux的体系架构 如上图所示,从宏观上来看,Linux操作系统的体系架构分为用户态和内核态(或者用户空间和内核).内核从本质上看是一种软件——控制计算机的硬件资源,并提供上层应用程 ...
- 使用EntityFramework6连接MySql数据库
准备工具: VS2013.MySQL For VisualStudio 1.1.4.Connector/Net 6.8.3(百度网盘里) 程序包管理器执行命令: Install-Package Ent ...
- MyBatis知多少(12)私有数据库
如果你从事软件开发工作有了一段时间的话,那么肯定听过关于“自己动手还是花钱购买” 的争论.该争论是说,针对一个业务问题,我们是应该自己动手构建自己的解决方案呢,还是应 该花钱购买一个声称已经解决了此问 ...