Apache POI Excel - 如何配置要扩展的列?

mas*_*san 88 java excel expand apache-poi

Apache POI API用来生成excel spreadsheet输出一些数据.

我面临的问题是,在创建和打开电子表格时,不会扩展列,以便乍一看不会出现像Date格式化文本这样的长文本.

我可以双击excel中的列边框来展开或拖动边框来调整列宽,但可能有20多列,每次打开电子表格时我都无法手动执行此操作:(

我发现了(虽然可能是错误的方法)groupRow()并且setColumnGroupCollapsed()可能能够做到这一点,但没有运气.也许我错误地使用它.

示例代码段

        Workbook wb = new HSSFWorkbook();
        CreationHelper createHelper = wb.getCreationHelper();
        //create sheet
        Sheet sheet = wb.createSheet("masatoSheet");

        //not really working yet.... :(
        //set group for expand/collapse
        //sheet.groupRow(0, 10); //just random fromRow toRow argument values...
        //sheet.setColumnGroupCollapsed(0, true);

        //create row
        Row row = sheet.createRow((short)0);
        //put a cell in the row and store long text data
        row.createCell(0).setCellValue("Loooooooong text not to show up first");
Run Code Online (Sandbox Code Playgroud)

创建此电子表格时,"Looooooong text not to first up first"字符串位于单元格中,但由于该列未展开,因此仅显示"Loooooooo".

如何配置它,以便在我打开电子表格时,列已经扩展了???

Sea*_*ean 159

之后您添加到表中的所有数据,您可以拨打autoSizeColumn(int column)你的表的列自动调整到合适的大小

这是API的链接.

有关更多参考信息,请参阅此文章 使用apache poi时将excel单元格大小与内容大小相匹配的问题

  • **关于***autoSizeColumn*的警告,这需要java字体可用.这不是服务器上使用的无头java jre的一部分,并将抛出NullPointerException. (8认同)
  • 只是想指出`autoSizeColumn`不能很好地扩展,如果你有很多行,它将是*super*slow.我必须得到一点hacky并做一些类似于[在这个问题]的建议(http://stackoverflow.com/questions/18983203/how-to-speed-up-autosizing-columns-in-apache-poi ). (6认同)

Unn*_*ris 44

提示:要使自动调整大小,sheet.autoSizeColumn(columnNumber)将数据填充到Excel 进行调用.

在填充数据之前调用方法将不起作用.


Ond*_*sky 33

如果要自动调整工作簿中的所有列的大小,这里有一个可能有用的方法:

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);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


UVM*_*UVM 9

你可以尝试这样的事情:

HSSFSheet summarySheet = wb.createSheet();
summarySheet.setColumnWidth(short column, short width);
Run Code Online (Sandbox Code Playgroud)

这里的参数是:工作表中的列号和宽度但是,宽度的单位非常小,例如可以尝试4000.


sna*_*nap 9

如果您知道列的数量(如果它等于集合列表)。您可以简单地使用这个衬垫来调整一张纸的所有列(如果您至少使用 java 8):

IntStream.range(0, columnCount).forEach(sheet::autoSizeColumn)
Run Code Online (Sandbox Code Playgroud)


Adn*_*far 8

对于Excel POI:

sheetName.autoSizeColumn(cellnum); 
Run Code Online (Sandbox Code Playgroud)


Mat*_*een 5

下面的示例代码

HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("your sheet name");
HSSFRow row = sheet.createRow(0);

cell = row.createCell(0);
cell.setCellValue("A BIG NAME WITH AUTO SIZE FEATURE ENABLED");
Run Code Online (Sandbox Code Playgroud)

//这很关键

sheet.autoSizeColumn(0);
Run Code Online (Sandbox Code Playgroud)

//参数必须是单元格编号

cell = row.createCell(1);
cell.setCellValue("a big name without auto size feature enabled");
Run Code Online (Sandbox Code Playgroud)

检查输出并拧紧:)

  • sheet.setColumnWidth(columnIndex,width)也是您想要查看的方法 (2认同)