下面的代码执行以下操作:它获取一个范围,然后在范围内查找不同的值、 并将它们存储在 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);

我无法要求电池的颜色......(我可以在一个范围内有十多个不同的值)

你能帮助我让我的第一种方法更快吗?提前致谢!

有帮助吗?

解决方案

尝试在代码运行时关闭屏幕更新,然后再将其重新打开。在 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 寻求指导

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top