繁体   English   中英

将样式从一个 Excel 工作簿复制到另一个

[英]Copying Styles from one Excel Workbook to another

我想将一张工作簿(包括样式)复制到新工作簿。

我尝试迭代所有单元格和

CellStyle newCellStyle = workbook.createCellStyle();
newCellStyle.cloneStyleFrom(oldCell.getCellStyle());
newCell.setCellStyle(newCellStyle);

抛出 java.lang.IllegalStateException:超出单元格样式的最大数量。 您最多可以在 .xls 工作簿中定义 4000 种样式

CellStyle newCellStyle = oldCell.getCellStyle();
newCell.setCellStyle(newCellStyle);

抛出 java.lang.IllegalArgumentException:此样式不属于提供的工作簿。 您是否尝试将一个工作簿中的样式分配给不同工作簿的单元格?

复制样式的正确方法是什么?

用包含样式的哈希图解决了它

HashMap<Integer, CellStyle> styleMap = new HashMap<Integer, CellStyle>();
public void copyCell(Cell oldCell, Cell newCell){
       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);
}

Excel 中的样式一团糟。 如果要在工作簿之间复制工作表及其所有样式,使用 Excel 桌面,通常只需在工作簿之间复制工作表就足够了。 样式将自动作为行李出现。

但是以这种方式复制的样式也很容易被破坏并导致很多问题。 您超出限制的消息指向样式损坏,因为没有健康的工作簿会具有超过 4000 种样式。

在迭代中使用以下代码:

CellStyle newCellStyle = workbook.createCellStyle();
newCellStyle.cloneStyleFrom(oldCell.getCellStyle());

这在您用来创建新单元格的迭代中:

newCell.setCellStyle(newCellStyle);

将解决这个问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM