2015-08-18 30 views
0

我的問題

我需要正是複製細胞XSSFWorkbook S和HSSFWorkbook s到一個新的XSSFWorkbook。所以我的細胞可以是兩種類型:XSSFCellHSSFCell複製XSSF/HSSF-Cells公司進入一個新的XSSFWorkbook

通過正是,我的意思是我還需要複製CellStyle包括​​和CellFill性質以及工作簿本身的DefaultRowHeightDefaultColumnWidth。還應該複製每個行和列的高度和寬度。 (複製CellStyle有時會導致奇怪的行爲,例如我已經問過here)。

我的問題

這樣做的最好方法是什麼?我不想自己手動複製每個屬性。特別是如果我不知道我的輸入單元是XSSFCell還是HSSFCell

回答

2

我的解決方案

我已經通過的要求縮小解決我的問題。現在我只專注於XSSFWorkbook s。

正確複製XSSFWorkbook真的很簡單。要將XSSFCellStyle複製到另一個工作簿中只使用下面的代碼:

// Copy cell style from `sourceCell` to `targetCell` 
XSSFCellStyle sourceCellStyle = sourceCell.getCellStyle(); 
XSSFCellStyle clonedCellStyle = newWorkbook.createCellStyle(); 
clonedCellStyle.cloneStyleFrom(sourceCellStyle); 
targetCell.setCellStyle(clonedCellStyle); 

重要的是,在目標工作簿具有相同的樣式源作爲源工作簿。否則,克隆的單元格樣式會有所不同。

final StylesTable sourceStylesSource = sourceWorkbook.getStylesSource(); 
final StylesTable tagetStylesSource = targetWorkbook.getStylesSource(); 

sourceStylesSource.getFonts().forEach(font -> targetStylesSource.putFont(font, true)); 
sourceStylesSource.getFills().forEach(fill -> targetStylesSource.putFill(new XSSFCellFill(fill.getCTFill()))); 
sourceStylesSource.getBorders().forEach(border -> targetStylesSource.putBorder(new XSSFCellBorder(border.getCTBorder()))); 

我希望這可以幫助別人!
問候,winklerrr


PS

如果有人不能縮減的要求的話,也許是有幫助的任務分成兩個較小的任務:

  1. 轉換一個HSSFWorkbook到一個XSSFWorkbook,反之亦然。
  2. 準確複製XSSFWorkbook
+0

如果你喜歡把它變成一個獨立的例子[去Apache POI的例子部分](https://svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/poi/xssf),在[增強bug](https://bz.apache.org/bugzilla/enter_bug.cgi?product=POI)或[GitHub pull request](https:/ /github.com/apache/poi),我們很樂意添加它! – Gagravarr