La popolazione e la formattazione del foglio di lavoro Excel è lenta

1

Ho scritto un plugin VSTO in C # che popola diversi fogli di lavoro.

Durante il processo di popolazione i valori o la formula della cella vengono aggiunti uno alla volta in base a criteri definibili dall'utente tratti da un foglio di lavoro di configurazione nascosto.

In genere ci sono 200 righe con circa 50 colonne, contenenti la formula SUMPRODUCT, CERCA.VERT, ecc.

Anche le celle sono formattate e alcune hanno una formattazione condizionale.

Dirai "sembra lento" - giusto? Hai ragione.

Anche se il display e il calcolo automatico vengono disattivati durante la popolazione, questo richiede sempre un'eternità sulla workstation standard del mio cliente (processore i5, RAM da 4 GB).

Ad esempio, l'aggiunta di 10 righe richiede in genere circa 15 minuti su quelle workstation, ma sul mio PC di sviluppo (processore i7, ram da 16 gb) posso eseguire 200 righe in 2 minuti.

Apprezzo che il problema di velocità sia molto probabilmente correlato alle numerose chiamate RPC che avvengono mentre ogni cella viene modificata.

Di conseguenza, ho cercato un modo per farlo in modo più efficiente e ho trovato un modo per popolare un array di oggetti con valori, quindi copiare questi en-mass in un foglio di lavoro.

Purtroppo non esiste questa opzione quando il foglio di lavoro contiene principalmente formula e non risolve i problemi di formattazione.

Quello che mi chiedo è, ci sono delle alternative qui? C'è un modo per disattivare le chiamate RPC mentre il foglio di lavoro è compilato? C'è un oggetto che posso ereditare da quello che posso usare in un array per costruire una copia offline del foglio di lavoro e poi copiare en-mass nel foglio di lavoro?

Sono abbastanza sicuro che ogni suggerimento che puoi fornire aggiungerà al mio serbatoio di idee, così grato a tutti coloro che possono sfruttare informazioni preziose!

    
posta CompanyDroneFromSector7G 21.04.2015 - 11:19
fonte

1 risposta

1

Dopo diverse modifiche, le prestazioni sono perfettamente accettabili ora.

Ci sono alcune cose da tenere sempre a mente per le migliori prestazioni quando si effettuano un gran numero di modifiche a un foglio di lavoro:

  1. imposta i calcoli su manuale (ripristina dopo)

  2. disattiva gli aggiornamenti dello schermo (e riaccendi dopo)

  3. se elimini dati da un numero elevato di righe, elimina intere righe, se possibile, molto più velocemente dell'eliminazione di alcune colonne e spostandole verso il basso

  4. se inserisci un numero elevato di righe, valuta se puoi semplicemente aggiornare le righe sottostanti anziché inserirne di nuove. Se la conservazione dei formati è un problema, copia i formati esistenti nelle nuove righe con FillDown .

risposta data 26.04.2015 - 14:02
fonte

Leggi altre domande sui tag