知方号

知方号

Java导出Excel统计报表 合并单元格

文章目录 前言示例注意事项

前言

Apache POI是一种流行的API,允许程序员使用Java程序创建,修改和显示MS Office文件。 它是由Apache Software Foundation开发和分发的开源库,用于使用Java程序设计或修改Microsoft Office文件。 它包含将用户输入数据或文件解码为MS Office文档的类和方法。

HSSF - 用于读取和写入MS-Excel文件的xls格式

示例

类似上面的需要合并表头的报表在日常的开发中也是经常遇到,这里总结下关于类似的报表开发整理。 对于这种的报表看起来很麻烦,但其实掌握了技巧开发起来也是很简单的。下面的代码仅供参考,有些字段为了脱敏都以数字显示了,见谅。

// 创建sheet Sheet sheet = wb.createSheet("当月"); //表头字体 Font headerFont = wb.createFont(); headerFont.setFontName("宋体"); headerFont.setFontHeightInPoints((short) 18); headerFont.setBold(true); headerFont.setColor(Font.COLOR_NORMAL); //正文字体 Font contextFont = wb.createFont(); contextFont.setFontName("宋体"); contextFont.setFontHeightInPoints((short) 12); headerFont.setBold(true); //表头样式,左右上下居中 CellStyle headerStyle = wb.createCellStyle(); headerStyle.setFont(headerFont); // 左右居中 headerStyle.setAlignment(HorizontalAlignment.CENTER); // 上下居中 headerStyle.setVerticalAlignment(VerticalAlignment.CENTER); headerStyle.setLocked(true); // 自动换行 headerStyle.setWrapText(false); //单元格样式,左右上下居中 边框 CellStyle commonStyle = wb.createCellStyle(); commonStyle.setFont(contextFont); // 左右居中 commonStyle.setAlignment(HorizontalAlignment.CENTER); // 上下居中 commonStyle.setVerticalAlignment(VerticalAlignment.CENTER); commonStyle.setLocked(true); // 自动换行 commonStyle.setWrapText(false); //单元格样式,左右上下居中 边框 CellStyle commonWrapStyle = wb.createCellStyle(); commonWrapStyle.setFont(contextFont); //单元格样式,竖向 边框 CellStyle verticalStyle = wb.createCellStyle(); verticalStyle.setFont(contextFont); CellStyle commonStyleNoBorder = wb.createCellStyle(); commonStyleNoBorder.setFont(contextFont); commonStyleNoBorder.setLocked(true); // 自动换行 commonStyleNoBorder.setWrapText(false); CellStyle alignLeftStyle = wb.createCellStyle(); alignLeftStyle.setFont(contextFont); alignLeftStyle.setLocked(true); // 自动换行 alignLeftStyle.setWrapText(false); //单元格样式,左对齐 无边框 CellStyle alignLeftNoBorderStyle = wb.createCellStyle(); alignLeftNoBorderStyle.setFont(contextFont); alignLeftNoBorderStyle.setLocked(true); // 自动换行 alignLeftNoBorderStyle.setWrapText(false); //单元格样式,右对齐 CellStyle alignRightStyle = wb.createCellStyle(); alignRightStyle.setFont(contextFont); alignRightStyle.setLocked(true); // 自动换行 alignRightStyle.setWrapText(false); // 行号 int rowNum = 0; //设置列宽 for (int i = 0; i "地 区", "对象情况1", "","对象情况2","" ,"调增情况3","","情况4",""}; for (int i = 0; i "1", "2", "3","4","5","6","7","8"}; for (int i = 0; i Row tempRow = sheet.createRow(rowNum++); //列表数据 Cell tempCell0 = tempRow.createCell(0); String sqmc = (String) map.get("XXX"); tempCell0.setCellValue(sqmc); tempCell0.setCellStyle(commonStyle); } //导出 response.setContentType("application/vnd.ms-excel"); // 文件名 String fileName = "报表名称.xls"; response.setHeader("Content-disposition", "attachment;filename="" + fileName + """); OutputStream stream = response.getOutputStream(); try { if (null != wb && null != stream) { wb.write(stream); stream.close(); } } catch (Exception e) { log.error("excel文档导出错误-异常信息:", e); } 注意事项

【1】POI操作的行和列都是从0位置开始的 【2】所有的复杂表头无非是合并单元格,这里都可以通过下面的API实现

int addMergedRegion(CellRangeAddress region)添加合并的单元格区域

创建新的单元格范围。索引是从零开始的。 参数: firstRow—第一行的索引 lastRow—最后一行(含)的索引必须等于或大于第一行 firstCol—第一列的索引 lastCol—最后一列(包括)的索引必须等于或大于firstCol

示例

sheet.addMergedRegion(new CellRangeAddress(3, 3, 1, 2));

合并第四行第1列和第2列 【3】对于空的单元格,直接在数组或者列表中给个空值就可以了。对于下面的图片中第5行的[本月人次]这种如果是数组直接在创建列的时候指定起始位置为1就可以了,注意不要影响合并的位置,而且合并的单元格不要有冲突否则会抛出异常,注意些就可以了.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。

上一篇 没有了

下一篇没有了