2017-07-24 95 views
0

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

我尝试了所有细胞的迭代和

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

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

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

定义多达4000个风格抛出 java.lang.IllegalArgumentException异常:这种风格不属于所提供的工作簿。您是否尝试将一个工作簿中的样式分配给不同工作簿的单元格?

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

+1

一个HashMap是不是真的有一个很好的方式做这个使用'阿帕奇poi'。如果需要的是只有旧工作簿中的一张工作表的新工作簿,则从旧文件中获取“工作簿”,删除所有不必要的工作表,然后将其另存为新文件。否则唯一的方法是使用[CellUtil.setCellStyleProperties](https://poi.apache.org/apidocs/org/apache/poi/ss/util/CellUtil.html#setCellStyleProperties%28org.apache.poi.ss。 usermodel.Cell,%20java.util.Map%29)。但问题当然是如何从旧单元格中获取全部**属性。 –

+2

有从旧到新工作簿样式的地图,依次检查每个单元格,并且每当您找到一个新的工作簿时,在地图上克隆+存储? – Gagravarr

回答

0

Excel中的样式很乱。如果要使用Excel桌面在工作簿之间复制工作表及其所有样式,通常只需在工作簿之间复制工作表即可。样式将自动作为行李。

但以这种方式复制的样式也很容易被破坏并导致很多问题。您的消息超出了风格腐败的限制点,因为没有健康的工作簿会有超过4000种风格。

1

解决它包含的样式

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); 
} 
相关问题