ApachePOI中设置Excel单元格宽度(或自动宽度)

2022-11-29 122点热度 0人点赞 0条评论

默认情况下用ApachePOI生成的Excel,单元格Cell所在的那一列(Column)的宽度都很窄,用户下载后,需要每一个单元格都手动拉宽才能显示内容,比较不方便。

POI中可以有以上几种方式,从代码中设置单元格宽度:

宽度的参数要乘以256,这是怎么回事呢?其实,这个参数的单位是1/256个字符宽度,20 * 256 就是20个字符的宽度

# 我们假设要给单元格设置宽度是20 (以下都要将需要的宽度乘以256传进去)

# 设置Sheet下所有的单元格的默认宽度是20
sheet.setDefaultColumnWidth(20 * 256);

# 给特定某一列设置单元格宽度为20
int columnIndex = 0; //给A列设置为宽度20 
sheet.setColumnWidth(columnIndex, 20 * 256);

# 给某一列设定单元格内容自动根据内容自适应变宽
sheet.autoSizeColumn(columnIndex);

通过以上代码中三种方式,我们应该可以随心所欲设置单元格所在列的宽度了。

我还写了一个工具方法,给sheet下的所有列设置为自适应宽度:

/**
 * 
 * @param workbook workbook
 * @param targetSheetNumber 需要自适应的目标sheet,0是第一个
 * @param targetRow 需要按照某一行的内容子适应
 */
private void autoSizeColumns(Workbook workbook, int targetSheetNumber, int targetRow) {
    Sheet sheet = workbook.getSheetAt(targetSheetNumber);
    if (sheet.getPhysicalNumberOfRows() > targetRow) {
        Row row = sheet.getRow(targetRow);
        Iterator<Cell> cellIterator = row.cellIterator();
        while (cellIterator.hasNext()) {
            Cell cell = cellIterator.next();
            int columnIndex = cell.getColumnIndex();
            sheet.autoSizeColumn(columnIndex);
        }
    }
}

 

admin

这个人很懒,什么都没留下

文章评论

您需要 登录 之后才可以评论