导入:首先导出excel模板,让客户按照模板进行相关的数据信息录入,之后根据提供的导入功能将excel传到服务器端,服务器端对它进行解析。
解析流程如下:
首先后台创建一个Workbook对象,因为每个workbook都有与其对应的多个sheet对象,再依次解析每一个sheet对象,同理,每一个sheet对象又对应多个row对象,所以再依次解析每一个row对象,同理,每一个row对象又对应多个cell对象,再依次解析每一个cell对象取出要获取的相应数据值。即完成excel的导入功能。
导出:首先从后台数据库获取到要导出的全部数据,之后根据相应的导出功能将数据导到相应的excel表格中。
流程如下:先获取数据,之后先创建一个workbook工作簿,然后循环创建出需要的sheet,再根据查询出来的记录条数创建row,之后根据查询出来的每一条记录的属性个数创建出cell,并且给cell赋值,所有循环完成后将文件输出,即完成了excel导出功能。
Excel2003导出一个sheet最多只能65535行
大数据量操作时的问题:如果xls文件中数据量比较大时,将读入到的数据封装到对象中,再全部都放进List时,List对其中的对象都是强引用(Strong Reference)【强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。】,大量的数据会引发内存溢出异常,为解决这个问题,所以在工具类中每得到若干个对象后调用Service层的方法去保存这些数据。再重新给List赋值,再继续读取出数据。
POI导出Excel可以利用HSSFComment来生成批注信息。
//创建批注对象
HSSFComment comment=patriarch.createComment(new HSSFClientAnchor(0,0,0,0,(short)3,3, (short)5,8));
//设置批注内容
comment.setString(newHSSFRichTextString(column.getDescription()));
comment.setAuthor("作者名称");
//设置单元格批注信息
cell.setCellComment(comment);
我们在导出的excel的时候,如果页面上是下拉框展示的数据,我们在导出excel时会生成相应的下拉列表。
首先我们会生成一个隐藏的sheet,然后将下拉列表中的数据添加到隐藏sheet中,每一列的数据代表一个下拉列表,然后在要生成下拉列表的单元格上创建对隐藏sheet下拉列表的引用
//工作表添加验证数据 dataSheet.addValidationData(data_validation_list);
