我面临的情况是我必须将条件格式从一张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可以通过修复或删除不可读的内容来打开文件
在这种情况下,我的条件格式就像如果一系列单元格中有空格,那么该单元格的背景将是灰色的
但我不能在我的目的地表中给它硬编码(虽然我不知道是否可能),因为源表中可能有不同的格式。
如果我做错了,你能提一下吗?
答案 0 :(得分:0)
这就是它对我的作用:
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);
}