Apache POI克隆风格和获取风格之间的区别

时间:2014-06-11 14:10:48

标签: java excel apache-poi

执行之间是否存在显着差异:

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

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

我之所以这样问是因为我不确定采用第一种方法是否有可能造成太多的CellStyles,我遇到了一些问题,如果我在一个特定的工作簿中创建了太多的CellStyles,工作簿的所有样式都消失了。那么采取第二种方法有什么问题吗?

2 个答案:

答案 0 :(得分:10)

第一种方法将为每个新细胞创建一种新的细胞样式,正如您正确注意到的那样可能导致您最终导致'CellStyle爆炸'。

此解决方案的潜在好处(或缺点 - 取决于您的用例)是每个单元格引用不同的单元格样式对象的情况,因此更改一个单元格的样式不会影响任何其他单元格(可能是如果您希望将来仅修改电子表格的选定部分的样式,则非常有用。

在第二种方法中,所有引用相同样式的单元格都会被修改,尽管使用CellUtil可以找到一个简洁的方法(必要时),您可以找到更详细的in another Stack Overflow post here

答案 1 :(得分:1)

如果您尝试从同一工作簿复制单元格样式,则还有另一个区别。如果要从其他工作簿复制,则第二种方法将产生错误:

java.lang.IllegalArgumentException:此样式不属于提供的Workbook Stlyes源。您是否正在尝试将样式从一个工作簿分配给另一个工作簿的单元格?

如果文件不同,则需要使用第一种方法。