(作者:杨先金;撰写时间:2019年4月22日)
一、主要思路:
1、获取读取的文件;2、把文件转换为二进制数组;3、二进制数组转成内存流;4、利用NPOI把内存流中的数据读取成Excel。
二、Excel表格的导入:
1、首先初始化导入数据临时表,上传Excel表格,将上传的Excel表格保存到临时表:
(1)、提交表单,到控制器请求数据,获取到文件的后缀,然后判断页面传过来的文件是否为Excel表格,如果不是(.xls || .XLS)后缀,则输出"文件类型错误,请上传Excel文件!"。
(2)、把文件转换为二进制数组;
(3)、二进制数组转成内存流;
(4)、利用NPOI把内存流中的数据读取成Excel;
(5)、判断工作簿中是否有工作表,如果没有则输出"工作簿中没有数据表!",如果有,那么获取第一个工作表,使用PhysicalNumberOfRows这个静态类判断工作簿中是否有数据,PhysicalNumberOfRows 获取的是物理行数,也就是不包括那些空行(隔行)的情况。
如果没有,输出"数据表为空!";如果有,将数据装到DataTable中,并获取标题行、获取表格列数、获取表格行数;
创建dataTable中的列,循环添加标题行中各个单元格的数据,遍历表头行中每一个单元格,获取标题行各个单元格的数据,将获取到的标题行的数据放到dataTable中,
遍历dataTable中的数据,创建studentVo对象保存每一条数据,将查询并获取到的每一条数据都添加到对象列表中,最后将数据保存到session中。
2、保存导入的Excel表格数据到数据库。
三、Excel表格的导出:
在导出之前最好是先将数据筛选一遍,如果是这样,那么你要获取当前表格数据的筛选条件,并判断数据是否完整,ID为空或者undefined的,给它赋值为0,然后就是提示用户"是否要导出当前表格中的数据,是请点击确定按钮,否则请筛选需要导出的数据!";
到控制器根据筛选条件查询数据,然后创建Excel工作簿、创建工作表、创建表头行、设置表头——
For循环每一条数据,为Excel表格添加数据,刚才创建的是表头行,现在我们要创建的是内容行,并且给它的内容行一一添加数据,
接下来要为Excel文件命名,跟导入差不多,也要把创建好的工作簿转化为内存流,将Excel文件写入内存流中,输出之前调用Seek(偏移量,游标位置) 移动文件读取指针到指定的位置,Seek(0,Seek.begin) 第一个参数表示相对位置,第二个参数表示参照位置。
最后返回一个文件,文件类型为"application/vnd.ms-excel"。
相关文章
- java的excel表格的导出与下载
- Excel宏教程 (宏的介绍与基本使用)
- 干货--Excel的表格数据的一般处理和常用python模块。
- java使用poi导出excel时,createCellStyle过多导致的异常
- element/element-admin利用js-xlsx插件导出Excel/多级表头(一篇涵盖四种导出的博客)
- excel文件被写保护怎么解除_如何去掉Excel表格中的密码保护?
- asp.net 发布后,遇到的导出excel报错的问题
- poi导出Excel,打开时提示“发现“…“中的部分内容有问题。是否让我们尽量尝试修复?如果您信任此工作簿的源,清单击“是“”怎么办?
- poi导出excel 损坏_急!!!java用poi导出excel文件,打开导出的文件时报错“文件错误,数据可能丢失”...
- SQL导出数据到EXCEL的问题