문제

아래 코드는 다음을 수행합니다.범위를 취한 다음 범위에서 뚜렷한 값을 찾은 다음 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;                        
}

그런데 작동이 너무 느려요...사용자는 약 1분 동안 앉아서 기다려야 합니다...그 이후로 나는 이 방법으로 이 작업을 수행했습니다. 그렇지 않으면 단순히 이 작업을 수행하는 한 줄의 코드로 수행합니다(색상이 놀라울 정도로 빠릅니다).

range.FormatConditions.AddColorScale(3);

셀 색상은 문의 드릴 수 없습니다...(한 범위에는 10개 이상의 고유한 값이 있을 수 있습니다)

첫 번째 방법이 더 빠르게 작동하도록 도와주실 수 있나요?미리 감사드립니다!

도움이 되었습니까?

해결책

코드가 실행되는 동안 화면 업데이트를 끄고 나중에 다시 켜십시오. 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 지도를 위해

다른 팁

Office 2007에서 OpenXML SDK를 사용해 보셨나요?나는 그것을 단어로 사용했고 vba나 COM을 사용하는 것보다 훨씬 빠르다는 것을 알았습니다.노력하다 버전 2.0 또는 1.0.그래도 2.0은 여전히 ​​CTP라고 생각합니다.하지만 내 책에서는 vba보다 훨씬 직관적입니다.그렇지 않으면 화면 업데이트 트릭이 아마도 가장 쉬운 방법일 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top