如何使用EPPlus删除单元格或范围的条件格式

有没有办法从EPPlus的单元格或范围中删除条件格式? 我已经尝试清除,重置,删除行,插入行,没有格式复制单元格,但没有任何工作。 有许多方法可以从工作表(worksheet.RemoveAll或RemoveAt)中删除所有条件格式,但不能从任何地方find的单元格或范围中删除。
谢谢

经过一些更多的研究,我发现了一种方法来检查,更改或删除单元格或范围的条件格式,查看openxml规范。 条件格式存储在工作表中,范围在属性sqref下。 所以你可以编辑该范围或添加一个新的。

例如:

DIM p As New ExcelPackage(New FileInfo(ExlReportPath), True) Dim ws As ExcelWorksheet = p.Workbook.Worksheets(ExlSheetName) 

' – 查找节点“工作表”(1在我的情况),find所有的孩子节点“conditionalFormatting”(5至11在我的testing)

 Print.Debug(ws.WorksheetXml.ChildNodes(1).ChildNodes(5).Name) 

' – 你得到:conditionalFormatting

' – 现在你可以检查范围:

 Print.Debug(ws.WorksheetXml.ChildNodes(1).ChildNodes(5).Attributes("sqref").Value) 

' – 将给你这个格式适用的单元格地址,例如:“D11:D15”' – 你可以更改删除或添加新的范围,如果你想,下面我添加F11:F15

 ws.WorksheetXml.ChildNodes(1).ChildNodes(5).Attributes("sqref").Value="D11:D15 F11:F15" 

' – 你也可以在InnerXml中检查规则本身…

如果您需要更多关于标记的细节,请参阅google Wouter van Vugt,“Open XML标记说明”。 我发现它是有用的,完整的文件在线(免费)。

如果你find一个更简单的方法,请张贴它。

问候

您可以将每个规则的Address属性设置为一个新的ExcelAddress对象,其地址可省略所涉及的单元格或子范围,例如—

 var cfRules = worksheet.ConditionalFormatting; var cfToModify = cfRules.Where(cf => ofInterest(cf.Address)); foreach (var cf in cfToModify) { // Determine a new address for the rule so that it no longer // affects the cell or sub-range you're interested in. var newRangeAddress = "something else"; // (Just some filler, won't work...) cf.Address = new ExcelAddress(newRangeAddress); } 

—用ofInterest定义你想要的,例如:

 static bool ofInterest(ExcelAddress addr) { var result = false; // Determine as you see fit. return result; } 

(请注意, ExcelAddress.Address属性是只读的,因此您必须将规则的Address属性设置为新的ExcelAddress对象。)