我是靠谱客的博主 喜悦彩虹,最近开发中收集的这篇文章主要介绍C#把数据导出到Excel表格,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

开发工具与关键技术: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表格所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部