导出操作

Derived data

开发工具与关键技术:
作者:熊琪
撰写时间:2019.04.01

首先得了解一下导出数据的基本逻辑,第一先引用NPIO插件,然后使用插件中的方法创建工作簿,接着并用插件ISheet的方法创建工作表并命名;第四,书写工作表表头;第五,用linq查询数据并列出;书写到工作表;最后用IO流写出数据。总共分为六个步骤。

需要导出所以借用了NPOI的插件,作用就是将文档与项目连接,就必须在项目中引用该插件,而且在对应的控制器中也得引用,这样才能使用到相关的方法,这里导出到的表格为Excel,表格所以首先得了解它的结构。先创建工作簿代码如图一:
在这里插入图片描述(图一)
HSSFWorkbook是NPOI中一种创建方法,然后new实例化一下,创建完工作簿之后还需要创建工作表并对其命名,代码如:
在这里插入图片描述(图二)
ExcelBook.工作簿CreateSheet(创建表)名称为考试信息;接着就是编写工作表了,首先编写的是工作表的表头,代码写法:
NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow(0);意思是创建一行,然后创建九列并赋值代码如图三:
在这里插入图片描述 (图三)
学号为第一行第一列,姓名为第一行第二列,以此类推,1到9列分别为索引的0到8。对应的有多少行数据就得创建多少的行。
创建完后就该用到linq语句查询数据,因为需要显示的数据有学号,姓名,身份证,性别,学院,专业,年级,班级还有账号,所以就必须是多表查询;一共涉及到了六张表;分别用学生表中的学院ID与学院表中学院ID相等使两表连接,接着是通过学生表中专业ID与专业表中的专业ID相等连接两表,同理,连接剩余其它表,表连接好之后开始查询首先倒叙排序,代码:
orderby tbStudent.studentID descending :根据stndentID倒叙。然后构建一个实体列来装需要查询的参数,最后通过条件的筛选得到要导出的数据。代码:
if (!string.IsNullOrEmpty(StudentInfo))
{
listStu = listStu.Where(m => m.StudentNumber.Contains(StudentInfo)
|| m.StudentName.Contains(StudentInfo));
} if判断满足条件得到需要查询的数据通过for循环来自动创建其它数据的行,
for (int i = 0; i < listStu.Count(); i++),所有查询出来的总条数小于i,i++。有多少条数据for循环多少遍。
创建行代码如图:
在这里插入图片描述
这里注意的是下标是从1开始,下标为0已经被表头占用。从第二行的第一个位置赋值从左到右依次赋值。
导出的工作簿必须是唯一化的,所以就得重命名确定格式和类型,为了工作簿永远不会重复所以需要用到时间来拼接,代码: var fileName = “考生信息” +DateTime.Now.ToString(“yyyy-MM-dd-HH-mm-ss-ffff”) + “.xls”; 声明一个字符串也就是文件名称,在获取当前系统时间格式为yyyy-MM-dd-HH-mm-ss-ffff,并且导出文件类型为xls.
完了之后创建文件流用到IO流里面关键字MemoryStream 代码写法:MemoryStream bookStream = new MemoryStream();
创建完文件流之后得把之前创建的Excel工作簿写入流,代码写法:excelBook.Write(bookStream);输出之前调用Seek,它有两个参数第一个偏移量,第二个游标位置把0位置指定为开始位置。最后名称命名好了之后要从新给到工作簿,代码写法:return File(bookStream, “application/vnd.ms-excel”, fileName);返回文件时直接把名称返回,File有三个参数第一个是具体返回的文件,第二个是确定文件的类型,第三个为具体的名称。

总结:目前对于代码的运用还不是很熟练,还需要跟着老师的思路去理解,怕的不是搞不懂而是不愿意花时间去搞懂。要想在短时间里熟练代码,首先要捋清楚逻辑,坚持就是胜利!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值