/ / Jak uzyskać dostęp do stosu cofania w programie Excel z C # poprzez Office Interop? - c #, excel, ms-word, office-interop

Jak uzyskać dostęp do stosu cofania w programie Excel z C # przez Office Interop? - c #, excel, ms-word, office-interop

Buduję aplikację C #, która musi wchodzić w interakcjearkusz kalkulacyjny Excel za pośrednictwem Office Interop. Chciałbym uzyskać dostęp do pełnego stosu Cofnij, aby móc wykonać serię zmian w arkuszu, a następnie, jeśli to konieczne, wycofać je jeden po drugim. Rozumiem, że obiekt dokumentu programu Word w zespołach Interop ma funkcję UndoRecord, a niektóre inne funkcje, w tym funkcję Cofnij.Na przykład mogę wywołać Microsoft.Office.Interop.Word._Document.Undo () z parametrem do cofania wielu akcji. Z drugiej strony, Cofanie programu Excel wygląda na bardziej ograniczone . Oczywiście, jest tam Microsoft.Office.Interop.Excel._Application.Undo (), ale wykonuje tylko jedną akcję głęboko, a jeśli zostanie wywołana ponownie wykonuje "Ponów" zamiast iść głębiej w dół stosu.

Znalazłem kod online, w którym kodowane są programy VBAwłasne historie cofania dla programu Excel, ponieważ był to jedyny sposób uzyskania pożądanej funkcjonalności. Nie widzę czegoś podobnego dla C #, czy jest jakiś sposób naśladowania sposobu, w jaki operacja "Interop Cofnij" działa w Excelu?

Odpowiedzi:

3 dla odpowiedzi № 1

Niestety, to, co jest prawdziwe dla Worda, nie jest dla Excela. Prawdopodobnie dlatego, że o wiele więcej osób pisze Word VBA :). Zobacz John Walkenbach o to, co jest możliwe w Excel VBA (i współdziałaniu). Oto część jego opisu:

Niepoprawne działanie efektów podprogramównie jest automatyczny podprogram musi zapisać poprzedni stan, aby można go było przywrócić jeśli użytkownik wybierze polecenie Edytuj Undo. Sposób, w jaki to zrobisz będzie się różnić, w zależności od tego, co robi podprogram. W skrajnych przypadkach możesz trzeba zapisać cały arkusz roboczy. Jeśli twój podprogram modyfikuje zasięg, na przykład wystarczy zapisać zawartość tego zakresu.

EDYTOWAĆ:

Istnieje Application.Undo metoda, ale jest bardzo ograniczona. Oto opis z pomocy VBA Excel 2010:

Metoda Application.Undo

Anuluje ostatnią akcję interfejsu użytkownika.

Uwagi Ta metoda cofa tylko ostatnią akcję podjętą przez użytkownika przed uruchomieniem makra i musi to być pierwsza linia w makrze. Nie można go użyć do cofnięcia poleceń Visual Basic.

W odniesieniu do Interop, jestem pewien, że nie ma nic dostępnego, czego nie ma w VBA.