java - 使用 Apache POI 在 Excel 中的一定数量的单元格后字体消失

标签 java apache-poi

当尝试从旧的 Excel 文件复制单元格样式时,在写入 32357 个单元格后,字体消失了,当找到问题的根源时,我遇到了它抛出的错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -32768
    at java.util.ArrayList.elementData(ArrayList.java:400)
    at java.util.ArrayList.get(ArrayList.java:413)
    at org.apache.poi.xssf.model.StylesTable.getFontAt(StylesTable.java:210)
    at org.apache.poi.xssf.usermodel.XSSFCellStyle.getFont(XSSFCellStyle.java:561)
    at Compare.writeRows(Compare.java:415)
    at Compare.main(Compare.java:44)

为了从旧的 Excel 文件中复制 CellStyle,我这样做了:

XSSFCellStyle style = workbook.createCellStyle();
style.cloneStyleFrom(oldCell.getCellStyle());
newCell.setCellStyle(style);
style.getFont(); //throws error here
newCell.setCellType(oldCell.getCellType());

但我不明白为什么要这样做,因为当我执行 rows.get(2506).getCell(2).getCellStyle().getFont() 时,它会返回一个 XSSFFont 对象(style.getFont() 应该返回的 XSSFFont)并且不会抛出 Exception

如果有人能帮我解决这个问题,我将不胜感激。

最佳答案

Apache POI is limited to 32767 Fonts per workbook

您需要找到一种方法来重用字体和单元格样式。

关于java - 使用 Apache POI 在 Excel 中的一定数量的单元格后字体消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31146897/

相关文章:

java - 重载解析应该选择私有(private)方法吗?

java - 如何从 Android 应用程序中的异步任务返回位图

java 输入流(添加页眉和页脚)

java - 如何使用 apache POI 和 java 将一个工作簿表复制到另一个工作簿表

java - 如何使用 POI Apache 获取生成的 Excel 文件中列的大小或长度

java - autoSizeColumn POI Java 无法正常工作

java - 如何使用java poi更改Excel单元格中的文本方向?

java - 用于定义图形或流动结构的设计

java - 无法使用maven在spring mvc项目中启动服务器

java - 如何使用 Apache POI HSLF 在 Powerpoint ppt 文件中嵌入 avi 视频?