【问题标题】:Deleting a ConditionalFormat删除条件格式
【发布时间】:2012-08-08 06:03:26
【问题描述】:

我正在尝试使用 C# 和以下代码添加条件格式。

Microsoft.Office.Interop.Excel.FormatCondition formatConditionObj = null;

formatConditionObj = (Microsoft.Office.Interop.Excel.FormatCondition)myRange
.FormatConditions.Add(Excel.XlFormatConditionType.xlExpression, 
Type.Missing, true, Type.Missing, Type.Missing, Type.Missing, 
Type.Missing, Type.Missing);

formatConditionObj.Interior.ColorIndex = 5;

我动态地更改应用这些格式的范围

formatConditionObj.ModifyAppliesToRange(NewRange);

现在我想删除这种应用的格式如何实现。

formatConditionObj.Delete();

这对我不起作用。这不会删除应用它的所有单元格的格式。仅删除最后的单元格格式。

我也尝试过使用

formatConditionObj.AppliesTo.Delete();

但它会删除也应用于该单元格的其他 ConditionalFormats。

注意:某些格式已应用于应用此条件格式的单元格,例如某些填充颜色。甚至还有一些其他条件格式应用于某些单元格。我只想删除这个特定的 ConditionalFormat(formatConditionObj)。

谁能帮帮我。

【问题讨论】:

    标签: c# excel vsto conditional-formatting


    【解决方案1】:

    当单元格中有多个条件时,您不能删除这样的格式条件。您必须通过它的编号来处理条件格式才能删除它。

    考虑这个例子。 (经过测试和尝试

    以下代码创建一个新工作簿,并在工作表 1 中在单元格 A1 中创建 2 个格式条件。在创建 2 个条件后,应用程序将暂停并显示一个消息框。转到 Excel 并手动检查创建的条件格式。 (快照 1)。完成后,单击消息框中的OK。然后代码将删除条件 1,然后通过显示一个消息框再次暂停。转到 Excel 并手动检查条件格式。您会注意到只剩下一种(准确地说是第二种)条件格式。 (快照 2)

        private void btnSearch_Click(object sender, EventArgs e)
        {
            Microsoft.Office.Interop.Excel.Application xlexcel;
            Microsoft.Office.Interop.Excel.Workbook xlWorkBook;
            Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet;
    
            xlexcel = new Excel.Application();
            xlexcel.Visible = true;
    
            //~~> Add a File
            xlWorkBook = xlexcel.Workbooks.Add();
            xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
    
            //~~> Create 2 Conditions
            xlWorkSheet.Cells[1, 1].FormatConditions.Add( 1,5,"=5");
            xlWorkSheet.Cells[1, 1].FormatConditions.Add(1, 5, "=10");
    
            MessageBox.Show("Wait");
            //~~> Now if you check the Excel file, Cell A1 has two conditional formats.
            //~~> See Snapshot 1
    
            //~~> Delete the first condition
            xlWorkSheet.Cells[1, 1].formatconditions(1).delete();
    
            MessageBox.Show("Wait");
            //~~> Now if you check the Excel file, Cell A1 has only 1 conditional format.
            //~~> See Snapshot 2
        }
    

    快照 1

    快照 2

    【讨论】:

    • 嗨,悉达多。如前所述,我的问题是可能已经在该单元格上应用了一些格式,并且可能在执行代码后添加了一些格式。在这种情况下,如果我尝试删除 xlWorkSheet.Cells[1, 1].formatconditions(1).delete();那么它可能会删除错误的格式。我不确定我要删除的格式是否会排在第一位。
    • 同意,因此当您添加格式时,将格式编号存储在变量中或循环遍历每种格式并使其与您的要求相匹配,如果这是正确的,则将其删除
    • 嗨 siddharth,如果所有条件格式都通过 C# 代码应用,那么上述逻辑对我来说可以正常工作。如果该范围上已经存在某些条件格式(CF),则在删除后它不会删除 CF,并且它还会修改应用于调用删除的范围。据我了解,它将其更改为通过 excel 应用的范围与从代码中删除范围的交集。我不确定为什么会这样。
    【解决方案2】:

    formatConditionObj.Delete();

    这对我不起作用。 ...仅删除最后的单元格格式。

    我没有看到。如果我坚持参考,我可以打电话给Delete,它可以工作。这是我的测试,其中一个范围包含不同的单元格。然后我格式化,等待,删除。

    【讨论】:

      猜你喜欢
      • 2017-03-03
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-28
      相关资源
      最近更新 更多