使用POI设置自适应列宽
最近项目添加POI导出Excel的.xls和.xlsx文件功能,且要求自适应列宽,项目导入POI5.0后,使用自适应列宽的函数sheet.autoSizeColumn(i),打开excel文件后发现中文没有效果,应该是POI导出的默认字体,和Excel打开.xls和.xlsx文件时使用的字体不相同导致的。
解决办法:
POI先指定每个单元格的字体类型,再使用自适应函数,代码如下:
// 设置字体类型和大小,宋体15号
Font font = wb.createFont();
font.setFontName("宋体");
font.setFontHeightInPoints((short) 15);
CellStyle style = wb.createCellStyle();
style.setFont(font);
for (Row row : sheet) {
for (Cell cell : row) {
cell.setCellStyle(style);
}
}
// 自动调整列宽,根据workbook第一个字符的字体来调整,字体改变后不适用,所以要先设置字体的类型和大小,columnNumbers是表格的列数。
for (int i = 0; i < columnNumbers; i++) {
sheet.autoSizeColumn(i);
}
完成后重新导出excel文件,发现.xls和.xlsx文件的列宽可以自适应了,POI指定字体后excel根据该字体打开。