C#做数据导出Excel表格——NPOI插件

项目的数据保存在数据库中,要拿出来利用,可以操作数据库的数据,但是数据库不可以给项目的使用人操作,这样项目的很多重要信息有可能会被更改,这样存储项目数据的数据库就很危险;那么要利用项目数据又不直接操作数据库可以怎样做?在项目中引入NPOI.dll插件做导出数据,NPOI插件提供项目与Excel表格链接的方法;下面是根据需求导出的部分数据到Excel表格(其中姓名栏数据已掩盖)、表格文件名称的截图:

C#做数据导出Excel表格——NPOI插件_第1张图片
在这里插入图片描述
其做数据导出的大体思路:
一、 引用NPOI插件
二、 使用插件方法HSSFWorkbook创建工作簿;
三、 使用插件方法ISheet创建工作表并命名;
四、 书写工作表表头(学号 姓名 身份证号 性别 学院 专业 年级 班级 账号);
五、 linq查询数据list 书写到工作表;
六、 使用IO流写出数据
NPOI是配置文件、dll文件,在项目的bin文件夹;作用:项目与excel表格(word文档)链接
引用:1、NPOI.dll文件放到bin文件夹2、项目引用,添加引用,找到NPOI.dll文件
在这里插入图片描述
在这里插入图片描述
导出方法:
根据需求查询全部数据,可以筛选部分数据导出excel表格,故需要条件查询数据;因项目的需求是做学生信息的导出,故需要查询与学生信息有关的表,通过学生表连接其它表,查询全部学生信息,查询出的全部数据声明一个列表通过ToList()转化为对象列表的格式,也可以在查询数据后直接ToList()转化。在页面显示的数据,是显示在表格里的,其数据根据表格的设置表头内容、每一页显示多少表数据(分页显示数据)等;数据不直接导出Excel表格(工作簿),缺少表头,直接导出会造成数据混乱,需要代码编写Excel表格。

代码创建Excel表格,Excel表格也称工作簿
一、 创建工作簿
NPOI插件的方法创建:HSSFWorkbook excelBook = new HSSFWorkbook();
二、创建工作表,并且把工作表(sheet)重命名为:考生信息
NPOI.SS.UserModel.ISheet sheetl = excelBook.CreateSheet(“考生信息”);
其创建工作簿、工作表的代码、导出数据的工作表名如下截图:
C#做数据导出Excel表格——NPOI插件_第2张图片在这里插入图片描述

编写工作表:1、创建标题行(表头)并设置值 2、数据:查询出来的数据编写行 3、使用IO流写出数据

1、 创建第一行(表头行) 备注:索引(下标)从0开始,即索引为0的为工作表的第一行(表头)
用NPOI插件的方法:NPOI.SS.UserModel.IRow rowl=sheetl.CreateRow(0); rowl是自命名的表头行表示字段
2、 创建第一行的9列并给每一列赋值
用NPOI插件的方法,创建列并赋值的格式写法:rowl.CreateCell(0).SetCellValue(“学号”);
C#做数据导出Excel表格——NPOI插件_第3张图片
3、 创建数据行(列不变,还是9列)
for循环根据查询数据的条数多少就循环创建多少行,并且每一行创建9列,每一列都进行赋值;for循环创建行时i=0,注意创建行要从第二行起创建,即索引(下标)为1的行,因为索引为0的第一行已被表头行占用,所以循环创建行索引为(i+1),故循环创建行的写法:NPOI.SS.UserModel.IRow rowTemp = sheetl.CreateRow(i + 1); rowTemp为自命名的行表示字段
C#做数据导出Excel表格——NPOI插件_第4张图片
三、将Excel表格转化为流,输出
1、重命名工作簿(Excel表格),具体名称确定,文件格式确定
为防止导出的Exce表格重复,所以重命名拼接当前的日期时间,因为时间是不会重复;首先声明一个字符串fileName,并给字符串赋值为“考生信息”拼接当前的日期时间,通过DateTime.Now.ToString(“yyyy-MM-dd-HH-mm-ss-ffff”)当前的日期时间,在拼接一个文件后缀名(.xls),Excel表格的格式有很多种,比如:.xls、.xlsx、.csv,这次导出的Excel表格的文件格式后缀为.xls;用代码表示如下:var filename =“考生信息”+ DateTime.Now.ToString(“yyyy-MM-dd-HH-mm-ss-ffff”)+“.xls”;
2、 将Excel表格转化为流,输出
创建文件流,使用System.IO流的方法,要Using System.IO;MemoryStream创建其支持存储区为内存的流,bookStream自命名的流文件名
MemoryStream bookStream = new MemoryStream();
把文件写入流,NPOI插件的方法向流中写入字节序列HSSFWorkbook.Write();因为创建Excel表格时也是用NPOI插件的方法HSSFWorkbook,并且把Excel表格重命名了一个表示字段,故现在把Excel表格写入文件流,直接用命名表格文件的字段找到写入文件流的方法即可,不需要通过HSSFWorkbook.Write()这种方法找到写入的方法。代码写法:excelBook.Write(bookStream); 其括号内为要写入的流文件,即把bookStream流文件写入Excel表格(excelBook)。
3、返回文件,把重命名的名字给到Excel表格
Excel表格是文件,所以必须是File的格式返回;第一个参数:具体返回的文件,第二个参数:返回(确定)的文件类型,第三个参数:具体的文件名称
return File(bookStream, “application/vnd.ms-excel”,fileName);//File文件返回
C#做数据导出Excel表格——NPOI插件_第5张图片

你可能感兴趣的:(C#做数据导出Excel表格——NPOI插件)