POI导出Excel,设置自适应列宽(中文支持)

2019.3.21 java
// 必须在单元格设值以后进行
// 设置为根据内容自动调整列宽    
for (int k = 0; k < dataStrList .size(); k++) {
    sheet.autoSizeColumn(k);
}
// 处理中文不能自动调整列宽的问题
this.setSizeColumn(sheet, dataStrList.size());

我们使用autoSizeColumn方法可以把Excel设置为根据内容自动调整列宽,然而这个方法对中文并不起效,只对数字和字母有效;

可以在其后再加入这个方法;

// 自适应宽度(中文支持)
private void setSizeColumn(XSSFSheet sheet, int size) {
    for (int columnNum = 0; columnNum < size; columnNum++) {
        int columnWidth = sheet.getColumnWidth(columnNum) / 256;
        for (int rowNum = 0; rowNum < sheet.getLastRowNum(); rowNum++) {
            XSSFRow currentRow;
            // 当前行未被使用过
            if (sheet.getRow(rowNum) == null) {
                currentRow = sheet.createRow(rowNum);
            } else {
                currentRow = sheet.getRow(rowNum);
            }

            if (currentRow.getCell(columnNum) != null) {
                XSSFCell currentCell = currentRow.getCell(columnNum);
                if (currentCell.getCellType() == XSSFCell.CELL_TYPE_STRING) {
                    int length = currentCell.getStringCellValue().getBytes().length;
                    if (columnWidth < length) {
                        columnWidth = length;
                    }
                }
            }
        }
        sheet.setColumnWidth(columnNum, columnWidth * 256);
    }
}

更新列表:

*

参考文章:

[2]: [3]: [4]:

相关阅读