开发工具与关键技术:VS C#
作者:宋永烨
撰写时间:2019/4/9
将数据库中的数据整理,分类,通过代码将它清晰而简洁的呈现出来,在大部分时间内,用户需要获得到查询到的一些数据,用于进行别的编辑,那么就需要一种方法将查询出的数据导出到一些较为热门的办公软件,比如导出到Excel,以供客户使用
一. 视图层代码部分
- 将到出方法绑定在一个按钮上,可以在标签内内联一个点击事件,然后写一个方法,也可以设置一个ID,然后通过ID绑定一个点击事件
- 创建一些用于接收页面数据(用户输入)的变量,用于限定(导出的数据)查询的范围
- 判断接收参数的变量是否为空,如果为空则赋值为零,防止传参时因为实际类型不匹配报错(int类型无法接收空的数据)
- 当接收参数全部为空时提醒用户是否导出全部数据,防止误触
- 所有信息校对无误后通过window.open来跳转到新页面并提交获取到了用户数据的变量到控制器
二. 控制器代码部分(由于多表查询代码过多且与主题无关,故不讲解)
- 导入一个用于导出到Excel的辅助插件NPOI,导入后在项目的引用中包含在项目中即可(过于简单,便不再多费口舌).
- 通过NPOI创建一个Excel对象,然后在创建的对象中创建一个工作簿,这个过程类似于手动创建一个Excel表格
- 给创建好的Excel表格添加一个表头,并给表头的每一个单元格设置一个想要输出的值
- 由于一般导出的数据不止一条,所以需要通过for循环来进行添加,循环的次数为获取到的值的长度,循环的内容类似于添加表头的单元格,但添加的内容需要通过Linq语句去查询数据库中的数据,然后逐个的添加到创建好的Excel表中
- 给创建好的Excel表命名并加上后缀为.xls后赋值给变量
- 定义一个文件流,将赋值完毕的Excel对象写入文件流并获取文件流的长度后指定流的开头
- 将文件流通过File返回给Excel打开,文件名(包括文件后缀)为之前命名的变量
- 下图中的写法基本固定,可以直接套用
总结: - 导出的难点大都集中在控制器中的如何创建一个Excel对象,如何将数据添加进去,如何输出(通过Excel打开)等,
- 千万别忘了创建一个工作簿,注意创建文件名的文件后缀不要弄错
代码来源与老师