首先引入hutool和poi-ooxml依赖
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.3</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
代码如图所示: 具体请参考hutool官网
文件转成流工具
public class BigExcelUtils {
public static InputStream convertToInputStream(SXSSFWorkbook workbook) throws IOException {
ByteArrayOutputStream byteArrayOutputStream = null;
try {
byteArrayOutputStream = new ByteArrayOutputStream();
workbook.write(byteArrayOutputStream);
byteArrayOutputStream.flush();
byte[] bytes = byteArrayOutputStream.toByteArray();
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
return byteArrayInputStream;
} catch (Exception e) {
e.printStackTrace();
throw e;
} finally {
if (byteArrayOutputStream != null) {
byteArrayOutputStream.close();
}
if (workbook != null) {
workbook.dispose();
workbook.close();
}
}
}
}
Excel导出示例:
@Autowired
private OSSFactoryConfig ossFactory;
public void export(HttpServletResponse response) throws IOException {
List<User> us = new ArrayList<>();
User user = new User();
user.setName("张三");
user.setAge(23);
user.setScore(88.32);
user.setPass(true);
user.setTestDate(DateUtil.date());
us.add(user);
User user2 = new User();
user2.setName("李四");
user2.setAge(33);
user2.setScore(88.32);
user2.setPass(false);
user2.setTestDate(DateUtil.date());
us.add(user2);
List<Object> rows = CollUtil.newArrayList(us.toArray());
ExcelWriter writer = ExcelUtil.getWriter(true);
writer.write(rows, true);
try {
InputStream inputStream = BigExcelUtils.convertToInputStream((SXSSFWorkbook) writer.getWorkbook());
String excelName = "测试导出";
// 上传阿里云 拿到文件全路径
String url = ossFactory.build().upload(inputStream, excelName + ".xlsx");
// 导出成功
} catch (IOException e) {
e.printStackTrace();
} finally {
// 关闭writer,释放内存
writer.close();
}
}
注意 ExcelUtil.getWriter()默认创建xls格式的Excel,因此写出到客户端也需要自定义文件名为XXX.xls,否则会出现文件损坏的提示。 若想生成xlsx格式,请使用ExcelUtil.getWriter(true)创建。具体见hutool官网