c'è un altro modo più veloce per farlo
-
06-07-2019 - |
Domanda
il codice seguente esegue quanto segue: prende un intervallo, quindi trova valori distinti in un intervallo, e li memorizza in un array d_distinct, anche per ogni valore distinto crea il colore distinto, quindi usando Excel.FormatCondition colora l'intervallo ... (il mio intervallo attuale è 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;
}
Ma funziona troppo lentamente ... l'utente dovrà sedersi e aspettare circa un minuto ... L'ho fatto in questo modo da allora, altrimenti se lo faccio con una riga di codice semplicemente facendo questo (che colora incredibilmente veloce)
range.FormatConditions.AddColorScale(3);
Non sarò in grado di richiedere il colore della cella ... (posso avere più di dieci valori distinti in un intervallo)
puoi aiutarmi a far funzionare il mio primo modo più velocemente? grazie in anticipo!
Soluzione
Prova a disattivare l'aggiornamento dello schermo mentre il codice è in esecuzione e riattivalo in seguito. In VBA, sarebbe:
Application.ScreenUpdating = False
// do stuff
Application.ScreenUpdating = True
Dato che non stai usando VBA, prova http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel._application.screenupdating (office.11) .aspx per orientamento
Altri suggerimenti
Hai provato a utilizzare l'SDK OpenXML per lavorare con Office 2007? L'ho usato per parola e l'ho trovato molto più veloce rispetto all'utilizzo di vba o COM. Prova versione 2.0 o 1.0 . Penso che 2.0 sia comunque CTP. Molto più intuitivo di vba nel mio libro però. Altrimenti, il trucco di aggiornamento dello schermo è probabilmente la cosa più semplice da fare.