概述
开发工具与关键技术:VS C#
撰写时间:2019年 5月 1日
把数据导出到Excel表格之前对所有数据进行查询,用户可以查询全部数据也可以筛选部分数据导出,将查询出来的数据转化为对象列表的格式 List<数据表> listExaminee = listStu.ToList(); 将页面上查询出来的数据导入到Excel表格的时候还要在项目里引用一个插件NPOI,这个NPOI插件在项目里也可以称为配置文件,是把Word文档跟Excel表格连接起来的一个插件,在项目里引用了using NPOI.HSSF.UserModel;这个插件就可以调用它的方法来创建一个Excel工作簿了。因为导出来的数据是保存到工作簿里,所以就要创建一个工作簿来保存导出来的数据。创建的工作簿分为两部分,一部分是表头;一部分是对应表头的具体信息。
下面是考生信息数据的导出方法:
Excel表格有这几种格式:csv、xls、xlsx、xlsm、xlt、xltx、xltm
我们现在要做的是Excel表格的 xls这个格式的导出
1、调用NPOI里的函数HSSFWorkbook创建一个Excel工作簿:
HSSFWorkbook excelBook = new HSSFWorkbook();
效果图如下:
2、调用NPOI里的函数ISheet创建一个Excel工作表并命名为‘考生信息’:
NPOI.SS.UserModel.ISheet sheet1 = excelBook.CreateSheet("考生信息");
效果图如下:
3、创建表头并给表头赋值,第一行从0开始,第一列也从0开始,索引(下标)从0开始,即索引为0的第一行为表头:
NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow(0);
第一行,一共有9列,创建9列并赋值:
row1.CreateCell(0).SetCellValue("学号"); //第0行的第0列 → 第1行的第1列
row1.CreateCell(1).SetCellValue("姓名"); //第0行的第1列 → 第1行的第2列
row1.CreateCell(2).SetCellValue("身份证号");//第0行的第2列 → 第1行的第3列
row1.CreateCell(3).SetCellValue("性别"); //第0行的第3列 → 第1行的第4列
row1.CreateCell(4).SetCellValue("学院"); //第0行的第4列 → 第1行的第5列
row1.CreateCell(5).SetCellValue("专业"); //第0行的第5列 → 第1行的第6列
row1.CreateCell(6).SetCellValue("年级"); //第0行的第6列 → 第1行的第7列
row1.CreateCell(7).SetCellValue("班级"); //第0行的第7列 → 第1行的第8列
row1.CreateCell(8).SetCellValue("账号"); //第0行的第8列 → 第1行的第9列
效果图如下:把页面上表格的第一行表头数据赋值到Excel表格上
4、创建数据行,它listStu查询的总数有多少行就创建多少行数据,用for循环变例来判断查询有多少行数据,
就循环创建多少行数据:
for (int i = 0; i < listStu.Count(); i++)
创建行,第一行为表头已经存在,从索引(下标)为1的行开始,所以(i + 1):
NPOI.SS.UserModel.IRow rowTemp = sheet1.CreateRow(i + 1);
列数根据表头决定,列数还是为9列不变,给每一行创建9列单元格,并给每个单元格进行赋值:
rowTemp.CreateCell(0).SetCellValue(listExaminee[i].StudentNumber); //学号
rowTemp.CreateCell(1).SetCellValue(listExaminee[i].StudentName); //姓名
rowTemp.CreateCell(2).SetCellValue(listExaminee[i].StudentIDNum); //身份证号
rowTemp.CreateCell(3).SetCellValue(listExaminee[i].StudentSex); //性别
rowTemp.CreateCell(4).SetCellValue(listExaminee[i].AcademeName); //学院
rowTemp.CreateCell(5).SetCellValue(listExaminee[i].SpecialtyName); //专业
rowTemp.CreateCell(6).SetCellValue(listExaminee[i].GradeName); //年级
rowTemp.CreateCell(7).SetCellValue(listExaminee[i].ClassName); //班级
rowTemp.CreateCell(8).SetCellValue(listExaminee[i].UserNuber); //账号
5、 把数据导出来之后就要给这个工作簿命名,因为每次筛选导出来的数据都有可能不一样,所以每次对导出的工作簿命名也不能一样。要区分每一次导出来的工作簿,每导出一次就命名一次,为了每次命名都不一样,所以可以用当前的时间来命名,每次导出的时间不可能相同。
获取当前系统的时间:DateTime 当前、现在:NOw
年-月-日-时-分-秒-毫秒:yyyy-MM-dd-HH-mm-ss-ffff
var fileName = "考生信息" + DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss-ffff") + ".xls";
效果图如下:
6、 现在获取的Excel表格是在内存流里,需要借用IO流里的using System.IO把它读取出来;所以要创建文件流,把它转换为文件流的格式:
MemoryStream bookStream = new MemoryStream();
把得到的Excel表格作为文件流进行输出,文件写入流(向流中写入字节序列):
文件流有两中格式 一种是Write书写
一种是Read读取
excelBook.Write(bookStream);
输出的时候也不可以直接输出,还需要调用一个文件流里的一个函数Seek输出,
Seek(偏移量,游标位置) 把0位置指定为开始位置
bookStream.Seek(0, SeekOrigin.Begin);
7、 最后,再把这文件流作为文件的格式返回,具体返回的文件:bookStream,确定返回的类型Excel表格 “application/vnd.ms-excel”,返回具体的名字fileName。
return File(bookStream, "application/vnd.ms-excel", fileName);
8、 执行导出的操作,导出的数据就是查询得到的数据,查询多少条就导出多少条,所以导出的条件就是查询数据时传过来的条件。要拿导出的条件跟查询的条件进行匹配,如果导出的条件跟查询的条件相等,那么才可以执行导出操作。
//如果查询条件=导出条件
if (strSeachWhere == strTemp)
layer.confirm('您确定要导出' + tabStudent.config.page.count + '条学生信息?',
{ icon: 3, titile: "提示" },
否则:
else {
layer.msg("请查询出要导出的数据!", { icon: 0, skin: "layui-layer-molv" });
}
9、 导出数据后就会在页面上显示导出Excel表格的模板,下载到本地电脑的默认位置。
//新标签页打开下载excel的url,下载excel文件
window.open('/区域/控制器/方法名称?' + strTemp.substring(1, strTemp.length));
最后
以上就是喜悦彩虹为你收集整理的C#把数据导出到Excel表格的全部内容,希望文章能够帮你解决C#把数据导出到Excel表格所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复