C#NOPI具体使用方法及教程资料.docx
- 文档编号:30521164
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:125
- 大小:1.78MB
C#NOPI具体使用方法及教程资料.docx
《C#NOPI具体使用方法及教程资料.docx》由会员分享,可在线阅读,更多相关《C#NOPI具体使用方法及教程资料.docx(125页珍藏版)》请在冰豆网上搜索。
C#NOPI具体使用方法及教程资料
C#NOPI具体使用手册
目录
1.认识NPOI
2.使用NPOI生成xls文件
2.1创建基本内容
2.1.1创建Workbook和Sheet
2.1.2创建DocumentSummaryInformation和SummaryInformation
2.1.3创建单元格
2.1.5创建批注
2.1.6创建页眉和页脚
2.2单元格操作
2.2.1设置格式
2.2.2合并单元格
2.2.3对齐相关设置
2.2.4使用边框
2.2.5字体设置
2.2.6背景和纹理
2.2.7设置宽度和高度
2.3使用Excel公式
2.3.1基本计算
2.3.2SUM函数
2.3.3日期函数
2.3.4字符串相关函数
2.3.5IF函数
2.3.6CountIf和SumIf函数
2.3.7Lookup函数
2.3.8随机数函数
2.3.9通过NPOI获得公式的返回值
2.4创建图形
2.4.1画线
2.4.2画矩形
2.4.3画圆形
2.4.4画Grid
2.4.5插入图片
2.5打印相关设置
2.6高级功能
2.6.1调整表单显示比例
2.6.2设置密码
2.6.3组合行、列
2.6.4锁定列
2.6.5显示/隐藏网格线
2.6.6设置初始视图的行、列
2.6.7数据有效性
2.6.8生成下拉式菜单
3.项目实践
3.1基于.xls模板生成Excel文件
3.2生成九九乘法表
3.3生成一张工资单
3.4从xls文件中抽取文本
3.5巧妙使用ExcelChart
3.6导入Excel文件
NPOI1.2教程-1认识NPOI
本章将介绍NPOI的一些基本信息,包括以下几个部分
∙什么是NPOI
∙版权说明
∙相关资源
∙团队介绍
∙未来展望
∙各Assembly的作用
1.1什么是NPOI
NPOI,顾名思义,就是POI的.NET版本。
那POI又是什么呢?
POI是一套用Java写成的库,能够帮助开发者在没有安装微软Office的情况下读写Office97-2003的文件,支持的文件格式包括xls,doc,ppt等。
在本文发布时,POI的最新版本是3.5beta6。
NPOI1.x是基于POI3.x版本开发的,与poi3.2对应的版本是NPOI1.2,目前最新发布的版本是1.2.1,在该版本中仅支持读写Excel文件和Drawing格式,其他文件格式将在以后的版本中得到支持。
1.2版权说明
NPOI采用的是Apache2.0许可证(poi也是采用这个许可证),这意味着它可以被用于任何商业或非商业项目,你不用担心因为使用它而必须开放你自己的源代码,所以它对于很多从事业务系统开发的公司来说绝对是很不错的选择。
当然作为一个开源许可证,肯定也是有一些义务的,例如如果你在系统中使用NPOI,你必须保留NPOI中的所有声明信息。
对于源代码的任何修改,必须做出明确的标识。
完整的apache2.0许可证请见
1.3相关资源
官方网站:
POIFSBrowser1.2
下载地址:
QQ交流群:
78142590
1.4团队介绍
TonyQu来自于中国上海,是这个项目的发起人和开发人员,时区是GMT+8,2008年9月开始了NPOI的开发,负责NPOI所有底层库的开发、测试和bug修复。
个人blog地址为
HüseyinTüfekçilerli来自于土耳其的伊斯坦布尔,也是这个项目的开发人员,时区是GMT+2,2008年11月参与了NPOI的开发,主要负责POIFSBrowser1.0的开发工作。
个人blog地址为
aTao.Xiang,来自中国,2009年8月开始参与该项目,主要参与了NPOI1.2中文版的撰写工作和推广工作
个人blog地址为
1.5回顾与展望
目前POI版本中的HWPF(用于Word的读写库)还不是很稳定,并非正式发布版本,且负责HWPF的关键开发人员已经离开,所以NPOI可能考虑自己重新开发HWPF。
另外,目前微软正在开发OpenXMLFormatSDK,NPOI可能会放弃对ooxml的支持,当然这取决于用户的需求和OpenXMLFormatSDK的稳定性和速度。
从目前而言,NPOI有几大优势
第一,完全基于.NET2.0,而非.NET3.0/3.5。
第二,读写速度快(有个国外的兄弟回复说,他原来用ExcelPackage生成用了4-5个小时,现在只需要4-5分钟)
第三,稳定性好(相对于用OfficeOIA而言,毕竟那东西是基于Automation做的,在Server上跑个Automation的东西,想想都觉得可怕),跑过了将近1000个测试用例(来自于POI的testcase目录)
第四,API简单易用,当然这得感谢POI的设计师们
第五,完美支持Excel2003格式(据说myxls无法正确读取xls模板,但NPOI可以),以后也许是所有Office2003格式
希望NPOI把这些优势继续发扬下去,这样NPOI才会更有竞争力。
1.6NPOI1.2中各Assembly的作用
NPOI目前有好几个assembly,每个的作用各有不同,开发人员可以按需加载相应的assembly。
在这里大概罗列一下:
NPOI.Util 基础辅助库
NPOI.POIFS OLE2格式读写库
NPOI.DDF MicrosoftDrawing格式读写库
NPOI.SS Excel公式计算库
NPOI.HPSF OLE2的SummaryInformation和DocumentSummaryInformation属性读写库
NPOI.HSSF ExcelBIFF格式读写库
NPOI1.2教程-2.1.1创建Workbook和Sheet
作者:
TonyQu
NPOI官方网站:
创建Workbook说白了就是创建一个Excel文件,当然在NPOI中更准确的表示是在内存中创建一个Workbook对象流。
本节作为第2章的开篇章节,将做较为详细的讲解,以帮助NPOI的学习者更好的理解NPOI的组成和使用。
NPOI.HSSF是专门负责ExcelBIFF格式的命名空间,供开发者使用的对象主要位于NPOI.HSSF.UserModel和NPOI.HSSF.Util命名空间下,下面我们要讲到的Workbook的创建用的就是NPOI.HSSF.UserModel.HSSFWorkbook类,这个类负责创建.xls文档。
在开始创建Workbook之前,我们先要在项目中引用一些必要的NPOIassembly,如下所示:
NPOI.dll
NPOI.POIFS.dll
NPOI.HSSF.dll
NPOI.Util.dll
要创建一个新的xls文件其实很简单,只要我们初始化一个新的HSSFWorkbook实例就行了,如下所示:
usingNPOI.HSSF.UserModel;
...
HSSFWorkbookhssfworkbook=newHSSFWorkbook();
是不是很方便啊,没有任何参数或设置,但这么创建有一些限制,这样创建出来的Workbook在Excel中打开是会报错的,因为Excel规定一个Workbook必须至少带1个Sheet,这也是为什么在Excel界面中,新建一个Workbook默认都会新建3个Sheet。
所以必须加入下面的创建Sheet的代码才能保证生成的文件正常:
HSSFSheetsheet=hssfworkbook.CreateSheet("newsheet");
如果要创建标准的Excel文件,即拥有3个Sheet,可以用下面的代码:
hssfworkbook.CreateSheet("Sheet1");
hssfworkbook.CreateSheet("Sheet2");
hssfworkbook.CreateSheet("Sheet3");
最后就是把这个HSSFWorkbook实例写入文件了,代码也很简单,如下所示:
FileStreamfile=newFileStream(@"test.xls",FileMode.Create);
hssfworkbook.Write(file);
file.Close();
这里假设文件名是test.xls,,在创建完FileStream之后,直接调用HSSFWorkbook类的Write方法就可以了。
最后你可以打开test.xls文件确认一下,是不是有3个空的Sheet。
相关范例请见NPOI1.2正式版中的CreateEmptyExcelFile项目。
NPOI1.2教程-2.1.2创建DocumentSummaryInformation和SummaryInformation
作者:
TonyQu
NPOI官方网站:
昨天收到了不少回复,有msn上的,也有blog上的,我代表NPOITeam向所有支持和关注NPOI的兄弟表示感谢,让我们共同完善NPOI
。
前一节中我们讲解了如何创建一个新的Workbook,但在此过程中大家也许会发现一个细节,这些文件没有包括DocummentSummaryInformation和SummaryInformation头。
如果你还不是很清楚我在说什么,可以看POIFSBrowser打开test.xls文件后的截图:
你会发现只有Workbook目录,其他什么都没有,但事实上一个正常的xls文件,比如说Excel生成的xls文件是类似下面的结构:
是不是多出来DocumentSummaryInformation和SummaryInformation两个头?
很多人可能对DocumentSummaryInformation和SummaryInformation很陌生,可能第一次听说这玩意,没事,这很正常,因为普通用户很少会去使用这些东西,但它们其实比想象中有用。
请看上图中的信息,如作者、标题、标记、备注、主题等信息,其实这些信息都是存储在DocummentSummaryInformation和SummaryInformation里面的,这么一说我想大家应该明白了吧,这些信息是为了快速提取文件信息准备。
在WindowsXP中,也有对应的查看和修改界面,只是没有Vista这么方便,如下所示:
这恐怕也是很多人对于这些信息漠不关心的原因吧,因为没有人愿意通过右击文件->属性这样复杂的操作去查看一些摘要信息。
提示
DocummentSummaryInformation和SummaryInformation并不是Office文件的专利,只要是OLE2格式,都可以拥有这两个头信息,主要目的就是为了在没有完整读取文件数据的情况下获得文件的摘要信息,同时也可用作桌面搜素的依据。
要了解DocummentSummaryInformation的全部属性请见
好了,说到这里,我想大家对于接下来我们要创建的内容有了初步的认识,下面我们就马上动手创建。
首先引用以下这些命名空间:
usingNPOI.HSSF.UserModel;
usingNPOI.HPSF;
usingNPOI.POIFS.FileSystem;
其中与DocummentSummaryInformation和SummaryInformation密切相关的是HPSF命名空间。
首先创建Workbook
HSSFWorkbookhssfworkbook=newHSSFWorkbook();
然后创建DocumentSummaryInformation
DocumentSummaryInformationdsi=PropertySetFactory.CreateDocumentSummaryInformation();
dsi.Company="NPOITeam";
再创建SummaryInformation
SummaryInformationsi=PropertySetFactory.CreateSummaryInformation();
si.Subject="NPOISDKExample";
因为是范例,这里仅各设置了一个属性,其他都没有设置。
现在我们把创建好的对象赋给Workbook,这样才能保证这些信息被写入文件。
hssfworkbook.DocumentSummaryInformation=dsi;
hssfworkbook.SummaryInformation=si;
最后和2.1.1节一样,我们把Workbook通过FileStream写入文件。
相关范例请见NPOI1.2正式版中的CreatePOIFSFileWithProperties
NPOI1.2教程-2.1.3创建单元格
作者:
TonyQu
NPOI官方网站:
用过Excel的人都知道,单元格是Excel最有意义的东西,我们做任何操作恐怕都要和单元格打交道。
在Excel中我们要添加一个单元格只需要点击任何一个单元格,然后输入内容就是了,但是Excel底层其实没有这么简单,不同的单元格是有不同的类型的,比如说数值单元格是用NumberRecord表示,文本单元格是用LabelSSTRecord表示,空单元格是用BlankRecord表示。
这也就意味着,在设置单元格时,你必须告诉NPOI你需要创建哪种类型的单元格。
要创建单元格首先要创建单元格所在的行,比如,下面的代码创建了第0行:
HSSFSheetsheet1=hssfworkbook.CreateSheet("Sheet1");
HSSFRowrow1=sheet1.CreateRow(0);
行建好了,就可以建单元格了,比如创建A1位置的单元格:
row1.CreateCell(0).SetCellValue
(1);
这里要说明一下,SetCellValue有好几种重载,你可以设置单元格为bool、double、DateTime、string和HSSFRichTextString类型。
其中对于string类型的重载调用的就是HSSFRichTextString类型的重载,所以是一样的,HSSFRichTextString可用于有字体或者Unicode的文本。
如果你觉得每一行要声明一个HSSFRow很麻烦,可以用下面的方式:
sheet1.CreateRow(0).CreateCell(0).SetCellValue("ThisisaSample");
这么用有个前提,那就是第0行还没创建过,否则得这么用:
sheet1.GetRow(0).CreateCell(0).SetCellValue("ThisisaSample");
注意:
这里的行在Excel里是从1开始的,但是NPOI内部是从0开始的;列在Excel里面是用字母表示的,而NPOI中也是用从0开始的数字表示的,所以要注意转换。
如果你要获得某一个已经创建的单元格对象,可以用下面的代码:
sheet1.GetRow(row_index).GetCell(column_index);
本节仅讲解最基本的单元格创建,有关单元格格式设置、样式等高级话题请见:
2.2节单元格相关操作。
相关范例请见NPOI1.2正式版中的SetCellValuesInXls项目。
NPOI1.2教程-2.1.4创建批注
作者:
TonyQu
NPOI官方网站:
很多人不怎么用Excel中的批注,所以我特地截了张图,让大家知道本节我们要创建的到底是什么东西。
在过去,我们恐怕没有办法实现这一功能,因为无论是cvs法、html法、oledb法都没有提供这样的接口,当然OfficePIA法可以做到,但是性能实在太差,而且稳定性不好,经常莫名其妙crash(这是某某兄弟给我的反馈,我引用了下,呵呵)。
在以后的教程中,你将看到更多在过去无法通过传统方法实现的东西,好戏才刚刚开始。
批注主要有三个属性需要设置,一个是批注的位置和大小、一个是批注的文本、还有一个是批注的作者。
批注的位置和大小,在Excel中是与单元格密切相关的,NPOI中通过HSSFClientAnchor的实例来表示,它的构造函数比较复杂,有8个参数,它们分别是
参数
说明
dx1
第1个单元格中x轴的偏移量
dy1
第1个单元格中y轴的偏移量
dx2
第2个单元格中x轴的偏移量
dy2
第2个单元格中y轴的偏移量
col1
第1个单元格的列号
row1
第1个单元格的行号
col2
第2个单元格的列号
row2
第2个单元格的行号
例如,如果我们打算让注释显示在B3和E5之间,就应该这么写:
HSSFPatriarchpatr=sheet.CreateDrawingPatriarch();
HSSFCommentcomment1=patr.CreateComment(newHSSFClientAnchor(0,0,0,0,1,2,4,4));
下面我们设置这个批注的内容和作者,这个比较简单:
comment1.String=newHSSFRichTextString("HelloWorld");
comment1.Author="NPOITeam";
最后一步就是把批注赋给某个单元格:
HSSFCellcell=sheet.CreateRow
(1).CreateCell
(1);
cell.CellComment=comment1;
对于批注,你有两种选择,一种是隐藏(默认),一种是显示(即表单一打开就显示该批注),可以通过comment1.Visible属性来控制。
看了上面这张图大家就应该明白了,这里有2个批注,下面那个是显示的,上面那个是隐藏的。
相关范例请见NPOI1.2正式版中的SetCellCommentInXls。
NPOI1.2教程-2.1.6创建页眉和页脚
作者:
TonyQu
NPOI官方网站:
很多人并不知道Excel的页眉和页脚功能,因为在界面上是显示不了页眉和页脚的,必须在打印页面中才能看到,这也直接导致了其设置界面也显得更隐秘,你必须进入页面设置–>页眉和页脚才能设置。
以下是Office2007中的设置界面。
当你按“自定义页眉”或“自定义页脚”时,你会看到以下界面,Excel把页眉、页脚分成了左中右三部分,这一点绝非单纯体现在界面上,在底层的存储中也是如此。
如果你设置的是“左”的内容,底层的存储字符串就会在开头加上&L,如果是“右”的内容则会加上&R,所以HeaderRecord中的字符串看上去是这样的:
"&C&LFooterA&R”,这个字符串的意思是仅设置了“左”的内容,内容是FooterA。
看了这些我想你应该对页眉和页脚有所了解了,回过头来说NPOI,NPOI中主要是靠HSSFSheet.Header和HSSFSheet.Footer来设置的,这两个属性分别是HSSFHeader和HSSFFooter类型的。
参考代码如下:
HSSFSheets1=hssfworkbook.CreateSheet("Sheet1");
s1.CreateRow(0).CreateCell
(1).SetCellValue(123);
//setheadertext
s1.Header.Center="Thisisatestsheet";
//setfootertext
s1.Footer.Left="CopyrightNPOITeam";
s1.Footer.Right="createdbyTonyQu(瞿杰)";
以上代码中我添加了页眉的Center内容,Footer的Left和Right内容,在打印预览中看到的效果大概是这样的:
页眉
页脚
至于一些Excel特殊字符,比如说页码可以用&P,当前日期可以用&D,其他的东西你就自己研究吧。
本范例完整代码请见NPOI.Examples中的CreateHeaderFooterInXls项目。
NPOI1.2教程-2.2.1设置单元格格式
作者:
TonyQu
NPOI官方网站:
在Excel中我们经常要设置格式,比如说日期格式(yyyymmdd)、小数点格式(1.20)、货币格式($2000)、百分比格式(99.99%)等等,这些东西在过去我们恐怕只能在服务器端生成好,不但增加了服务器端的代码量,还造成了不必要的字符串替换操作,如今NPOI将让服务器从这种完全没有必要的操作中解放出来,一切都将由Excel在客户端处理。
使用NPOI时要注意,所有的格式都是通过CellStyle.DataFormat赋给单元格的,而不是直接赋给单元格。
案例一 日期格式
假设我们现在需要显示的日期的格式为2008年5月5日,可以用下面的代码生成:
HSSFSheetsheet=hssfworkbook.CreateSheet("newsheet");
HSSFCellcell=sheet.CreateRow(0).CreateCell(0);
cell.SetCellValue(newDateTime(2008,5,5));
//setdateformat
HSSFCellStylecellStyle=hssfworkbook.CreateCellStyle();
HSSFDataFormatformat=hssfworkbook.CreateDataFormat();
cellStyle.DataFormat=format.GetFormat("yyyy
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- NOPI 具体 使用方法 教程 资料