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

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

我试着遍历所有单元格和

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的风格。