我面临着必须将条件格式从一个 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);
}