How to speed up autosizing columns in apache POI?

前端 未结 2 1945
温柔的废话
温柔的废话 2020-12-25 12:51

I use the following code in order to autosize columns in my spreadsheet:

for (int i = 0; i < columns.size(); i++) {
   sheet.autoSizeColumn(i, true);
   s         


        
2条回答
  •  不知归路
    2020-12-25 13:20

    The autoSizeColumn function itself works not perfect and some columns width not exactly fit the data inside. So, I found some solution that works for me.

    1. To avoid crazy calculations let give that to autoSizeColumn() function:
       sheet.autoSizeColumn();
    
    1. Now, our column autosized by library but we wont to add a little bit more to the current column width to make table looks fine:
       // get autosized column width
       int currentColumnWidth = sheet.getColumnWidth();
    
       // add custom value to the current width and apply it to column
       sheet.setColumnWidth(, (currentColumnWidth + 2500));
    
    1. The full function could looks like:
       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 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));
                    }
                }
            }
        }
    

    P.S. Thanks Ondrej Kvasnovsky for the function https://stackoverflow.com/a/35324693/13087091

提交回复
热议问题