C# 如何使用EPPlus删除单元格或区域的条件格式

C# 如何使用EPPlus删除单元格或区域的条件格式,c#,vb.net,excel,epplus,C#,Vb.net,Excel,Epplus,有没有办法用EPPlus从单元格或区域中删除条件格式?我尝试过清除、重置、删除行、插入行、复制单元格而不设置格式,但都没有效果。有很多方法可以从工作表(worksheet.RemoveAll或RemoveAt)中删除所有条件格式,但不能从我在任何地方都能找到的单元格或区域中删除。经过进一步研究,我找到了一种方法,可以查看openxml规范,检查、更改或删除单元格或区域的条件格式。条件格式存储在工作表中,范围位于属性sqref下。因此,您可以编辑该范围或添加新的 例如: DIM p As New

有没有办法用EPPlus从单元格或区域中删除条件格式?我尝试过清除、重置、删除行、插入行、复制单元格而不设置格式,但都没有效果。有很多方法可以从工作表(worksheet.RemoveAll或RemoveAt)中删除所有条件格式,但不能从我在任何地方都能找到的单元格或区域中删除。

经过进一步研究,我找到了一种方法,可以查看openxml规范,检查、更改或删除单元格或区域的条件格式。条件格式存储在工作表中,范围位于属性sqref下。因此,您可以编辑该范围或添加新的

例如:

DIM p As New ExcelPackage(New FileInfo(ExlReportPath), True)
Dim ws As ExcelWorksheet = p.Workbook.Worksheets(ExlSheetName)
'--查找节点“工作表”(在我的示例中为1),查找所有子节点“条件格式”(在我的测试中为5到11)

“--您得到:条件格式

“--现在您可以检查范围:

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,“打开XML解释标记”。我发现它很有用,完整的文档是在线的(免费的)

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


关于

您可以将每个规则的
地址
属性设置为一个新的
ExcelAddress
对象,该对象的地址省略了相关的单元格或子范围,例如---

---根据您的兴趣定义
,例如:

static bool ofInterest(ExcelAddress addr)
{
    var result = false; // Determine as you see fit.
    return result;
}
(请注意,
ExcelAddress.Address
属性是只读的,因此必须将规则的
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);
}
static bool ofInterest(ExcelAddress addr)
{
    var result = false; // Determine as you see fit.
    return result;
}