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

时间:2015-08-18 08:43:25

标签: java excel apache-poi xssf

我的问题

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

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

我的问题

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

1 个答案:

答案 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

PS

如果某人无法缩减要求,那么将任务分成两个较小的任务可能会有所帮助:

  1. HSSFWorkbook转换为XSSFWorkbook,反之亦然。
  2. 完全复制XSSFWorkbook