通过NPOI在Controllers中创建Excel表格

Excel表格,计算机中最常用的办公软件之一,通常我们用它来存放数据。当然,在Excel中存放的数据量不能过于庞大,超过一万条以上的数据还是存放在数据库比较妥当。在设计项目的过程中,有一个页面需要制作一个导出按钮,将页面中的表格数据导出到本地储存中,但在导出的过程中需要一个模版进行对表格数据的接收,对我而言Excel表格便是最优的数据接收模版。
那么,如何在项目的Controllers(控制器)中创建一份Excel表格来接收视图层的数据呢?
首先,我需要在控制器的顶部左上角的Using处进行对NPOI的引用。NPOI是什么呢?
NPOI(MVC中自带的插件,通过在控制器的Using引用进行调用,它的作用是即使计算机本地无Excel办公软件,NPOI也可以将获取到的数据转换成Excel格式的数据进行存放)
在成功引用后,通过NPOI中定义好的HSSFWorkbook方法创建一份Excel工作簿。工作簿就相当于Excel表格中的一个空白模版,数据什么都还没有,无行无列无单元格。定义变量excelBook 接收创建好的工作簿:

HSSFWorkbook excelBook = new HSSFWorkbook();

在创建好工作簿后,紧接着就是工作表的创建,创建工作表(sheet)也就等于在空白的工作簿中添加了一张sheet表。如图,当前操作相对于Excel中同等的表生成步骤:
通过NPOI在Controllers中创建Excel表格_第1张图片
通过NPOI中的UserModel.ISheet方法创建一张工作表(sheet1),CreateSheet后面的("")可以为工作表设置表名:

NPOI.SS.UserModel.ISheet sheet1 = excelBook.CreateSheet(“表名”);

表创建完毕,接着便是创建标题行(表格开头第一行),一份完整的表格数据不可能没有标题的不是么,唯有设置好了标题行,才能刚好的将导入的数据进行分类操作,同类型的数据在同标题的列中存放。创建标题行,调用NPOI中的UserModel.IRow 方法,在工作表中创建标题行,(0)为索引,标题行是表格的首行,因此索引为0:

NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow(0);

标题行创建完毕,但它现在依然是一条空行,接下来就要准备向空行内的每个单元格填充数据,如下图:
通过NPOI在Controllers中创建Excel表格_第2张图片
数据填充完成,标题行部分结束,剩下的就是如何将导出的数据传入表格了。通过简单的for循环便可以搞定,循环遍历提取表格变量对象中的数据,再传入各个行相应的单元格中,这样导出的数据就可以顺理成章的被接收了。
在创建好整个Excel表格后,还要帮它起个名字,若是将每个导入表格的文件直接命名为Excel的话,感觉不太理想。
所以,接下来就是在控制器中帮创建好的Excel文件命名: “命名” + 现在创建表格的时间[年 月 日 时 分 秒 毫秒] + xls[文件名称]。

string fileName = “命名” + DateTime.Now.ToString(“yyyy-MM-dd-HH-mm-ss-ffff”) + ".xls"

到这里为止创建Excel表格的问题就完成了,剩下的就是如何通过控制器将创建好的Excel文件输出。
1.初始化内存流,再将创建好的Excel工作簿转化成内存流存入其中
通过NPOI在Controllers中创建Excel表格_第3张图片
2.在输出准备好的Excel之前调用Seek(偏移量,游标位置)方法,移动文件读取指针到指定的位置进行文件内容的读取:

ExcelStream.Seek(0, SeekOrigin.Begin);

Seek(0, SeekOrigin.Begin)方法:第一个参数表示相对的位置(0从头开始读取),第二个参数表示参照位置。
3.最后就是将文件转换成MIME的文件类型进行输出就大功告成了。在这里插入图片描述

你可能感兴趣的:(通过NPOI在Controllers中创建Excel表格)