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 № 1Niestety, 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.