/**
*
* zip包导入
*
* @param file excel导入
* @return 结果
*/
@PostMapping(value = "importZip")
public void importZip(@RequestBody MultipartFile file) throws Exception {
// 文件名称
String fileName = file.getOriginalFilename();
// 文件后缀
String fileType = fileName.substring(fileName.lastIndexOf(".") + 1).toUpperCase(Locale.US);
//
ZipInputStream zipInputStream = new ZipInputStream(file.getInputStream());
ZipEntry zipEntry;
while (zipInputStream.getNextEntry() != null) {
byte[] buffer = new byte[1024];
int len;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
while ((len = zipInputStream.read(buffer)) != -1) {
bos.write(buffer,0,len);
}
bos.close();
// 写法1
// 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭
// 这里每次会读取100条数据 然后返回过来 直接调用使用数据就行
EasyExcel.read(new ByteArrayInputStream(bos.toByteArray()), DemoData.class, new PageReadListener<DemoData>(dataList -> {
for (DemoData demoData : dataList) {
log.info("读取到一条数据{}", JSON.toJSONString(demoData));
}
})).password("123").sheet().doRead();
// // 写法2:
// // 匿名内部类 不用额外写一个DemoDataListener
//
// // 有个很重要的点 DemoDataListener 不能被spring管理,要每次读取excel都要new,然后里面用到spring可以构造方法传进去
// // 写法3:
// EasyExcel.read(new ByteArrayInputStream(bos.toByteArray()), DemoData.class, new DemoDataListener()).sheet().doRead();
// // 写法4
// // 一个文件一个reader
// try (ExcelReader excelReader = EasyExcel.read(new ByteArrayInputStream(bos.toByteArray()), DemoData.class, new DemoDataListener()).build()) {
// // 构建一个sheet 这里可以指定名字或者no
// ReadSheet readSheet = EasyExcel.readSheet(0).build();
// // 读取一个sheet
// excelReader.read(readSheet);
// }
// 写法1 读取多个sheet
// try (ExcelReader excelReader = EasyExcel.read(new ByteArrayInputStream(bos.toByteArray())).password("123456").build()) {
// // 这里为了简单 所以注册了 同样的head 和Listener 自己使用功能必须不同的Listener
// ReadSheet readSheet1 =
// EasyExcel.readSheet(0).head(DemoData2.class).registerReadListener(new DemoDataListener()).build();
// ReadSheet readSheet2 =
// EasyExcel.readSheet(1).head(DemoData2.class).registerReadListener(new DemoDataListener()).build();
// // 这里注意 一定要把sheet1 sheet2 一起传进去,不然有个问题就是03版的excel 会读取多次,浪费性能
// excelReader.read(readSheet1, readSheet2);
// }
}
}
easyexcel解析zip包加密excel文件
于 2022-10-12 17:21:10 首次发布