gpt4 book ai didi

java - 使用 Apache POI 获取新单元格的边框和填充样式

转载 作者:行者123 更新时间:2023-11-30 07:06:01 24 4
gpt4 key购买 nike

关注@ POI Excel Merging Causing "Repaired Records: Format from /xl/styles.xml part (Styles)" 的帖子

我有两个 excel 文件,它们打开时样式和颜色都很好(在 Microsoft Office 2010 中)。

我正在使用上面线程中发布的代码合并这两个 excel 文件。

问题出在样式上(我创建的样式如下):

newCellStyle = newCell.getSheet().getWorkbook().createCellStyle();
newCellStyle.cloneStyleFrom(oldCellStyle);
styleMap.put(stHashCode, newCellStyle);

导致样式问题“已修复的记录:格式来自/xl/styles.xml 部分(样式)

经过大量研究后,我了解到边框和填充是导致问题的原因。取消设置这些参数已解决问题。但正如它所说的那样,边框和填充不见了。

有人可以提出关于如何从单元格获取边框和填充样式并将其应用于新单元格的想法吗?

最佳答案

这似乎是一个 bug in Apache POI, #55800 . “CoreXf”对象中使用的边框 ID 和填充 ID 未被复制,从而导致该问题。

根据 Comment 5 on that bug , 可以通过自己手动复制填充和边框属性来解决它。

The reason is it won't copy the XSSFCellFill and XSSFCellBorder. This also gives problem with borders. I have added a method in org.apache.poi.xssf.model.StylesTable which will help in creating a copy of workbook.

public void copyTo(StylesTable stylesTable){
stylesTable.numberFormats.clear();
stylesTable.fonts.clear();
stylesTable.fills.clear();
stylesTable.borders.clear();
stylesTable.styleXfs.clear();
stylesTable.xfs.clear();
stylesTable.dxfs.clear();

for(String str : numberFormats.values())
stylesTable.putNumberFormat(str);

for(XSSFFont font : fonts){
XSSFFont fontNew = new XSSFFont(font.getCTFont());
fontNew.registerTo(stylesTable);
}
for(XSSFCellFill fill : fills){
XSSFCellFill fillNew = new XSSFCellFill(fill.getCTFill());
stylesTable.putFill(fillNew);
}
for(XSSFCellBorder border : borders){
XSSFCellBorder borderNew = new XSSFCellBorder(border.getCTBorder());
stylesTable.putBorder(borderNew);
}
for(CTXf ctxf : styleXfs){
CTXf ctxfNew = (CTXf)ctxf.copy();
stylesTable.putCellStyleXf(ctxfNew);
}
for(CTXf ctxf : xfs){
CTXf ctxfNew = (CTXf)ctxf.copy();
stylesTable.putCellXf(ctxfNew);
}
for(CTDxf dxf : dxfs){
CTDxf dxfNew = (CTDxf)dxf.copy();
stylesTable.putDxf(dxfNew);
}
}

关于java - 使用 Apache POI 获取新单元格的边框和填充样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26036950/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com