121

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

我面临的问题是,当创建和打开电子表格时,列没有展开,因此第一眼看不到日期格式文本等一些长文本。

我可以双击 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");

创建此电子表格时,“Looooooong text not to show up first”字符串位于单元格中,但由于列未展开,因此仅显示“Looooooooo”。

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

4

12 回答 12

202

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

这是API的链接。

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

于 2011-01-06T06:05:29.100 回答
51

提示:要使自动大小起作用,sheet.autoSizeColumn(columnNumber)应在将数据填充到 excel后进行调用。

在填充数据之前调用该方法将没有任何效果。

于 2012-03-13T07:06:18.950 回答
46

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

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);
            }
        }
    }
}
于 2016-02-10T19:56:33.753 回答
11

你可以尝试这样的事情:

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

这里的参数是:表格中的列数及其宽度但是,宽度的单位很小,你可以试试4000。

于 2011-01-06T05:45:26.673 回答
8

对于 Excel POI:

sheetName.autoSizeColumn(cellnum); 
于 2014-04-01T20:58:31.120 回答
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");

//这很关键

sheet.autoSizeColumn(0);

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

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

检查输出并发疯:)

于 2014-09-23T10:22:38.413 回答
3

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

IntStream.range(0, columnCount).forEach((columnIndex) -> sheet.autoSizeColumn(columnIndex));
于 2017-12-13T15:08:52.310 回答
2

我使用以下简单的解决方案:

这是您的工作簿和工作表:

XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("YOUR Workshhet");

然后使用列和行将数据添加到您的工作表中。完成将数据添加到工作表后,将以下代码写入autoSizeColumn宽度。

for (int columnIndex = 0; columnIndex < 15; columnIndex++) {
                    sheet.autoSizeColumn(columnIndex);
                }

在这里,您添加工作表中的列数,而不是 15。

希望有人对此有所帮助。

于 2020-02-11T10:15:25.927 回答
1

您可以在循环之后添加它。

for (int i = 0; i<53;i++) {
    sheet.autoSizeColumn(i);
}
于 2020-11-10T16:46:39.283 回答
0

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

或给出括号 dataSheet.autoSizeColumn(cell number) 中的列数

于 2017-11-08T11:32:33.867 回答
0

您也可以换行文本。PFB 示例代码:

CellStyle wrapCellStyle = new_workbook.createCellStyle();
                    wrapCellStyle.setWrapText(true);
于 2018-12-14T12:19:55.270 回答
0

setColumnWidth()如果您想更多地扩展您的单元格,您可以使用。

于 2016-10-06T16:10:47.080 回答