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

我尝试了所有单元的迭代

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);
}

07-26 04:07