默认情况下用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);
}
}
}
文章评论