Apache Poi Excel-如何配置要扩展的列?
-
25-09-2019 - |
题
我在用 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");
当创建此电子表格时,“ looooooge文本不首先显示”字符串在单元格中,但由于列没有扩展,仅显示“ loooooooo”。
如何配置它,以便当我打开电子表格时,该列已经扩展了???
解决方案
后 您已经将所有数据添加到表格中,可以致电 autoSizeColumn(int column)
在您的床单上自动将列自动化为合适的尺寸
这是指向 API.
请参阅此帖子以获取更多参考使用Apache POI时,将Excel单元大小拟合到内容的大小时的问题
其他提示
小费 : 为了使自动尺寸起作用,请致电 sheet.autoSizeColumn(columnNumber)
应该做 后 将数据填充到Excel中。
在填充数据之前调用该方法,将无效。
如果您想自动大小在工作簿中的所有列,这是一种可能有用的方法:
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);
}
}
}
}
对于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");
检查输出并加剧:)
如果您知道列的计数(FE等于收集列表)。您可以简单地使用此衬里来调整一张纸的所有列(如果您使用至少Java 8):
IntStream.range(0, columnCount).forEach((columnIndex) -> sheet.autoSizeColumn(columnIndex));
它非常简单,使用此一行代码datasheet.autosizecolumn(0)
或给出括号dataSheet.autosizecolumn(单元格)中的列数
您也可以包装文本。 PFB样本代码:
CellStyle wrapCellStyle = new_workbook.createCellStyle();
wrapCellStyle.setWrapText(true);
您可以使用 setColumnWidth()
如果您想更多地扩展单元。