如何将数据导出到Excel表格

想要在MVC中把你想要的数据导出到Excel表格里,需要以下步骤:
在导出数据之前还要筛选一遍数据,筛选出你想要的数据,用Linq的方法多表联表查询,查出想要的内容,然后写完就写一下导出的代码

  1. 首先要创建一个工作簿,随便用一个变量来接收;
HSSFWorkbook exBook = new HSSFWorkbook();
  1. 创建一个工作表,括号里面的内容根据你具体情况填写
ISheet sheet = exBook.CreateSheet("");
  1. 设计一下表头
    (1)创建表头
IRow headRow = sheet.CreateRow(0);

(2)设置表头的字段,括号里面的内容可以自己随便起

headRow.CreateCell(0).SetCellValue("");
  headRow.CreateCell(1).SetCellValue("");
  headRow.CreateCell(2).SetCellValue("");
  headRow.CreateCell(3).SetCellValue("");
  headRow.CreateCell(4).SetCellValue("");
  headRow.CreateCell(5).SetCellValue("");
  1. 将表头的字段写入表格数据里面
    (1) 创建完表头行之后,就创建行
IRow rowTemp = sheet.CreateRow(i + 1);

(2) 创建行之后,将数据写入行里面,下面那个ToString()是转换一下类型,成绩不是文字,而是数字,需要转换一下类型才可以

rowTemp.CreateCell(0).SetCellValue(listResult[i].StudentNumber);
rowTemp.CreateCell(1).SetCellValue(listResult[i].StudentName);
rowTemp.CreateCell(2).SetCellValue(listResult[i].StudentSex);
rowTemp.CreateCell(3).SetCellValue(listResult[i].Class);               rowTemp.CreateCell(4).SetCellValue(listResult[i].Achievement.ToString());
rowTemp.CreateCell(5).SetCellValue(listResult[i].EligibleType);
/*
          FirstCellNum:获取某行第一个单元格下标
          LastCellNum:获取某行的列数
          FirstRowNum:获取第一个实际行的下标
          LastRowNum:获取最后一个实际行的下标(从零开始)
*/
//遍历excel中一行所有的单元格
      //for 执行九次
     for (int j = row.FirstCellNum; j < cellCount; j++)
        {
             if (row.GetCell(j) != null)
                 {
//赋值之后转换成字符串 
                      dtRow[j] = row.GetCell(j).ToString();
                 }
}

虽然这个不是在这一步操作之后的,但是想让我们明白一下怎么创建的表头跟行,就是表头的那一行执行一次循环读取到了之后就往表格里面的单元格一个格子一个格子执行,有多少就遍历多少遍。比如有九个单元格有名字的,就要遍历九次地往里面填写数据。
5. 将Excel表格里的数据转化为文件流再输出

MemoryStream exStream = new MemoryStream();
exBook.Write(exStream);
  1. 文件输出之前,要调用Seek这个方法,Seek(偏移量,游标位置):确定文件流开始的位置,
Seek(0,Seek.begin) 第一个参数表示相对位置,第二个参数表示参照位置
exStream.Seek(0, SeekOrigin.Begin);
  1. 为下载的Excel文件命名,然后在拼接上一个文件名称的后缀,括号里的那一串是时间,年月日时分秒的首字母,当然还有毫秒,但是一般不加上去
string exFileName = "根据自己的要求写名称" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";
  1. 最后一步,返回,
MIME文件类型(Multipurpose Internet Mail Extensions):多用途互联网邮件扩展类型

在这里插入图片描述
这张图片就是导出到Excel表格之后的效果。这表格是一个一个一行一行地打印上去的。但是计算机的速度我们看不出来 。
简单来说这思路就是
1、 获取读取的文件;2、把文件转换为二进制数组;3、二进制数组转成内存流;4、利用NPOI把内存流中的数据读取成Excel。
而前面是在控制器写的代码,回到页面的话也要分几步走
 首先那个导入的按钮要写方法,第一步肯定要弹出导入Excel表格的模态框,然后重要的一点就是当鼠标移动或者按键盘的时候不要把弹出来的模态框给关闭掉,这就要写一个方法来禁止掉才
在这里插入图片描述
把那两个都设置为false就可以了;
 第二是模板的下载,但是这个可以打开一个新的窗口;
 三 是上传数据到Excel表格并且先把它保存到临时的表里面,等点击保存的时候再把数据放到最终的表里面;
 四、将保存的表格数据放到数据库那里
 最后就是将导出的表格数据放到你最终要的Excel表格那里
记得在第一次老师讲这个导出的时候,听得一头雾水,完全不知道老师是在说着什么,然后下课之后听视频还是不懂,不懂为什么这样写,而这样写可以,用其他方法就不可以

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值