Create new or clone XSSFCellStyle from another XSS

2019-06-22 05:04发布

问题:

Requirement

I need a new XSSFCellStyle because I have to change some stylings.

Situation

I only have a XSSFCellStyle - I don't have the XSSFCell it belongs to. Thus I also don't have access to the related XSSFSheet or XSSFWorkbook.

What I already tried

  • I don't have the XSSFWorkbook therefore I can't call workbook.createCellStyle().
  • The XSSFCellStyle constructor needs at least a StylesTable which I also don't have (because I couldn't find a way to get it from the old XSSFCellStyle).
  • The cellStyle.cloneStyleFrom(XSSFCellStyle Source) doesn't really clone the style (it's more or less just a copy with the same pointers, so if I change something on one cellStyle the "cloned" cellStyle has the same changes).

Question

How can I get a new XSSFCellStyle?

Regards, winklerrr

回答1:

Because of the way Excel stores the styles in the xls/xlsx, you need to have the Workbook/Sheet available in order to create a new Style. In fact Styles are not stored as part of Cells, but as a separate list in the Workbook. Because of this styles also should be re-used across Cells if possible.

Then you would do something like

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

to create a new Style and clone the settings from the original one.

There is a XSSFCellStyle.clone(), but I am not sure if it will do what you expect as the links to the Workbook will not be updated, so you will have two Style object which point at the same style-index in the list of styles in the Workbook...



回答2:

There is a clone() method available on the XSSFCellStyle.
I don't know why but I didn't see it in the first place. My bad.