2013-11-26 1 views
1

Я создаю приложение C#, которое необходимо взаимодействовать с электронной таблицей Excel через Office Interop. Я хотел бы получить доступ к полному столу Undo, чтобы я мог сделать серию изменений на листе, а затем, если необходимо, перевернуть их по одному. Я вижу, что объект Word Document в сборках Interop имеет UndoRecord и некоторые другие тонкости, в том числе функцию Undo. Например, я могу вызвать Microsoft.Office.Interop.Word._Document.Undo() с параметром, чтобы отменить несколько действий. С другой стороны, Excel Undo-материал выглядит намного более ограниченным. Конечно, есть Microsoft.Office.Interop.Excel._Application.Undo(), но он идет только по одному действию, и если вызываемый снова выполняет «Повторить», вместо того, чтобы идти глубже в стек.Как получить доступ к стеку отмены в Excel с C# через Office Interop?

Я нашел код онлайн, где разработчики VBA закодировали свои истории Undo для Excel, потому что это был единственный способ получить желаемую функциональность. Однако я не вижу ничего подобного для C#. Есть ли способ имитировать способ отмены Word Interop в Excel?

ответ

3

Увы, что верно для Word не для Excel. Наверное, потому что так много людей пишут Word VBA :). См. Это John Walkenbach page для того, что возможно в Excel VBA (и interop). Вот часть его описания:

Выполнение действия ваших подпрограмм отменено не является автоматическим. Ваша подпрограмма должна будет сохранить предыдущее состояние, чтобы ее можно было восстановить , если пользователь выберет команду «Отменить отмену». Как вы это сделаете, будет в зависимости от того, что делает подпрограмма. В крайних случаях, вы можете необходимо сохранить весь рабочий лист. Если ваша подпрограмма изменяет диапазон, например, , вам нужно сохранить только содержимое этого диапазона.

EDIT:

Существует метод Application.Undo, но это очень ограничено. Вот описание из Excel 2010 VBA справки:

Application.Undo Метод

Отменяет последнее действие пользовательского интерфейса.

Замечания Этот метод отменяет только последнее действие, предпринятое пользователем перед запуском макроса, и оно должно быть первой строкой макроса. Он не может использоваться для отмены команд Visual Basic.

Что касается специально для Interop, я уверен, что нет ничего доступного, что не в самом VBA.

+0

Как насчет действий, предпринятых пользователем? Нет ли способа открыть рабочий лист через Interop, ввести пользователя в ячейки и т. Д., А затем программно отменить его действия? – RedBrogdon

+0

См. Мое редактирование. –

Смежные вопросы