2012-08-08 53 views
3

我想用下面的代码添加使用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也被在该小区中应用。

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

任何人都可以帮助我。

回答

1

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

考虑这个例子。 (TESTED AND TRIED

下面的代码创建一个新的工作簿,并在工作表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

enter image description here

快照2

enter image description here

+0

亚洲时报Siddharth您好。如上所述,我的问题是可能有一些格式已经应用在该单元格上,并且可能会在执行代码后添加一些格式。在这种情况下,如果我尝试删除xlWorkSheet.Cells [1,1] .formatconditions(1).delete();那么它可能会删除错误的格式。我不确定我想要删除的格式是否在第一位。 – 2012-08-08 11:50:13

+2

同意,因此当你添加一个格式,格式编号存储在变量或循环通过每种格式,并与您的要求相匹配,如果这是正确的,然后删除它 – 2012-08-08 11:57:08

+0

嗨siddharth上述逻辑工作正常,如果所有条件格式是通过C#代码应用的。如果某个条件格式化(CF)已经存在于该范围内,那么在删除之后它不会删除CF,并且它还会修改应用到的范围以调用删除。至于我所了解的,它将它改为了应用范围虽然优于范围从代码删除的交集。我不知道为什么会发生这种情况。 – 2012-08-17 12:48:31