MVC数据导出与导入
一、导出
1、含义
导出就是从数据库输出数据,并打印为Excel;主要是调用浏览器下载功能实现—下载形式为(Excel)
2、导出方式有两种
方法一:自定义模板
1-创建工作簿
NPOI.HSSF.UserModel.HSSFWorkbook 自定名称 = new NPOI.HSSF.UserModel.HSSFWorkbook();
2-创建工作表
2-1\NPOI.SS.UserModel.ISheet 自定名称= workbook.CreateSheet();
2-2\修改工作表名称
(1). NPOI.SS.UserModel.ISheet 自定名称 = workbook.CreateSheet(“工作表名称”);
(2). workbook.SetSheetName(第几个工作表, “工作表名称”);
3-设置表标题
3-1、创建行
3.1-1. NPOI.SS.UserModel.IRow 行名= 工作表名称.CreateRow(第几行);
3-2、创建单元格
NPOI.SS.UserModel.ICell 单元格名= rowTitle.CreateCell(0);
3-3、单元格设置值
单元格名. SetCellValue(值);
3-4、合并单元格
自定工作表名称.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0(x), 0(y), 0(z), 0(h)));
3-5、设置单元格样式
4、设置表头
4.1-创建一行 索引 1
4.2-创建单元格 并设置值
4.3-创建表头的样式
5-遍历查询到的数据,设置表格数据
5.1-创建数据内部部分 单元格样式
5.2-遍历数据,创建数据部分行列5.2.1-创建行5.2.2-创建列,并设置值5.2.3-给每个单元格添加样式
6-设置列宽为自动适应
7-把创建好的Excel输出到浏览器
方法二:使用模板的方式导出Excel
1--读取模板
//获取模板的文件路径
//判断文件是否存在
2-使用NPOI打开模板Excel
//=2.1-使用文件打开模板文件
//2.2-把文件流转为工作簿
//==3-打开模板所在第一个工作表
//==4-设置标题,如果筛选时间段不为空就拼接上筛选时间段
//==5-往模板中填充数据
=5.1-设置数据单元格的样式
//==5.2-开始填充数据
6==以流的方式返回
二、导入
1、含义
就是让外部数据储存到数据库,主要是Excel数据储存到数据库;模板一般给定,并且一定要给定格式,否则容易出错;
2、思路:下载模板à在模板内写入需要导入的内容à转换成二进制数组à二进制数组转为内存流à内存流转为工作簿à数据保存到DataTable中à遍历datatable中的数据à保存数据到数据库
实现方法:
- 引用
2.首先,从页面上转入控制器,在控制器获取并且判断是否存在模板,如存在就运行;不存在则提醒用户联系网站管理员;
//====使用Open转入后台
3.其次,从页面上获取到文件,并以FormData()方法返回给控制器
4.在控制器接收到页面上的文件,便把该文件转换成二进制数组
//声明一个和文件大小一致的二进制数组
byte[] fileBytes = new byte[传入文件.ContentLength];
//将上传的文件转成二进制数组
传入文件.InputStream.Read(fileBytes, 0, fileBytes.Length);
5.二进制数组转为内存流
MemoryStream excelMemoryStream = new MemoryStream(fileBytes);
6..内存流转为工作簿
NPOI.SS.UserModel.IWorkbook workbook = new NPOI.HSSF.UserModel.HSSFWorkbook(excelMemoryStream);
7. 判断是否存在工作表并获取出第一个工作表
8. 判断工作表中是否存在行并定义DataTable、获取Excel中的标题行,设置dataTable的列名
9. 获取表格的列数
10. 获取表格的行数
11. 创建DateTable中的列
12. 读取Excel中的数据
13. 将一行的数据添加到Datatable
(9,10,11,12,13代码如下)
14.移除掉DataTable中的空行----移除空行需要封装一个方法
代码如下
使用方法:removeEmptyRow(表格行)
15. 定义存放容器à遍历datatable中的数据à添加到要保存的列表à添加到用于查重的列表à进行数据保存