我需要完全将XSSFWorkbook
和HSSFWorkbook
的单元格复制到新的XSSFWorkbook
。所以我的单元格可以是两种类型:XSSFCell
和HSSFCell
。
完全,我的意思是我还需要复制CellStyle
,包括CellBorder
和CellFill
属性以及DefaultRowHeight
和DefaultColumnWidth
工作簿本身。还应复制每行和每列的高度和宽度。
(复制CellStyle
有时会导致奇怪的行为,就像我已经问过here)。
最好的方法是什么?我不想自己手动复制每个属性。特别是如果我不知道我的输入单元格是XSSFCell
还是HSSFCell
。
答案 0 :(得分: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
如果某人无法缩减要求,那么将任务分成两个较小的任务可能会有所帮助:
HSSFWorkbook
转换为XSSFWorkbook
,反之亦然。XSSFWorkbook
。