[英]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.