POI中创建条件格式后使用aspose转换为PDF时,颜色不正常的问题

发布时间 2023-12-21 11:16:49作者: 秦秋随

场景:使用一个EXCEL模板,其中创建了一些条件格式,通过EASYPOI进行模板填充,使用FE模板指令,复制填充了一些行,同时复制了这些行中存在的条件格式。

现象:打开EXCEL,条件格式是正常的,但是随后通过ASPOSE CELLS将XLSX转换为PDF,会发现新创建的条件格式的长短、颜色都不正常

解决方法一:在EXCEL中打开文件后,修改并保存一次,再转换为PDF

解决方法二:不要新增条件格式,FE的时候,向原有条件格式中增加新的范围

@@@Code

private void copyConditionalFormatting(Sheet sheet, Cell cell, Cell newCell) {
if (!templateParams.isEnableCopyConditionalFormatting())
return;
if (null == cell)
return;
//todo:
同一行的规则,可按行复制
if (cell.getAddress().equals(newCell.getAddress()))
return;
int c = sheet.getSheetConditionalFormatting().getNumConditionalFormattings();
for (int i = 0; i < c; i++) {
ConditionalFormatting cf = sheet.getSheetConditionalFormatting().getConditionalFormattingAt(i);
for (CellRangeAddress fr : cf.getFormattingRanges()) {
if (fr.getFirstColumn() <= cell.getColumnIndex() && fr.getLastColumn() >= cell.getColumnIndex() && fr.getFirstRow() <= cell.getRowIndex() && fr.getLastRow() >= cell.getRowIndex()) {
//
将单元格添加到规则中
// List<CellRangeAddress> newRanges = new ArrayList<CellRangeAddress>();
// for (CellRangeAddress range : cf.getFormattingRanges()) {
// newRanges.add(range);
// }
// newRanges.add(new CellRangeAddress(newCell.getRowIndex(), newCell.getRowIndex(), newCell.getColumnIndex(), newCell.getColumnIndex()));
// cf.setFormattingRanges(newRanges.toArray(new CellRangeAddress[newRanges.size()]));
cf.setFormattingRanges(addCell(cf.getFormattingRanges(),newCell));
break; //
不考虑其它规则,先解决问题,向原范围中添加新地址

//新添加的条件格式,需要在EXCEL中打开,修改工作表后保存才会生效,否则 转PDF时会出现问题
// CellRangeAddress[] x = new CellRangeAddress[]{
// new CellRangeAddress(newCell.getRowIndex(), newCell.getRowIndex(), newCell.getColumnIndex(), newCell.getColumnIndex())
// };
// for (int r = 0; r < cf.getNumberOfRules(); r++) {
// sheet.getSheetConditionalFormatting().addConditionalFormatting(x, cf.getRule(r));
// //System.out.println(String.format("
复制条件格式成功%s,%s,现有条件格式:%d",cell.getAddress().toString(),x[0].formatAsString(), sheet.getSheetConditionalFormatting().getNumConditionalFormattings()));
// }
}
}
}
}

 

@@#