Есть ли другой быстрый способ сделать это - PullRequest
0 голосов
/ 17 июня 2009

ниже кода делает следующее: он принимает диапазон, затем находит различные значения в диапазоне, и сохраняет их в массиве 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 голосов
/ 18 июня 2009

Вы пытались использовать OpenXML SDK для работы с Office 2007? Я использовал его для слова и нашел его гораздо быстрее, чем с помощью VBA или COM. Попробуйте версия 2.0 или 1.0 . Я думаю, что 2.0 все еще CTP, хотя. Гораздо более интуитивно понятный, чем VBA в моей книге. В противном случае, трюк с обновлением экрана, вероятно, проще всего сделать.

0 голосов
/ 18 июня 2009

Попробуйте отключить обновление экрана во время выполнения кода и затем включите его снова. В 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 для руководства

...