将 XSSF/HSSF-Cells 复制到新的 XSSFWorkbook
Copy a XSSF/HSSF-Cells into a new XSSFWorkbook
我的问题
我需要完全 将 XSSFWorkbook
和 HSSFWorkbook
中的单元格复制到新的 XSSFWorkbook
。所以我的细胞可以是两种类型:XSSFCell
和 HSSFCell
.
完全,我的意思是我还需要复制 CellStyle
,包括 CellBorder
和 CellFill
属性以及工作簿本身的 DefaultRowHeight
和 DefaultColumnWidth
。还应复制每行和每列的高度和宽度。
(复制 CellStyle
有时会导致奇怪的行为,就像我已经问过的那样 here)。
我的问题
最好的方法是什么?我不想自己手动复制每个 属性。特别是如果我不知道我的输入单元格的类型是 XSSFCell
还是 HSSFCell
.
我的解决方案
我已经通过缩小需求规模解决了我的问题。现在我只专注于 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
。
我的问题
我需要完全 将 XSSFWorkbook
和 HSSFWorkbook
中的单元格复制到新的 XSSFWorkbook
。所以我的细胞可以是两种类型:XSSFCell
和 HSSFCell
.
完全,我的意思是我还需要复制 CellStyle
,包括 CellBorder
和 CellFill
属性以及工作簿本身的 DefaultRowHeight
和 DefaultColumnWidth
。还应复制每行和每列的高度和宽度。
(复制 CellStyle
有时会导致奇怪的行为,就像我已经问过的那样 here)。
我的问题
最好的方法是什么?我不想自己手动复制每个 属性。特别是如果我不知道我的输入单元格的类型是 XSSFCell
还是 HSSFCell
.
我的解决方案
我已经通过缩小需求规模解决了我的问题。现在我只专注于 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
。