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

问题描述 投票:0回答:13

我正在使用

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”字符串位于单元格中,但由于该列未展开,仅显示“Loooooooo”。

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

java excel expand apache-poi
13个回答
218
投票

将所有数据添加到工作表后,您可以在工作表上调用 autoSizeColumn(int column)

 将列自动调整为正确的大小

这里是

API的链接。

请参阅这篇文章以获取更多参考

使用 apache poi 时将 excel 单元格大小调整为内容大小的问题


55
投票

提示:要使自动调整大小工作,应在将数据填充到 Excel 后

调用
sheet.autoSizeColumn(columnNumber)

在填充数据之前调用该方法,不会有任何效果。


55
投票
如果您想自动调整工作簿中所有列的大小,以下方法可能有用:

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

11
投票
你可以尝试这样的事情:

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

此处参数为:sheet中的列数及其宽度 但是,宽度单位很小,例如你可以尝试 4000。


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

IntStream.range(0, columnCount).forEach(sheet::autoSizeColumn)
    

8
投票
对于 Excel POI:

sheetName.autoSizeColumn(cellnum);
    

7
投票
下面的示例代码

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

检查输出并疯狂:)


4
投票
您可以在循环之后添加此内容。

for (int i = 0; i<53;i++) { sheet.autoSizeColumn(i); }
    

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

这是你的作业簿和工作表:

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

然后将数据添加到包含列和行的工作表中。将数据添加到工作表后,将以下代码写入

autoSizeColumn

宽度。

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

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

希望有人帮忙。


1
投票
您也可以对文本进行换行。 PFB 示例代码:

CellStyle wrapCellStyle = new_workbook.createCellStyle(); wrapCellStyle.setWrapText(true);
    

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

或给出括号内的列数 dataSheet.autoSizeColumn(单元格编号)


0
投票
您可以使用调整列大小sheet.autoSizeColumn,但不要每次都使用它,当您完成写入时使用它


-1
投票
如果您想进一步扩展单元格,可以使用

setColumnWidth()

© www.soinside.com 2019 - 2024. All rights reserved.