我使用以下代码来自动调整电子表格中的列大小:
for (int i = 0; i < columns.size(); i++) {
sheet.autoSizeColumn(i, true);
sheet.setColumnWidth(i, sheet.getColumnWidth(i) + 600);
}
问题是,对于超过 3000 行的大型电子表格,自动调整每一列的大小需要 10 多分钟。不过,对于小型文档,它的速度非常快。有什么可以帮助自动调整更快地工作吗?
我使用以下代码来自动调整电子表格中的列大小:
for (int i = 0; i < columns.size(); i++) {
sheet.autoSizeColumn(i, true);
sheet.setColumnWidth(i, sheet.getColumnWidth(i) + 600);
}
问题是,对于超过 3000 行的大型电子表格,自动调整每一列的大小需要 10 多分钟。不过,对于小型文档,它的速度非常快。有什么可以帮助自动调整更快地工作吗?
对我有用的解决方案:
可以避免合并区域,因此我可以遍历其他单元格并最终自动调整为最大的单元格,如下所示:
int width = ((int)(maxNumCharacters * 1.14388)) * 256;
sheet.setColumnWidth(i, width);
其中 1.14388 是“Serif”字体和 256 个字体单位的最大字符宽度。
自动调整大小的性能从 10 分钟提高到 6 秒。
autoSizeColumn函数本身并不完美,并且某些列的宽度不完全适合里面的数据。所以,我找到了一些适合我的解决方案。
sheet.autoSizeColumn(<columnIndex>);
// get autosized column width
int currentColumnWidth = sheet.getColumnWidth(<columnIndex>);
// add custom value to the current width and apply it to column
sheet.setColumnWidth(<columnIndex>, (currentColumnWidth + 2500));
public void autoSizeColumns(Workbook workbook) {
int numberOfSheets = workbook.getNumberOfSheets();
for (int i = 0; i < numberOfSheets; i++) {
Sheet sheet = workbook.getSheetAt(i);
if (sheet.getPhysicalNumberOfRows() > 0) {
Row row = sheet.getRow(sheet.getFirstRowNum());
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
int columnIndex = cell.getColumnIndex();
sheet.autoSizeColumn(columnIndex);
int currentColumnWidth = sheet.getColumnWidth(columnIndex);
sheet.setColumnWidth(columnIndex, (currentColumnWidth + 2500));
}
}
}
}
PS 感谢Ondrej Kvasnovsky提供的功能https://stackoverflow.com/a/35324693/13087091