- 导出
先查询出需要导出的数据,再导出Excel
导出Excel方法一:
1.创建工作簿
NPOI是一个库,是JAVA里的POI库的.net版本
这里主要使用其 xls后缀的功能(应该。。。可能是吧)
2.创建工作表
3.设置标题(创建行、单元格,
单元格设置值,
合并单元格,
设置单元格样式)
- 创建行时要指定一个索引0,代表创建第一行
NPOI.SS.UserModel.IRow rowTitle = sheet1.CreateRow(0);//下标
(2) 行高,设置行高可用HeightInPoints和Height,其中HeightInPoints的单位是点,而Height的单位· 是1/20个点,所以Height的值永远小于HeightInPoints的20倍
(3)创建单元格 cell为单元格 。单元格中设置一个值,再拼接时间,即标题。因标题的单元格是最大的,所以需要合并单元格 :NPOI.SS.Util.CellRangeAddress(0, 0, 0, 6) 【括号中分别是第一横坐标,最后横坐标,第一纵坐标,最后纵坐标】
(4)再设置其单元格样式(水平垂直居中;声明字体;设置字体颜色、加粗、大小)
4.设置表头(创建一行[索引],
创建单元格并设置值,
创建表头样式,
设置背景颜色,
设置边框线为实线,
设置字体,
给单元格设置样式[循环])
- 同样创建一行,指定索引为1, 用于添加第一行的头部标题
- 设置行高
- 再这行中创建单元格并设置值,作为头部标题,再设置表头样式(水平居中、垂直居中),给予背景颜色,并将边框线设置为实线,再设置字体的粗细、大小后,加入单元格,再给单元格设置样式,循环设置完这行中的单元格
5.遍历查询到的数据,设置表格数据
- 创建数据内部部分 即设置其单元格样式(声明样式、设置水平居中、垂直居中、设置边框线为实线)
- 创建行 因标题和表头已经占了两行,所以索引为(2+i),再设置行高
- 创建列,并设置值,首先需要设置序号,设置完表头对应的值后再给每个单元格设置样式
6.设置列宽为自适应(即取这个创建好的Excel中最宽的列为列宽)
7.把创建好的Excel输出到浏览器
(1)设置创建好的Excel文件名字 ****+时分秒毫秒+后缀.xls
(2)将Excel转化为流输出
定义流à将工作簿写入流中à输出之前调用的seek(偏移量,游标位置)à文件类型/文件名称
方法二:使用模板的方式导入Excel
读取模板(获取模板的文件路径,
判断文件是否存在)
使用NPOI打开模板Excel(使用文件打开工作簿,
把文件流转为工作簿)
- 打开模板所在的第一个工作表
- 设置标题,如果筛选时间段不为空就拼接上筛选时间段
- 往模板中填充数据(设置数据单元格的样式,
开始填充数据,
以流的方式返回,
把Excel转化为流,输出)
- 数据的导入
- 获取模块文件的路径
- 判断模块是否存在(获取文件名称,以流的形式返回文件)
- 判断文件的后缀
- 转换成二进制数组(声明一个文件大小一致的二进制数组,
将上传的文件转成二进制数组,
将二进制数组转成内存流
将内存流转成工作簿)
判断是否存在工作表(获取第一个工作表;
判断工作表是否存在行;)
定义一个DataTable,将数据保存到DataTable中(
获取Excel中的标题行、表格的列数、表格的行数;
创建新DataTable中的列,把列添加到DataTable中;
读取Excel中的数据,获取行、遍历这一行的数据、将这一行的数据添加到DataTable;
移除DataTable中的空行,将DataTable中的数据转为List<***>;
查询出所有需要的数据
查询出所有的数据,用于判断是否重复
定义存放容器
遍历DataTable的数据)
数据保存