Apache POI autoSizeColumn 调整大小不正确

新手上路,请多包涵

我在 java 中使用 Apache POI 创建一个 excel 文件。我填写数据然后尝试自动调整每一列的大小,但是大小总是错误的(我 认为是 一致的)。前两行总是(?)完全折叠。当我在 excel 中自动调整列大小时,它工作得很好。

没有写入空白单元格(我相信),调整大小是我做的 最后一 件事。

这是相关代码: 这是一个没有错误处理等的简化版本。

 public static synchronized String storeResults(ArrayList<String> resultList, String file) {
    if (resultList == null || resultList.size() == 0) {
        return file;
    }
    FileOutputStream stream = new FileOutputStream(file);

    //Create workbook and result sheet
    XSSFWorkbook book = new XSSFWorkbook();
    Sheet results = book.createSheet("Results");

    //Write results to workbook
    for (int x = 0; x < resultList.size(); x++) {
        String[] items = resultList.get(x).split(PRIM_DELIM);

        Row row = results.createRow(x);
        for (int i = 0; i < items.length; i++) {
            row.createCell(i).setCellValue(items[i]);
        }
    }

    //Auto size all the columns
    for (x = 0; x < results.getRow(0).getPhysicalNumberOfCells(); x++) {
        results.autoSizeColumn(x);
    }

    //Write the book and close the stream
    book.write(stream);
    stream.flush();
    stream.close();

    return file;
}

我知道那里有一些类似的问题,但其中大多数只是在填写数据之前调整大小的情况。少数不是更复杂/没有答案。

编辑: 我尝试使用几种不同的字体,但没有用。这并不奇怪,因为无论字体是什么,所有列都应该完全折叠,或者一个都不应该。

此外,由于出现字体问题,我在 Windows 7 上运行该程序。

解决: 这是一个字体问题。我发现唯一可用的字体是 Serif。

原文由 Jaws212 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

只是为了根据我的评论做出回答。行的大小不正确,因为 Java 不知道您尝试使用的字体如果您想将新字体安装到 Java 中,那么您可以使用更高级的字体, 此链接 应该会有所帮助。它还具有 Java 知道的默认字体列表。

很高兴这对您有所帮助,您的问题得到了解决!

原文由 Shaded 发布,翻译遵循 CC BY-SA 3.0 许可协议

这可能与 此 POI 错误 有关,该错误与 Java 错误 JDK-8013716 相关:自更新 45 以来 Calibri 和 Cambria 字体的渲染器失败

在这种情况下,更改字体或使用高于 6u45 / 7u21 的 JRE 应该可以解决问题。

您还可以通过使用如下代码解决问题并避免列完全折叠:

     sheet.autoSizeColumn(x);

    if (sheet.getColumnWidth(x) == 0) {
      // autosize failed use MIN_WIDTH
      sheet.setColumnWidth(x, MIN_WIDTH);
    }

原文由 Sebastien 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题