ApachePOIExcel-如何配置要扩展的列?

我使用 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”字符串。

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

250493 次浏览

你可以试试这样:

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

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

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

这里有一个到 空气污染指数的链接。

更多参考见这篇文章 使用 apachepoi 时 Excel 单元格大小与内容大小相匹配时出现的问题

提示: 要使 Auto size 工作,应该调用 sheet.autoSizeColumn(columnNumber)将数据填充到 excel 中。

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

对于 Excel POI:

sheetName.autoSizeColumn(cellnum);

下面的示例代码

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

检查输出,然后发疯:)

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

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

如果希望进一步扩展单元格,可以使用 setColumnWidth()

很简单,用这一行代码 AutoSizeColumn (0)

或给出括号中的列数 AutoSizeColumn (单元格号)

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

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

你也可以包装文本。 PFB 示例代码:

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

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

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

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

然后向工作表中添加具有列和行的数据。一旦完成添加数据到工作表写下面的代码到 autoSizeColumn的宽度。

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

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

希望有人能帮忙。

您可以在循环之后添加这个。

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