还有其他更快的方法吗?

时间:2009-06-17 17:20:58

标签: c# excel-vba excel excel-2007 vba

下面的代码执行以下操作:它需要一个范围,然后在一个范围内找到不同的值, 并将它们存储在d_distinct数组中,也为每个不同的值创建不同的颜色,然后使用Excel.FormatCondition为颜色范围着色...(我的当前范围是A1:HM232)

for (int t = 0; t < d_distinct.Length; t++ )
{                        
    Excel.FormatCondition cond =
        (Excel.FormatCondition)range.FormatConditions.Add(
        Excel.XlFormatConditionType.xlCellValue,
        Excel.XlFormatConditionOperator.xlEqual, 
        "="+d_distinct[t],
        mis, mis, mis, mis, mis);
    cond.Interior.PatternColorIndex = 
        Excel.Constants.xlAutomatic;
    cond.Interior.TintAndShade = 0;
    cond.Interior.Color = ColorTranslator.ToWin32(c[t]);
    cond.StopIfTrue = false;                        
}

但是效果太慢了...用户将不得不等待大约一分钟...我这样做是因为,否则,如果我用一行代码做这件事就是这样做(颜色令人惊讶)快)

range.FormatConditions.AddColorScale(3);

我将无法请求单元格的颜色...(我可以在一个范围内包含十个以上的不同值)

你可以帮助我让我的第一次工作更快吗?提前谢谢!

2 个答案:

答案 0 :(得分:0)

尝试在代码运行时关闭屏幕更新,然后再打开它。在VBA中,那将是:

Application.ScreenUpdating = False
// do stuff
Application.ScreenUpdating = True

由于您未使用VBA,请尝试使用http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel._application.screenupdating(office.11).aspx作为指导

答案 1 :(得分:0)

您是否尝试过使用OpenXML SDK与Office 2007配合使用?我用它来说话,发现它比使用vba或COM快得多。试试version 2.01.0。我认为2.0仍然是CTP。比我书中的vba更直观。否则,屏幕更新技巧可能是最容易做到的事情。