首页 > 解决方案 > Apache Poi 如何检测模板颜色?

问题描述

我需要将所有内容从 a 复制XSSFWorkbook到 a SXSSFWorkbook,因为XSSFWorkbook由于OutOfMemoryException.

为此,我整天都在网上搜索在工作簿之间复制工作表而不会丢失任何格式、样式等的最有效方法。我使用这个论坛线程来创建我自己的 util 类工作,使用上面提到的 excel 版本。

到目前为止,它复制了所有必要的东西,只是有点打嗝。在原始文件的一张纸上,单元格背景在Theme Colors. 这会导致新文件实际显示的颜色与其应有的颜色不同。

原色: 在此处输入图像描述

新的颜色:

在此处输入图像描述

另外,如果您不知道我的意思Theme Colors(我刚刚意识到两种颜色都在同一个位置):

在此处输入图像描述在此处输入图像描述

这是我用来复制的代码CellStyles

int styleHashCode = oldCell.getCellStyle().hashCode();
CellStyle newCellStyle = styleMap.get(styleHashCode);
if (newCellStyle == null) {
    newCellStyle = newCell.getSheet().getWorkbook().createCellStyle();
    newCellStyle.cloneStyleFrom(oldCell.getCellStyle());
    styleMap.put(styleHashCode, newCellStyle);
}
newCell.setCellStyle(newCellStyle);

截至目前,这会导致打嗝。由于我刚刚发现了导致此问题的原因,因此我没有太多时间来测试我自己关于如何解决此问题的所有想法,但我会感谢此问题存在的每一个提示/解决方案。

所以总结一下:

如何复制中Theme Colors使用的颜色CellStyles


请注意,我可以很容易地用 RGB 值复制颜色,问题在于Template Colors.

编辑:我刚刚发现调用ThemesTable.inheritFromThemeAsRequired(XSSFColor color)似乎导致了我的问题。但是我还没有找到任何方法来取消设置工作簿的主题。

标签: javaexcelapache-poi

解决方案


推荐阅读