poi坑点(springboot)

痞子三分冷 提交于 2021-01-17 17:02:40

工作上需要写了一个将数据库数据生成excel表的接口,在此过程中遇到了一些坑点,现在此纪录

PS:一部分可能是因为我没用明白

1. 样式问题

  • 自动调整尽量不要使用,部分列留白过多,空列列宽过窄,可能是只自动调整了一列的缘故。

    代码:

for (int index = 0; index < 14; index++){
	sheet.autoSizeColumn(index);
}

效果图:

  • 建议使用setCellStyle(),而不是setRowStyle()。直接使用setRowStyle()会导致只有没存入 数据的单元格设置样式成功。 代码:

Row dataRow = sheet.createRow(rowIndex); dataRow.setRowStyle(dataStyle);

效果图:
![](https://i.imgur.com/ktbPhHX.png)
![](https://i.imgur.com/j2s6597.png)
![](https://i.imgur.com/A63oPyu.png)

- 最终成品

	样式代码:
// 标题格式
Font titleFont = xssfWorkbook.createFont();
titleFont.setFontName("黑体");
titleFont.setFontHeightInPoints((short) 12);
titleFont.setBold(true);
XSSFCellStyle titleStyle = xssfWorkbook.createCellStyle();
titleStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
titleStyle.setFont(titleFont);
titleStyle.setBorderTop(BorderStyle.THIN);//边框线
titleStyle.setBorderLeft(BorderStyle.THIN);
titleStyle.setBorderRight(BorderStyle.THIN);
titleStyle.setBorderBottom(BorderStyle.THIN);

// 数据格式
Font dataFont = xssfWorkbook.createFont();
dataFont.setFontName("宋体");
dataFont.setFontHeightInPoints((short) 11);
dataFont.setBold(false);
XSSFCellStyle dataStyle = xssfWorkbook.createCellStyle();
dataStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
dataStyle.setFont(dataFont);
dataStyle.setBorderTop(BorderStyle.THIN);
dataStyle.setBorderLeft(BorderStyle.THIN);
dataStyle.setBorderRight(BorderStyle.THIN);
dataStyle.setBorderBottom(BorderStyle.THIN);

	样式设置代码:

for (StandardColumnEntity columnDetail : columnDetailList){ Row dataRow = sheet.createRow(rowIndex); // 业务分类 Cell categoryCell = dataRow.createCell(0); categoryCell.setCellStyle(dataStyle); categoryCell.setCellValue(columnInfo.getCategoryName());; // 数据集标识 Cell tableEnNameCell = dataRow.createCell(1); tableEnNameCell.setCellStyle(dataStyle); tableEnNameCell.setCellValue(columnDetail.getTableEnName()); ... rowIndex++; }


	效果图:
![](https://i.imgur.com/RlGrUpl.png)

### 2. 其他问题

- 网上部分代码设置了response的header和Content-Type,但如果不做出相应接收,会报"Could not find acceptable representation"的错误

	```
	response.setHeader("content-Type", "application/octet-stream");//有的是application/vnd.ms-excel
	response.setContentType("application/octet-stream");
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!