从另一个XSSFCellStyle创建新的或克隆XSSFCellStyle (POI APACHE)

8

需求

我需要一个新的XSSFCellStyle,因为我需要更改一些样式。

情况

我只有一个XSSFCellStyle,我没有它所属的XSSFCell。因此,我也无法访问相关的XSSFSheetXSSFWorkbook

我已经尝试过的

  • 我没有XSSFWorkbook,因此无法调用workbook.createCellStyle()
  • XSSFCellStyle构造函数需要至少一个StylesTable,但我也没有(因为我找不到从旧的XSSFCellStyle获取它的方法)。
  • cellStyle.cloneStyleFrom(XSSFCellStyle Source)并不真正克隆样式(它更多地是指针相同的副本),因此如果我对一个cellStyle进行更改,则“克隆”的cellStyle也会发生相同的更改。

问题

如何获取一个新的XSSFCellStyle

谢谢,winklerrr

2个回答

9

由于Excel在xls/xlsx中存储样式的方式,您需要有工作簿/工作表才能创建新样式。实际上,样式不是作为单元格的一部分存储的,而是作为工作簿中的单独列表存储的。因此,如果可能的话,样式也应该在单元格之间重复使用。

那么您可以执行以下操作:

  XSSFCellStyle clone = wb.createCellStyle();
  clone.cloneStyleFrom(origStyle);

创建新的样式并从原始样式克隆设置。
有一个XSSFCellStyle.clone()函数,但是我不确定它是否会按照您的期望执行,因为Workbook中与样式相关联的链接不会更新,所以您将会得到两个样式对象,这两个对象指向Workbook中样式列表中相同的样式索引...

谢谢,但正如我所说:我没有访问工作簿的权限... 样式不应该有类似于对工作簿的反向引用吗?这样每当调用 clone() 时,它也可以自动更新样式表。 - winklerrr

2

XSSFCellStyle 中有一个可用的 clone() 方法。
我不知道为什么一开始没有看到它。我的错。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接