Apache POI Excel – 如何configuration要扩展的列?

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

我面临的问题是当电子表格被创build和打开时,列不会被展开,所以像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"); 

当这个电子表格创build时,“Looooooong文本不显示第一个”string在单元格中,但由于该列不扩展只有“Loooooooo”显示。

我怎样才能configuration它,所以当我打开我的电子表格,列已经扩大?

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

这里是一个API的链接。

看到这篇文章的更多参考问题在适应Excel单元格大小的内容的大小,当使用Apache POI

提示:要使“自动resize”工作,应将数据填充到Excel中之后调用sheet.autoSizeColumn(columnNumber)

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

如果您想自动调整工作簿中的所有列,可以使用以下方法:

 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<Cell> cellIterator = row.cellIterator(); while (cellIterator.hasNext()) { Cell cell = cellIterator.next(); int columnIndex = cell.getColumnIndex(); sheet.autoSizeColumn(columnIndex); } } } } 

对于Excel POI:

 sheetName.autoSizeColumn(cellnum); 

你可以尝试这样的事情:

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

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

下面的示例代码

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

检查输出,并坚持:)

如果你想扩展你的单元格,你可以使用setColumnWidth()

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

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

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

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