Bug 60880 - Missing: search for CellStyle
Summary: Missing: search for CellStyle
Status: NEW
Alias: None
Product: POI
Classification: Unclassified
Component: XSSF (show other bugs)
Version: 3.15-FINAL
Hardware: PC All
: P2 enhancement (vote)
Target Milestone: ---
Assignee: POI Developers List
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2017-03-17 10:35 UTC by dollinger.florian
Modified: 2017-03-24 06:52 UTC (History)
1 user (show)



Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description dollinger.florian 2017-03-17 10:35:13 UTC
I am trying to copy the whole Style of some Cells from one Worksheet to another.
At the moment I am using .cloneStyleFrom(), but this way a new Style is created everytime - since there is no way to detect if the new Style already exists and can be reused.

XSSFCellStyle newStyle = dstSheet.getWorkbook().createCellStyle();
// this creates a new style for every single cell, bad!
newStyle.cloneStyleFrom(oldCell.getCellStyle());
newCell.setCellStyle(newStyle);

should become something like:

XSSFCellStyle newStyle = null;
XSSFCellStyle exisiting = dstSheet.getWorkbook().searchForCellStyle(oldCell.getCellStyle());
// returns the already existing style (if), or null

if(existing == null){

  newStyle = dstSheet.getWorkbook().createCellStyle();
  newStyle.cloneStyleFrom(oldCell.getCellStyle());
  newCell.setCellStyle(newStyle);

} else {

  newCell.setCellStyle(existing);

}

I'll give it a try to patch it, if somebody has a good idea - please let me know!

---

Another Way would be to use CellUtil.setCellStyleProperties(), but it's not working for not-indexed colors, fonts, ...

Also a CellUtil.getCellStyleProperties() function would be nice.

(But thats another issue, i will do that afterwards)
Comment 1 dollinger.florian 2017-03-17 10:57:45 UTC
By the way, the following would in fact work - but makes only sense within the same Workbook!

for(int p = 0; p < dstSheet.getWorkbook().getNumCellStyles(); p++){
  if(dstSheet.getWorkbook().getCellStyleAt(p).equals(newStyle))
  System.out.println("exists");
}


Because

applyAlignment="1" borderId="0" fillId="0" fontId="0" numFmtId="0" xfId="0"
on workbook 1

and
applyAlignment="1" borderId="0" fillId="0" fontId="0" numFmtId="0" xfId="0"
on workbook 2

may be referencing different fills, fonts, ... (the same index does not mean it is really the same on both workbooks)