文件的导入导出

  • 导出

先查询出需要导出的数据,再导出Excel

导出Excel方法一:

1.创建工作簿

    文件的导入导出

    NPOI是一个库,是JAVA里的POI库的.net版本

    这里主要使用其 xls后缀的功能(应该。。。可能是吧)

 

2.创建工作表

文件的导入导出

 

3.设置标题(创建行、单元格,

单元格设置值,

合并单元格,

设置单元格样式)

  1. 创建行时要指定一个索引0,代表创建第一行

NPOI.SS.UserModel.IRow rowTitle = sheet1.CreateRow(0);//下标

(2) 行高,设置行高可用HeightInPointsHeight其中HeightInPoints的单位是点,而Height的单位·    是1/20个点,所以Height的值永远小于HeightInPoints的20倍

(3)创建单元格 cell为单元格 。单元格中设置一个值,再拼接时间,即标题。因标题的单元格是最大的,所以需要合并单元格 :NPOI.SS.Util.CellRangeAddress(0, 0, 0, 6)  【括号中分别是第一横坐标,最后横坐标,第一纵坐标,最后纵坐标】

(4)再设置其单元格样式(水平垂直居中;声明字体;设置字体颜色、加粗、大小)

 

4.设置表头(创建一行[索引],

创建单元格并设置值,

创建表头样式,

设置背景颜色,

设置边框线为实线,

设置字体,

给单元格设置样式[循环])

  1. 同样创建一行,指定索引为1, 用于添加第一行的头部标题
  2. 设置行高
  3. 再这行中创建单元格并设置值,作为头部标题,再设置表头样式(水平居中、垂直居中),给予背景颜色,并将边框线设置为实线,再设置字体的粗细、大小后,加入单元格,再给单元格设置样式,循环设置完这行中的单元格

 

5.遍历查询到的数据,设置表格数据

  1. 创建数据内部部分 即设置其单元格样式(声明样式、设置水平居中、垂直居中、设置边框线为实线)
  2. 创建行 因标题和表头已经占了两行,所以索引为(2+i),再设置行高
  3. 创建列,并设置值,首先需要设置序号,设置完表头对应的值后再给每个单元格设置样式

 

6.设置列宽为自适应(即取这个创建好的Excel中最宽的列为列宽)

 

7.把创建好的Excel输出到浏览器

    (1)设置创建好的Excel文件名字  ****+时分秒毫秒+后缀.xls

    (2)将Excel转化为流输出

        定义流à将工作簿写入流中à输出之前调用的seek(偏移量,游标位置)à文件类型/文件名称

 

 

方法二:使用模板的方式导入Excel

 读取模板(获取模板的文件路径,

判断文件是否存在)

使用NPOI打开模板Excel(使用文件打开工作簿,

把文件流转为工作簿)

  1. 打开模板所在的第一个工作表
  2. 设置标题,如果筛选时间段不为空就拼接上筛选时间段
  3. 往模板中填充数据(设置数据单元格的样式,

开始填充数据,

以流的方式返回,

把Excel转化为流,输出)

文件的导入导出

文件的导入导出

  • 数据的导入
  1. 获取模块文件的路径
  2. 判断模块是否存在(获取文件名称,以流的形式返回文件)
  3. 判断文件的后缀
  4. 转换成二进制数组(声明一个文件大小一致的二进制数组,

将上传的文件转成二进制数组,

将二进制数组转成内存流

将内存流转成工作簿)

判断是否存在工作表(获取第一个工作表;

判断工作表是否存在行;)

定义一个DataTable,将数据保存到DataTable中(

获取Excel中的标题行、表格的列数、表格的行数;

创建新DataTable中的列,把列添加到DataTable中;

读取Excel中的数据,获取行、遍历这一行的数据、将这一行的数据添加到DataTable

移除DataTable中的空行,将DataTable中的数据转为List<***>;

查询出所有需要的数据

查询出所有的数据,用于判断是否重复

定义存放容器

遍历DataTable的数据)

数据保存