时间:2022-06-12 01:41:11
摘要:为避免传统操作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( ); //创建样式对象