将 XSSF/HSSF-Cells 复制到新的 XSSFWorkbook

Copy a XSSF/HSSF-Cells into a new XSSFWorkbook

我的问题

我需要完全XSSFWorkbookHSSFWorkbook 中的单元格复制到新的 XSSFWorkbook。所以我的细胞可以是两种类型:XSSFCellHSSFCell.

完全,我的意思是我还需要复制 CellStyle,包括 CellBorderCellFill 属性以及工作簿本身的 DefaultRowHeightDefaultColumnWidth。还应复制每行和每列的高度和宽度。 (复制 CellStyle 有时会导致奇怪的行为,就像我已经问过的那样 here)。

我的问题

最好的方法是什么?我不想自己手动复制每个 属性。特别是如果我不知道我的输入单元格的类型是 XSSFCell 还是 HSSFCell.

我的解决方案

我已经通过缩小需求规模解决了我的问题。现在我只专注于 XSSFWorkbooks.

完全复制 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