首页 文章

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

提问于
浏览
78

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

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

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

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

Sample Code snippet

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");

When this spreadsheet is created, the "Looooooong text not to show up first" string is in the cell but since the column is not expanded only "Loooooooo" is showing up.

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

9 回答

  • 4

    如果要更多地扩展单元格,可以使用 setColumnWidth() .

  • 22

    对于Excel POI:

    sheetName.autoSizeColumn(cellnum);
    
  • 38

    你可以尝试这样的事情:

    HSSFSheet summarySheet = wb.createSheet();
    summarySheet.setColumnWidth(short column, short width);
    

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

  • 142

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

    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);
                }
            }
        }
    }
    
  • 8

    Tip : 要使自动调整大小,应调用 sheet.autoSizeColumn(columnNumber) after 将数据填充到excel中 .

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

  • 7

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

    IntStream.range(0, columnCount).forEach((columnIndex) -> sheet.autoSizeColumn(columnIndex));
    
  • -1

    示例代码如下

    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");
    

    //这很重要

    sheet.autoSizeColumn(0);
    

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

    cell = row.createCell(1);
    cell.setCellValue("a big name without auto size feature enabled");
    

    检查输出并坚果:)

  • 1

    After 您已将所有数据添加到工作表中,您可以在工作表上调用 autoSizeColumn(int column) 以将列自动调整为适当大小

    这是API的链接 .

    有关更多参考,请参阅此帖子Problem in fitting the excel cell size to the size of the content when using apache poi

  • 0

    它非常简单,使用这一行代码dataSheet.autoSizeColumn(0)

    或者在括号dataSheet.autoSizeColumn(单元格编号)中给出列数

相关问题