2017-07-24 132 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); 
} 
相關問題