如何使用EPPlus删除单元格或区域的条件格式
本文关键字:区域 条件 格式 单元格 何使用 EPPlus 删除 | 更新日期: 2023-09-27 18:02:16
是否有办法从单元格或范围中删除条件格式?我尝试过清除,重置,删除行,插入行,复制单元格而不格式化,但没有任何作用。有几种方法可以从工作表中删除所有条件格式。RemoveAll或RemoveAt),但不是从单元格或范围,我已经能够找到任何地方。
经过更多的研究,我发现了一种检查、更改或删除单元格或区域的条件格式的方法,可以查看openxml规范。条件格式存储在工作表中,其范围在属性sqref下。因此,您可以编辑该范围或添加一个新的。
例如:DIM p As New ExcelPackage(New FileInfo(ExlReportPath), True)
Dim ws As ExcelWorksheet = p.Workbook.Worksheets(ExlSheetName)
——查找节点"工作表"(在我的情况下是1),查找所有子节点"conditionalFormatting"(在我的测试中是5到11)
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中检查规则本身…
如果你需要更多的标记细节,谷歌Wouter van Vugt,"Open XML the markup explained"。我发现它很有用,完整的文档在网上(免费)。
如果你找到一个更简单的方法,请贴出来。
对
您可以将每个规则的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
对象)