/ / Come accedere allo stack di annullamento in Excel da C # tramite Office Interop? - c #, excel, ms-word, office-interop

Come accedere allo stack di annullamento in Excel da C # tramite Office Interop? - c #, excel, ms-word, office-interop

Sto costruendo un'app C # con cui è necessario interagireun foglio di calcolo di Excel tramite Office Interop. Mi piacerebbe accedere allo stack Undo completo in modo da poter apportare una serie di modifiche al foglio di lavoro e poi ripristinarle una alla volta se necessario. Vedo che l'oggetto Document Word negli assembly di Interop ha UndoRecord e alcuni altre sottigliezze, inclusa una funzione di annullamento.Per esempio, posso chiamare Microsoft.Office.Interop.Word._Document.Undo () con un parametro per annullare più azioni. Le cose di annullamento di Excel, d'altra parte, sembrano molto più limitate . Certo, c'è Microsoft.Office.Interop.Excel._Application.Undo (), ma fa solo una azione in profondità, e se chiamato di nuovo esegue un "Ripeti" invece di andare più in basso nello stack.

Ho trovato il codice online in cui gli sviluppatori di VBA hanno codificatole proprie cronologie di annullamento per Excel perché quello era l'unico modo per ottenere la funzionalità desiderata. Però non vedo nulla di simile a C # C'è un modo per imitare il modo in cui la funzione di annullamento di Interop di Word funziona in Excel?

risposte:

3 per risposta № 1

Ahimè, ciò che è vero per Word non è per Excel. Probabilmente perché così tante altre persone scrivono Word VBA :). Guarda questo Pagina di John Walkenbach per ciò che è possibile in Excel VBA (e interop). Ecco parte della sua descrizione:

Rendere annullabili gli effetti delle tue subroutinenon è automatico la subroutine dovrà memorizzare lo stato precedente in modo che possa essere ripristinato se l'utente sceglie il comando Modifica Annulla. Come lo fai, varierà, a seconda di cosa fa la subroutine. In casi estremi, potresti è necessario salvare un intero foglio di lavoro. Se la subroutine modifica un intervallo, per esempio, devi solo salvare il contenuto di quell'intervallo.

MODIFICARE:

C'è la Application.Undo metodo, ma è molto limitato. Ecco la descrizione della guida VBA di Excel 2010:

Metodo Application.Undo

Annulla l'ultima azione dell'interfaccia utente.

Note Questo metodo annulla solo l'ultima azione eseguita dall'utente prima di eseguire la macro e deve essere la prima riga nella macro. Non può essere utilizzato per annullare i comandi di Visual Basic.

Per quanto riguarda specificamente Interop, sono sicuro che non è disponibile nulla che non sia in VBA stesso.