Excel的导入与导出

Excel的导入与导出
在Excel中,先有工作表,再有行,再有单元格
导入与导出从感觉上来说就是两个颠倒过来,顺序进行了颠倒;
导出:是把数据库里面的数据写到Excel里面,通过下载的方式返回给我们
导入:要先下载一个模板,然后把里面的数据导入到数据库里面
一:导入Excel的步骤:

  1. 下载模板(模板由开发人员确定)(文件的格式:.xls)

  2. 根据模板填写数据

  3. 用户上传数据 - 导入数据
    提醒:(在项目运行的时候,不可以同时打开Excel)
    ○1:先在页面上面添加布局
    Layui支持在表头上面布局
    Excel的导入与导出

    Toolbar:会在顶部开启一个工具条
    Excel的导入与导出
    Excel的导入与导出

○2:创建一个模态框
在模态框里面放两个按钮,下载和上传
Excel的导入与导出

打开模态框
只要是跟下载相关的直接使用windon.open()
Excel的导入与导出

○3:去后台写DownImportTemplate()方法
需要新建文件夹(Document),在新建的文件夹里面放入模板
导入模板下载
Excel的导入与导出

○4:上传就是文件的上传(原生JS)
上传的点击事件
判断files大于0
[0]:代表的是第一个元素;
再发送数据xhr.send(formData);
Excel的导入与导出

指定提交类型和选择要发动的地址,上传文件只能使用POST请求.不能使用get请求;
要确定自己返回的是json格式
Excel的导入与导出

然后关闭模态框,刷新表格
○5:导入部分思路:

  1. 获取上传的文件;
  2. 把文件转换为二进制数组;
  3. 二进制数组转成内存流;
  4. 利用NPOI把内存流中的数据读取Excel;
    我们先判断文件的后缀是否合适(.xls),可以忽略大小写
    Excel的导入与导出

把文件转换为二进制数组;
Excel的导入与导出

判断workbook.NumberOfSheets是否大于0.如果大于0就代表存在表,如果小于0就代表没有表,提示用户“上传的Excel中不存在工作簿,请检查”
获取第一个工作表,根据索引去获取
Excel的导入与导出

再去判断工作簿中是否存在行(用if(){ }else(){ })
PhysicalNumberOfRows 是物理行的行数,不包含空行;
定义一个DataTable,DataTable需要引用(using System.Data;);
Excel的导入与导出

这里还可以获取行数(获取表格的行数要用工作表来获取,获取列要用行来获取);
创建DateTable中的列(直接用for循环)
Excel的导入与导出

读取Excel中的数据,继续用for循环,i要等于(sheet.FirstRowNum+2) 第一行是说明行 第二行是标题行,第三行开始才是数据
遍历数据
Excel的导入与导出

再用if判断行不等于null
然后再for循环遍历行中列获取数据,再进行判断,然后将一行的数据添加到Datatable;
接下来要再移除空行,直接调用
将dataTable中的数据转换为List<S_User>,这里最多的是判断,还要去数组库中查询所有的数组
最后进行保存,保存用户数组(for循环),然后提交事务
二:导出Excel
数据的导出利用了浏览器的文件下载功能,需要把下载的链接去新窗口打开(windon.open)
先连表查询,然后判断是否有时间段,在查询总行数
再去写方法,方法里面的第一步也是先把导出的数据查询出来
C#不支持直接进行Excel操作,所以我们需要第三方主键,有两种方法

  1. msoffice Excel(连接其他电脑版本要一致,版本对不上连接不上)
  2. NPOI(是一个库文件,专门来操作文档)
    主要用他的(.xls)功能
    先添加引用(NPOI)
    要用try(){ }cath(){ }获取一下异常
    Excel的导入与导出

再创建工作表sheet
修改工作表有两种方式
第一种是直接修改
第二种是先创建工作表,再修改
Excel的导入与导出

创建行row,设置表的标题,设置行高
Excel的导入与导出

再创建单元格,单元格设置值,设置单元格样式
Excel的导入与导出

设置表头,创建一行,索引为1,创建表头的样式(同上)

Excel的导入与导出
Excel的导入与导出

遍历查询到的数据(for循环创建数据部分行列),设置表格的数据
创建数据的内部部分,然后设置单元格的样式
再给每个单元格添加样式
Excel的导入与导出

再用for循环设置列宽为自动适应
Excel的导入与导出

Excel的导入与导出

二.1使用模板的方式导出Excel
先写好模板,模板里面设置标题,文字的格式,然后直接用代码填充
获取模板的文件路径
Excel的导入与导出

判断文件是否存在(if),如果不存在直接提示用户
使用文件打开模板文件(open)

Excel的导入与导出
Excel的导入与导出

设置标题,如果筛选时间段不为空就拼接上筛选事件段(if());
Excel的导入与导出

设置数据单元格的样式,遍历查询出的数据
然后再以流的方式返回