赞
踩
前提:导出的excel单元格内容长的时候显示不全,用户看的时候需要手动调整列宽,不友好不方便。需要根据单元格的内容进行自动调整列宽。
废话不多说,直接上代码
controller
@PostMapping("/export")
@ApiOperation("导出")
public void export( HttpServletResponse response){
service.commonExport(response);
}
service
public void export( HttpServletResponse response){ //表头,自己根据情况设置或者查询数据库 List<Map<String,Object>> tableTitleList; //数据,自己根据情况设置或者查询 List<Map<String,Object>> dataList; // 创建工作簿 HSSFWorkbook workbook = new HSSFWorkbook(); // 创建数据 sheet HSSFSheet dataSheet = workbook.createSheet("数据"); // 创建表头行 HSSFRow headerRow = dataSheet.createRow(0); //设置样式 CellStyle blackStyle = workbook.createCellStyle(); //自动换行,自定义列宽使用 blackStyle.setWrapText(true); //存储最大列宽,自定义列宽使用 Map<Integer,Integer> maxWidth = new HashMap<>(); // 新增第一列id列,第一列是id值需要隐藏,单独设置 HSSFCell idDataCell = headerRow.createCell(0); idDataCell.setCellValue("id"); int columnIndex = 1; for (Map<String,Object> tableTitle : tableTitleList) { String columnName = tableTitle.get("title").toString(); HSSFCell cell = headerRow.createCell(columnIndex); cell.setCellValue(columnName); maxWidth.put(columnIndex,columnName.getBytes().length * 256 + 200); //设置自动换行 cell.setCellStyle(blackStyle); columnIndex++; } // 按行填充数据 int rowIndex = 1; for (Map<String, Object> data : dataList) { HSSFRow dataRow = dataSheet.createRow(rowIndex++); columnIndex = 1; // 首先添加该行的第一列id数据 String id = data.get("id").toString(); HSSFCell idTitleCell = dataRow.createCell(0); HSSFRichTextString idRichString = new HSSFRichTextString(id); idTitleCell.setCellValue(idRichString); // 再循环遍历其余列,添加数据 for (Map<String,Object> tableTitle : tableTitleList) { String titleName = tableTitle.get("title").toString().toLowerCase(); Object value = data.get(titleName); HSSFCell cell = dataRow.createCell(columnIndex); if (value != null) { HSSFRichTextString richString = new HSSFRichTextString(value.toString()); cell.setCellValue(richString); int length = value.toString().getBytes().length * 256 + 200; //这里把宽度最大限制到15000 if (length>15000){ length = 15000; } maxWidth.put(columnIndex,Math.max(length,maxWidth.get(columnIndex))); //设置自动换行 cell.setCellStyle(blackStyle); } columnIndex++; } } // 列宽自适应 for (int i = 1; i <= tableTitleList.size(); i++) { dataSheet.setColumnWidth(i,maxWidth.get(i)); } // 数据sheet页id列隐藏 dataSheet.setColumnHidden(0,true); //写出数据 try { response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode("test.xls", "UTF-8")); OutputStream out = response.getOutputStream(); workbook.write(out); workbook.close(); } catch (Exception e) { e.printStackTrace(); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。