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