使用POI导出Excel时,涉及到如何自适应列宽的问题。方法如下
/** * 下载excel文件,内容使用MAP存放 * * @param response * @param headName * @param tableHead * @param tableBody * @throws IOException */ public static void downloadExcelMap(HttpServletResponse response, String headName, List<String> tableHead, List<Map<Object, Object>> tableBody) throws IOException { headName=StringUtils.replaceAllSpecial(headName); // 1:创建一个workbook HSSFWorkbook workbook = new HSSFWorkbook(); // 创建样式 HSSFCellStyle style = workbook.createCellStyle(); Font font = workbook.createFont(); font.setBoldweight(Font.BOLDWEIGHT_BOLD); // 粗体 style.setFont(font); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平居中 style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 垂直居中 style.setBorderTop((short) 1); style.setBorderBottom((short) 1); style.setBorderLeft((short) 1); style.setBorderRight((short) 1); style.setWrapText(true); // 设置合计样式 HSSFCellStyle style1 = workbook.createCellStyle(); style1.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平居中 style1.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 垂直居中 style1.setBorderTop((short) 1); style1.setBorderBottom((short) 1); style1.setBorderLeft((short) 1); style1.setBorderRight((short) 1); style.setWrapText(true); HSSFSheet sheet = (HSSFSheet) workbook.createSheet(headName); // 2:合并单元格,表头。并设置值 CellRangeAddress cra = new CellRangeAddress(0, 0, 0, tableHead.size() - 1); sheet.addMergedRegion(cra); HSSFRow row = sheet.createRow(0); HSSFCell tableName = row.createCell(0); tableName.setCellStyle(style); tableName.setCellValue(headName); //存储最大列宽 Map<Integer,Integer> maxWidth = new HashMap<Integer,Integer>(); // 3:设置表head HSSFRow row1 = sheet.createRow(1); for (int i = 0; i < tableHead.size(); i++) { Cell createCell = row1.createCell(i); createCell.setCellValue(tableHead.get(i)); createCell.setCellStyle(style); maxWidth.put(i,createCell.getStringCellValue().getBytes().length * 256 + 200); } // 4:表格内容 for (int i = 0; i < tableBody.size(); i++) { HSSFRow rows = sheet.createRow(i + 2); int j = 0; for (Map.Entry<Object, Object> entry : tableBody.get(i).entrySet()) { HSSFCell createCell = rows.createCell(j); if(PropertyUtil.objectNotEmpty(entry.getValue())){ createCell.setCellValue(entry.getValue().toString()); }else{ createCell.setCellValue(""); } int length = createCell.getStringCellValue().getBytes().length * 256 + 200; //这里把宽度最大限制到15000 if (length>15000){ length = 15000; } maxWidth.put(j,Math.max(length,maxWidth.get(j))); j++; createCell.setCellStyle(style1); } } // 列宽自适应 for (int i = 0; i < tableHead.size(); i++) { sheet.setColumnWidth(i,maxWidth.get(i)); } // 5:设置头 response.setHeader("Content-disposition", "attachment; filename=" + new String(headName.getBytes("GB2312"), "ISO8859-1") + ".xls"); // 6:设置头类型 response.setContentType("application/vnd.ms-excel"); // 7:写出 OutputStream toClient = response.getOutputStream(); workbook.write(toClient); toClient.flush(); toClient.close(); }
注意:以上代码有15000的限制,原因是Excel限制最大宽度为15000。所以,在这里我们除了这个宽度处理外,还需要设置单元格自动换行
style.setWrapText(true);
相关推荐
java使用POI导出 Excel+图片工具类 ,里面含有poi jar包,只调用接口即可直接保存Excel。使用的时候需先把数据封装,具体包装需根据实际导出数据进行处理。文件demo中只提供包装格式。
使用apach poi 导出Excel,可直接在项目中使用使用apach poi 导出Excel,可直接在项目中使用使用apach poi 导出Excel,可直接在项目中使用
一个POI导出Excel万级数据分页实现 解决内存溢出问题 完整的 project demo 有数据库dmp文件
可以运行的POI导出Excel文件实例,里面有两种方法,一个是Servlet,一个是main
Poi导出Excel工具类 支持大数据量 多sheet页方式 已经封装好,直接拿来调用里面的方法传入参数就行 很简单
这个是java用poi操作Excel进行导出,并且可以自动换行
使用poi方式导出excel,支持将多个工作簿合成一个Excel进行导出
POI导出Excel工具类,自动设置标题 列名 文件名,可插入图片,合并单元格
java的poi的导入工具类,只需要传入两个arrayList,一个是execl的标题,一个是ececl的数据,就可以直接导出到execl里面,支持最新的execl,全新封装的,让每一个人都会使用poi导出execl!
java_poi实现excel导入导出功能,有详细的注解
poi导出excel demo,poi导出excel demo,poi导出excel demo,poi导出excel demo,poi导出excel demo,
POI导出EXCEL经典实现 (Java反射机制更加灵活的应用)
struts2中利用poi导出excel的简单例子
poi作为导出excel常用的工具,方便快捷。对于excel指定下拉列表的列,如何生成呢?本文提供如何生成下拉列表的excel列
该实例集成maven开发环境,里面讲解了POI导入和导出Excel表格的基本用法
Java Poi 导出excel(支持各种设置字体、颜色、垂直居中)
poi 导出EXCEL 例子 poi 导出EXCEL 例子poi 导出EXCEL 例子poi 导出EXCEL 例子
Java实现POI导出Excel 博文参考:http://blog.csdn.net/itmyhome1990/article/details/49818045
springboot+poi导出指定格式Excel模板,完整项目,导出即用。springboot+poi导出指定格式Excel模板,完整项目,导出即用。springboot+poi导出指定格式Excel模板,完整项目,导出即用。springboot+poi导出指定格式...
java实现excel的导入导出(poi详解),经过测试poi效率要比jxl要高很多,特别是数据量大的时候jxl根本无法用肉眼入目,本资源是个可运行项目demo,很有参考价值!