最近的项目有一个导出汇总数据的要求,考虑到用户软件的差异,所以要分别导出xls以及xlsx并且打包提供下载,所以有了这个博客,代码如下。
实现思路:
- 获取需要导出的数据;
- 生成对应的xls、xlsx文件流;
- 生成对应的zip文件,提供下载。
代码主要使用到了POI以及Hutool解压模块。
/**
* 利用传入的数据,生成对应的xls文件
*
* @param data 需要导出的数据
* @param sheetName sheet的名字
* @param titleValue excel主题(例如第一行显示:“2018-10月销售汇总”)
* @param headArr 标题
*
* @return 生成的03excel工作簿
*/
public static <T> HSSFWorkbook exportDataTo03(List<T> data, String sheetName, String titleValue, String[] headArr)
throws IOException, IllegalArgumentException, IllegalAccessException {
// 新建excel
HSSFWorkbook wb = new HSSFWorkbook();
// 新建sheet
HSSFSheet sheet = wb.createSheet(sheetName);
// 1.1创建合并单元格对象
CellRangeAddress callRangeAddress = new CellRangeAddress(0, 0, 0, headArr.length - 1);
sheet.addMergedRegion(callRangeAddress);
// 新建第一行表头
HSSFRow titleRow = sheet.createRow(0);
titleRow.setHeightInPoints(50);
HSSFFont titleFont = wb.createFont();
titleFont.setBold(true);
titleFont.setFontName("微软雅黑");
titleFont.setFontHeightInPoints((short) 35);
// 样式
HSSFCellStyle titleStyle = wb.createCellStyle();
// 剧中
titleStyle.setAlignment(HorizontalAlignment.CENTER_SELECTION);
titleStyle.setFont(titleFont);
HSSFCell titleCell = titleRow.createCell(0);
titleCell.setCellStyle(titleStyle);
titleCell.setCellValue(titleValue + "xxx");
HSSFCellStyle hearStyle = wb.createCellStyle();
hearStyle.setAlignment(HorizontalAlignment.CENTER_SELECTION);
HSSFFont headFont = wb.createFont();
headFont.setBold(true);
headFont.setFontName("微软雅黑");
headFont.setFontHeightInPoints((short) 50);
HSSFRow headRow = sheet.c