利用NPOI组件产Excel完整操作
最终还是要使用NPOi了。刚开始做的是用com组件,发现如果本机不按照excel就不能使用,后来把其中一支改为了用Itextsharp产生pdf,但是还有几支批次要产生Excel,只能改用NPOI了。不过这也是一种学习了,呵呵,3种方法都用到了。
在文章开始必须先申明,我的NPOI组件版本为1.2.4
1.谈谈我用到Com组件和NPOi组件的感觉
》NPOI不用安装Excel,这也是我要换NPOI的主要原因
》NPOi组件产生Excel的速度明显感觉比COM组件快
》NPOI对Excel的操作没COM组件强大,可能毕竟都是微软的东西,举个例子,COM可以区域设置样式等,NPOI好像只能一个单元格设置
2.使用过程
(1)怎么产出
string strFileName ="my excel";//文件名称
string strPath = AppConfigString.FilePath + strFileName+".xls";//文件完整路径
HSSFWorkbook workbook = new HSSFWorkbook();
MemoryStream ms = new MemoryStream();
FileStream file = new FileStream(strPath, FileMode.Create);
try
{
ISheet sheet = workbook.CreateSheet(strFileName);
//write sheet here
workbook.Write(ms);
ms.WriteTo(file);
ms.Flush(); }
finally
{
ms.Close();
file.Close();
}
(2)设计产生的Excel
基础操作一:为单元格赋值并合并单元格
sheet.AddMergedRegion(new CellRangeAddress(, , , ));
IRow row = sheet.CreateRow();
row.HeightInPoints = (float)28.5;
ICell cell = row.CreateCell();
cell.SetCellValue("XXXXXX \r\n XXXXXX");
//必须设置style.WrapText = true 时\r\n才有效
cell.CellStyle = styleHead;
上面这段代码的意思是:合并第1行到第3行,第1列到第5列的的单元格,并为其设置高度为28.5,然后为此合并的单元格赋值和设置样式。
当然也可以不合并,直接为一个单元格赋值,这时去掉第一行的代码就ok了。
注意:NPOI的行和列是从0开始的
基础操作二:每列的列宽固定
由于要使报表美观,我做的报表的列宽是固定的
//要设置的实际列宽中加上列宽基数:0.72
//sheet1.SetColumnWidth(0, 50 * 256);
// 在EXCEL文档中实际列宽为49.29
sheet.SetColumnWidth(, (int)(( + 0.72) * ));//A
sheet.SetColumnWidth(, (int)(( + 0.72) * ));//B
sheet.SetColumnWidth(, (int)(( + 0.72) * ));//C
基础操作三:样式的设定
样式的设定就有点麻烦了,每个单元格都要单独设定样式
ICellStyle style = workbook.CreateCellStyle();
style.Alignment = HorizontalAlignment.CENTER;//左右居中
style.VerticalAlignment = VerticalAlignment.CENTER;//上下居中
style.WrapText = true;//自动换行
style.BorderBottom = CellBorderType.THIN;//下边框为细线边框
style.BorderLeft = CellBorderType.THIN;//左边框
style.BorderRight = CellBorderType.THIN;//右边框
style.BorderTop = CellBorderType.THIN;//上边框
style.FillForegroundColor = HSSFColor.YELLOW.index;//背景色为黄色
style.FillPattern = FillPatternType.SOLID_FOREGROUND;//填充图案为全色
IFont font = workbook.CreateFont();
font.FontName = "新細明體";
font.FontHeightInPoints = ;
font.Boldweight = short.MaxValue;//加粗
style.SetFont(font);
基础操作四:把DataTable的数据写入例子
int IBeginCount = ;//开始写数据的行数
int IColumnCount = ;//数据列数
int ITotalCount = dt.Rows.Count;//表的数据行数
int IFoot = IBeginCount + ITotalCount;//开始写页尾的数
for (int i = IBeginCount; i < IBeginCount + ITotalCount; i++)
{
row = sheet.CreateRow(i);
for (int j = ; j < IColumnCount; j++)
{
cell = row.CreateCell(j);
cell.SetCellValue(dt.Rows[i - IBeginCount][j].ToString());
if (j == )
{
cell.CellStyle = styleRed;
}
else
{
cell.CellStyle = styleTable;
}
}
}
上面四个操作就可以产生出基本的excel文件了
3.自己的一些研究
下面的都是自己的一些研究过程,有些地方还不太清楚,与大家一起学习下
自适应宽度
博文名称: NPOI自适应宽度不支持中文解决方案
博文地址:http://blog.csdn.net/jerry_cool/article/details/7000085
注意:里面有个问题,单元格的宽度不能大于255,所以还要在程序里面添加
If(length>255) length=255,不然如果有数据长度过长就会报错。
设置纯色的背景颜色
为了找到这个设置,自己鼓捣了一些时间
最容易想到的肯定是要直接设置了,这样简单粗暴
styleYellow.FillBackgroundColor = HSSFColor.YELLOW.index;
styleYellow.FillPattern = FillPatternType.SOLID_FOREGROUND;
我设置的为黄色,但是显示的确不是黄色,虽然有填充,但是却是黑色。
上面的方法不ok那我就要继续找了
看了NPOI的官方教程:NPOI 1.2.4 教程 – 2.2.6设置单元格的背景和图案
地址:http://tonyqus.sinaapp.com/archives/169
第一步:我设置
styleYellow.FillPattern = FillPatternType.NO_FILL;
styleYellow.FillBackgroundColor = HSSFColor.YELLOW.index;
可是根本就没有颜色,根本就没有填充,这时就算设置了FillForegroundColor了没用背景颜色
第二步:我随便选了一个图案进行设置
styleYellow.FillForegroundColor = HSSFColor.BLACK.index;
styleYellow.FillBackgroundColor = HSSFColor.YELLOW.index;
styleYellow.FillPattern = FillPatternType.LESS_DOTS;
这时背景颜色是黄色,但是有图案进行干扰,值得注意的是,我不设置FillForegroundColor就没有FillBackgroundColor这个颜色,妈蛋,这是要闹哪样?我只想说,我不要图案。
最后我找到了方法
styleYellow.FillForegroundColor = HSSFColor.YELLOW.index;
styleYellow.FillPattern = FillPatternType.SOLID_FOREGROUND;
为什么是用图案的FillForegroundColor,图案的全是这个颜色就对了…
怎么设置行高自适应
COM组件有个AutoFit()方法全局设置为行高自适应,但是NPOI找了很久也没有找到,在网上也没这方面的例子。但是我发现有时候会自动调整高度,当设置了自动换行后,有些数据行会自动调整高度,有些则不会,但是当我为前几行设置高度后,就又可以自动调整高度了。不太清楚这个处理原理,求指教。
合并单元格
sheet.AddMergedRegion(new CellRangeAddress(0, 0, 6, 15));
这里不讲用法,只是有个地方要注意下。
虽然合并时取的值是最左上角单元格的数据,但是我设置0行6列为有下边框,但是其他合并的单元格并没有下边框,说明样式不适用,还是乖乖的每个单元格加吧。
这些就是我的一些操作,当然NPOI还是比较博大精深的,还有待学习
利用NPOI组件产Excel完整操作的更多相关文章
- 利用Com组件产Excel完整操作
最近公司要批次产出报表,是利用控制台应用程序操作Excel,并设置各种样式. 在网上搜索此类的例子,但是感觉一些用法都已经发生了变化,我用的.net 4.0 ,Microsoft.Office.Int ...
- 使用ItextSharp产PDF完整操作
原文 使用ItextSharp产PDF完整操作 记得上回有写到用C#操作Excel(.net 4.0) 很多朋友说推荐用NPOI,的确,用微软自带的操作execl会有很大的问题.客户的主机不愿意安装e ...
- 利用kettle组件导入excel文件到数据库
利用kettle组件导入excel文件到数据库 1. 实现目标 把excel文件内容导入到目标表中:然后用java调用kettle的转换.excel文件的内容仅仅有两列,示比例如以下: wat ...
- 利用ItextSharp产PDF完整操作
记得上回有写到用C#操作Excel(.net 4.0) 很多朋友说推荐用NPOI,的确,用微软自带的操作execl会有很大的问题.客户的主机不愿意安装excel, 这时我才意识到用自带组件完全是不行的 ...
- .net利用NPOI导入导出Excel
NPOI在.net中的操作Excel 1.读取 using (FileStream stream = new FileStream(@"c:\客户资料.xls", FileMode ...
- C#调用NPOI组件读取excel表格数据转为datatable写入word表格中并向word中插入图片/文字/书签 获得书签列表
调用word的com组件将400条数据导入word表格中耗时10分钟简直不能忍受,使用NPOI组件耗时4秒钟.但是NPOI中替换书签内容的功能不知道是不支持还是没找到. 辅助类 Excel表格数据与D ...
- .net mvc利用NPOI导入导出excel
1.导出Excel :首先引用NPOI包(Action一定要用FileResult) /// <summary> /// 批量导出需要导出的列表 /// </summary> ...
- ASP.Net MVC利用NPOI导入导出Excel
因近期项目遇到所以记录一下: 首先导出Excel: 首先引用NPOI包 http://pan.baidu.com/s/1i3Fosux (Action一定要用FileResult) /// <s ...
- net mvc 利用NPOI导入导出excel
1.导出Excel : 首先引用NPOI包(Action一定要用FileResult) /// <summary> /// 批量导出需要导出的列表 /// </summary> ...
随机推荐
- Java课程目录
Java课程目录 1 年前 大家收藏一下这篇文章,这是所有课程的目录. 第一周: 第一课:进制及计算机表示 第二课:进制习题课,进一步介绍进制的知识 第三节课:Java语言的品味(一),通过stati ...
- PJMEID学习之视频的捕捉与播放
pjmedia是pjsip的视频部分,官网明确提示,要想使用pjmedia离不开directshow/sdl/ffmpeg这三个库. 软件版本的限制: ffmpeg不能高于1.25.(建议下载1.01 ...
- Android学习记录(9)—Android之Matrix的用法
Matrix ,中文里叫矩阵,高等数学里有介绍,在图像处理方面,主要是用于平面的缩放.平移.旋转等操作. 首先介绍一下矩阵运算.加法和减法就不用说了,对应位相加就好.图像处理,主要用到的是乘法 .下面 ...
- 利用binlog server及Xtrabackup备份集来恢复误删表(drop)
Preface Today I'm gonna test how to rescue a dropped table from binlog server based on a ful ...
- 孤荷凌寒自学python第十九天python函数嵌套与将函数作为返回对象及闭包与递归
孤荷凌寒自学python第十九天python函数嵌套与将函数作为返回对象及闭包与递归 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) Python函数非常的灵活,今天学习了python函数的以 ...
- Megacli查看Dell服务器Raid状态
通常我们使用的DELL/HP/IBM三家的机架式PC级服务器阵列卡是从LSI的卡OEM出来的,DELL和IBM两家的阵列卡原生程度较高,没有做太多封装,可以用原厂提供的阵列卡管理工具进行监控:而HP的 ...
- mysql安装目录、配置文件存放位置
linux系统下,如何知道mysql使用的配置文件到底是哪个呢?linux自带的mysql的安装目录又是什么呢?数据存放在什么目录下? 1.linux系统自带的mysql,其安装目录及数据目录查看方法 ...
- 【转载】10个最佳ES6特性
译者按: 人生苦短,我用ES6. 原文: Top 10 ES6 Features Every Busy JavaScript Developer Must Know 译者: Fundebug 为了保证 ...
- (总结)Nginx与Apache、Tomcat、Resin动静分离核心配置
PS:近来有几个刚使用nginx的新童鞋老问我,nginx+fastcgi不够稳定,偶尔出现502错误,怎么解决?本人使用nginx也有3年多了,也认为php-fpm模块不够稳定,在访问量不大的时候没 ...
- P1447 [NOI2010]能量采集
题目描述 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后,栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. 栋栋的植物种得非常整齐,一共 ...