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

我使用groupRow()生成setColumnGroupCollapsed()来输出一些数据。

我面临的问题是,在创建和打开电子表格时,不会扩展列,以便乍一看不会出现像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");

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

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

9个解决方案

142 votes

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

这是API的链接。

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

Sean answered 2019-03-26T22:16:22Z

38 votes

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

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

Unni Kris answered 2019-03-26T22:16:53Z

21 votes

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

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(0);

Iterator cellIterator = row.cellIterator();

while (cellIterator.hasNext()) {

Cell cell = cellIterator.next();

int columnIndex = cell.getColumnIndex();

sheet.autoSizeColumn(columnIndex);

}

}

}

}

Ondrej Kvasnovsky answered 2019-03-26T22:17:17Z

8 votes

对于Excel POI:

sheetName.autoSizeColumn(cellnum);

Adnan Ghaffar answered 2019-03-26T22:17:42Z

7 votes

你可以尝试这样的事情:

HSSFSheet summarySheet = wb.createSheet();

summarySheet.setColumnWidth(short column, short width);

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

UVM answered 2019-03-26T22:18:09Z

4 votes

示例代码如下

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

检查输出并坚果:)

Mateen answered 2019-03-26T22:18:53Z

1 votes

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

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

snap answered 2019-03-26T22:19:18Z

0 votes

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

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

Muhammad Faisal Shahzad answered 2019-03-26T22:19:56Z

-1 votes

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

Francis Gabriel Rodriguez answered 2019-03-26T22:20:29Z

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐