我在用 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() 如果您想更多地扩展单元。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top