基于NPOI组件生成Excel报表的设计与实现

时间:2022-06-12 01:41:11

基于NPOI组件生成Excel报表的设计与实现

摘要:为避免传统操作Excel遇到的问题,提高信息管理系统中数据导出操作的灵活性和通用性,该文详细介绍了在Visual Studio 2008使用C#语言、通过引用开源的NPOI组件,结合Microsoft SQL Server 2005实现数据库数据导出到Excel的设计思路和实现方法。

关键词:C#;Excel;NPOI;导出数据

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)01-0064-02

1 概述

NPOI是POI(POI是一个开源的Java读写Excel、Word等微软OLE2组件文档的项目)项目的.Net版本。NPOI可以在未安装Office的环境下实现Excel、Word等微软OLE2组件文档读写[1],并能实现公式计算、单元格高级样式等复杂操作。因此,本文借助第三方组件NPOI的方式来实现Excel数据的批量导出。

2 数据导出设计思路

2.1基本思路

采用NPOI组件将SQL Server数据库中的数据导出到Excel表格的思路分析:

1) 选择需要导出的数据;

2) 从SQL Server2005读取表中数据到DataSet中;

3) 调用FileStream类创建一个文件对象;

4) 调用HSSFWorkbook类创建工作薄对象;

5) 调用ISheet类创建工作表对象;

6) 定义表格行和单元格;

7) 将DataSet中的数据按格式要求分别填入工作表对应的单元格;

8) 将整个工作表内容写入到文件对象中,从而生成对应的Excel文件。

2.2数据导出流程图

使用NPOI组件导出Excel数据的流程图如图1所示。

3 使用NPOI导出数据到Excel

Excel包括的核心元素按照层次由上至下有工作簿(也就是一个xls文件)、工作表(也就是一个sheet)、表格中一个行、表格中的一个单元格。与此相对应,NPOI通过HSSFWorkbook、HSSFSheet、HSSFRow、HSSFCell 这4个类分别来定义上述的Excel核心元素,完成xls文件的创建过程[2]。

3.1添加NPOI的引用

使用NPOI创建Workbook之前,先要在项目中添加NPOI的引用,具体步骤如下:

1)在项目菜单栏中选择“项目”“添加引用”,弹出“添加引用”对话框。

2)选择浏览选项卡,选择NPOI.dll。

3)单击“确定”按钮,将NPOI.dll引用到工程中。

4)进入代码编辑器窗口,添加using语句引入NPOI的命名空间。

using NPOI.HSSF.UserModel;

using NPOI.SS.UserModel;

using NPOI.SS.Util;

NPOI.HSSF.UserModel 空间主要有HSSFWorkbook、HSSFSheet、HSSFRow、HSSFCell,对应的接口为位于NPOI.SS.UserModel 空间下的IWorkbook、ISheet、IRow、ICell,分别对应Excel文件、工作表、行、单元格[3]。

图1 数据导出流程图

3.2创建工作薄

创建一个新的xls工作薄只需要初始化一个新的HSSFWorkbook实例,代码如下:

HSSFWorkbook wkBook =new HSSFWorkbook( ); //创建工作薄wkBook

上述语句创建的wkBook在Excel中打开会报错,因为Excel规定一个Workbook必须至少带一个Sheet,所以必须加入下面创建sheet的代码才能保证生成的文件正常。

ISheet sheet= wkBook.CreateSheet(“单位信息表”); //创建一个工作表sheet

创建单元格首先要创建单元格所在的行,下面的代码创建了第0行。

IRow row = sheet.CreateRow(0); //创建单元格所在的行row

行创建好后就可以创建单元格,下面的代码创建了A1位置的单元格。

ICell cell = row.CreateCell(0); //创建单元格cell

3.3 设置单元格字体

在设置字体之前,首先需要创建字体对象,代码如下:

IFont font = wkBook.CreateFont( ); //创建字体对象

1)设置字体名称

设置字体名称的前提:假设打开这个xls文件的电脑有这种字体,如果没有,Excel将使用默认字体。下面是设置字体名称为“宋体”的代码:

font.FontName=”宋体”;

2)设置字号

与字号相关的属性有FontHeight和FontHeightInPoints,通常使用FontHeightInPoints来设置,代码如下:

font.FontHeightInPoints = 10; //设置字号

字体在设置完成后,赋给单元格样式,代码如下:

ICellStyle style = wkBook.CreateCellStyle( ); //创建样式对象

上一篇:谈高职旅游类专业汉语言文学教材编写 下一篇:浅析陆逊的军事文书