当前位置: 首页 > 知识库问答 >
问题:

如何通过apche POI将条件格式从一个工作表复制到另一个工作表?

雍骏俊
2023-03-14

我面临的情况是,我必须将条件格式从一个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能够通过修复或删除不可读的内容来打开文件

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

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

如果我做错了什么,你能提一下吗?

共有1个答案

赵智
2023-03-14

我就是这么做的:

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);
}
 类似资料:
  • 试图从当前工作簿“Create Report.xlsm”中复制工作表名称“Headings Explantions”,该工作簿打开到我要求打开的工作簿中,我得到了下标超出范围的错误

  • 我正试图将所有工作表(7张)从workbook1(wb1)复制到WB2。wb1包含命令按钮,但我不希望它们出现在我的新工作簿中。我正在使用循环将单个工作表从一个工作簿复制到另一个工作簿。但是复制到第二张时出错了。我使用的代码如下:- 循环第一次成功运行,但对于i=2,代码给出错误

  • 对所有人,谢谢你提前的时间。 我们已经有了工作代码,可以在Excel中用vb将数据从一个wrksht移动到另一个wrksht。 如有任何帮助,我们将不胜感激。 2/22/19 以下是我的回应。 在第二个工作簿上,在第一列上进行搜索时,工作表称为orderlog 谢谢

  • 我想将工作簿的一页(包括样式)复制到新的工作簿。 我尝试对所有单元格进行迭代 抛出java.lang.IllegalStateException:超出了单元格样式的最大数目。在.xls工作簿中最多可以定义4000个样式 抛出java.lang.IllegalArgumentException:此样式不属于提供的工作簿。是否尝试将样式从一个工作簿分配到另一个工作簿的单元格? 正确的样式复制方法是什么

  • 我需要一个宏,它可以根据我选择的单元格从我所在的工作簿中复制整行。我已经可以这样做了,使用以下方法: 但是,我需要它将其(格式化和全部)粘贴到关闭的工作簿的第一个空行(基于B列)。R: \dasboards\wo。xlsm公司

  • 希望有人能帮我!我已经被困了一段时间了...提前谢谢! 在工作簿1中,如果Sheet1中的D列(起始行19及更高)等于“SOW”,则将整行复制到Sheet1工作簿2中的第一个可用行(第19行之后)。复制后,继续扫描D列中的项目以获取更多“SOW”实例。 背景-我正在尝试复制整行,因为我必须从A行复制该行:NL-大约有175行需要通过 下面是我尝试过的两个代码,但都没有用。他们基本上什么都不做,没有