gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:26:34 25 4
gpt4 key购买 nike

我的问题

我需要将 XSSFWorkbookHSSFWorkbook 中的单元格准确复制到新的 XSSFWorkbook。因此,我的单元可以是两种类型:XSSFCellHSSFCell

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

我的问题

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

最佳答案

我的解决方案

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

精确复制 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

<小时/>

附注

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

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

关于java - 将 XSSF/HSSF-Cells 复制到新的 XSSFWorkbook 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32067614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com