我的解決方案
我已經通過的要求縮小解決我的問題。現在我只專注於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
如果有人不能縮減的要求的話,也許是有幫助的任務分成兩個較小的任務:
- 轉換一個
HSSFWorkbook
到一個XSSFWorkbook
,反之亦然。
- 準確複製
XSSFWorkbook
。
如果你喜歡把它變成一個獨立的例子[去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