如何通过apche POI将条件格式从一张纸复制到另一张纸?



我面临着必须将条件格式从一个 excel 工作表复制到另一个工作表的情况。

这就是我尝试过的;

SheetConditionalFormatting sscf= source.getSheetConditionalFormatting();
SheetConditionalFormatting dscf= destination.getSheetConditionalFormatting();
for(int i=0;i<sscf.getNumConditionalFormattings();i++)
dscf.addConditionalFormatting(sscf.getConditionalFormattingAt(i));

源和目标都是 XSSF。

但是当我尝试打开目标工作表时,excel显示一条消息,指出工作表中存在一些错误,我是否要恢复它?如果我单击"是",工作表将打开,但条件格式未正确应用。

修复 excel 后显示一条消息,例如;

Excel能够通过修复或删除不可读的内容来打开文件

在这种情况下,我的条件格式就像如果单元格区域中有一个空格,则该单元格的背景将为灰色

但是我不能在我的目标工作表中对其进行硬编码(尽管我不知道是否可能(,因为源工作表中可能有不同的格式。

你能告诉我我是否做错了什么吗?

这就是它对我的工作方式:

XSSFWorkbook existingWorkbook = (XSSFWorkbook) WorkbookFactory.create(new File("c:/test1.xlsx"));
XSSFWorkbook brandNewWorkbook = (XSSFWorkbook) WorkbookFactory.create(true);
XSSFSheet existingSheet = existingWorkbook.getSheet("Sheet1");
CTWorksheet ctWorksheet = existingSheet.getCTWorksheet();
List<CTConditionalFormatting> formattingList = ctWorksheet.getConditionalFormattingList();
XSSFSheet sheet = brandNewWorkbook.createSheet("Sheet1");
for (CTConditionalFormatting cf : formattingList) {
CTConditionalFormatting newCf = sheet.getCTWorksheet().addNewConditionalFormatting();
newCf.xsetSqref(cf.xgetSqref());
newCf.setCfRuleArray(cf.getCfRuleList().toArray(new CTCfRule[]{}));
}
CTDxfs dxfs = existingWorkbook.getStylesSource().getCTStylesheet().getDxfs();
brandNewWorkbook.getStylesSource().getCTStylesheet().setDxfs(dxfs);
try (FileOutputStream out = new FileOutputStream(new File("c:/test2.xlsx"))) {
brandNewWorkbook.write(out);
}

相关内容

最新更新