ASP.NET.MVC关于导出数据的那点事

开发工具与关键技术:VS2015  MVC
作者:超级小贱贱
撰写时间:2019年5月08日

这次的文献内容来说说如何将网页中的数据导出到Excel表格当中。

① 多表连接查询数据,并进行条件筛选
这里大家是不是很熟悉,没错,这里的代码块就是之前说过的多表连接查询数据,
这次在来分析一次,印象会更加深刻一点。首先List一个封装类对象listStudent等于,在用【from:指定范围变量和数据源】指定一张[总表自定义表名1] in 模型中对应的一张表。
接着用【join:按照两个指定匹配条件并使用 equals 来连接两个数据源】 [想要的数据自定义表名2] in 模型中对应的一张表 on [自定义表名1].想要的数据ID equals [想要的数据自定义表名2].想要的数据ID
…………………………
【join:按照两个指定匹配条件并使用 equals 来连接两个数据源】 [想要的数据自定义表名n] in 模型中对应的一张表 on [自定义表名1].想要的数据ID equals [想要的数据自定义表名n].想要的数据ID
,写完后再用orderby 对查询出的数据进行排序,为了防止查询出的数据一开始就跑到最后面,这边给它用个倒叙descending,然后在select new 一个封装类{ 然后里面装想要的数据的各种ID=各种自定义表名.想要的数据名称,然后在挑选出主要的三个主要ID作为筛选条件,并在开头public ActionResult 后面声明一下(int 表1 ID,int 表2 ID,int 表3 ID)
最后}).ToList();用ToList来查询多条数据并转化为List(列表)的方法提取。
给个例子:
在这里插入图片描述
然后用Lambda表达式(运算符是=>,左边是参数[如果有],右边是表达式或者语句)来进行条件筛选在这里插入图片描述
给个例子,以便参考。
然后数据查询和条件筛选就完成啦!

② 创建各种东西
首先呢,先创建一个 Excel的工作簿 HSSFWorkbook excelBook = new HSSFWorkbook();
然后是 创建一个工作表,表名默认为(“考生信息”)NPOI.SS.UserModel.ISheet sheet1 = excelBook.CreateSheet(“考生信息”);接着就是 创建表头行 NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow(0);最后就是设置表头在这里插入图片描述
这里有个细节要注意一下,就是为什么第一个CreateCell()里面不是1开始而是0开头呢?在编程中0才是起步数字,并非像平时排队一样第一个就是1第二个就是2,算是一个小细节哈。
创建好需要的之后,接下来就是要为Excel表格里面添加数据。用for(){}括起来,在for()里面声明好一个int的对象i,并说明当i小于查询数据代码里面的封装类对象listStudent.Count();的时候,i自增(i++)。然后创建行NPOI.SS.UserModel.IRow rowTemp = sheet1.CreateRow(i + 1);创建完之后就可以添加数据了,这里又有一个小重点,
rowTemp.CreateCell(0).SetCellValue(listStudent[i]. XX);
rowTemp.CreateCell(1).SetCellValue(listStudent[i]. XX);
rowTemp.CreateCell(2).SetCellValue(listStudent[i]. XX);
rowTemp.CreateCell(3).SetCellValue(listStudent[i]. XX);
从0开始就不用说了,但是这里的“XX”就必须和上面设置的表头的“XX”一致,但不是一模一样,下面的“XX”是在数据库对应的英文名称,比如设置表头的“XX”是学号,添加数据的“XX”则是StudentNumber。切记,一定要上下保持一致,否则接受数据1不对1的2不对2,怎么接收?
添加完数据之后,就是为Excel文件命个名。string fileName = “考生信息” + DateTime.Now.ToString(“yyyy-MM-dd-HH-mm-ss-ffff”) + “.xls”;导出后的效果就是这样

在这里插入图片描述
这么做是为了方便使用者。接下来就是把所有的数据转化为内存流MemoryStream ExcelStream = new MemoryStream();,然后将Excel文件写入内存流excelBook.Write(ExcelStream);。接下来就输出之前调用Seek(偏移量,游标位置) 移动文件读取指针到指定的位置,Seek(0,Seek.begin) 第一个参数表示相对位置,第二个参数表示参照位置这里的“移动文件读取指针到指定的位置”,举个例子,就像我现在打字一个,那个一闪一闪的竖线就是光标,每当我打完一个字的时候它都会自动往后面条一个单位,就是这个意思ExcelStream.Seek(0, SeekOrigin.Begin);最后呢在返回这个内存流ExcelStream
return File(ExcelStream, “application/vnd.ms-excel”, fileName);
控制器的代码就完成了。

③ 视图层
找到导出信息的点击事件,并给它一个function。首先,获取当前表格数据的筛选条件,还记得吗,在导出数据之前先要做的查询数据代码里面,就有说过要将主要的ID挑选出来作为筛选条件。先声明,在调用插件方法 $ ( “ # ID ” ) . val ( );,然后在对它们进行判断,举个例子
在这里插入图片描述
如果ID不等于 空 或者ID不等于undefined未定义,ID=0;所有的都要根据情况来判断,并非所有的都是这么写判断。写完后再调用插件方法来输出提示框内容,当你选择好数据并点击“导出数据”这个按钮的时候,就弹出提示框并说明“是否要导出当前表格中的数据,是请点击确定按钮,否则请筛选需要导出的数据”
在这里插入图片描述
导出数据到此结束!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值