C # / VSTO: есть ли событие, которое срабатывает надежно при изменении данных на листе? - PullRequest
0 голосов
/ 09 декабря 2018

Мне известно о событии Worksheet.Change, которое «Происходит, когда что-то меняется в ячейках рабочего листа». По данным Microsoft.Проблема в том, что это не так.Он срабатывает при редактировании ячейки, при удалении содержимого ячейки или при удалении или вставке строк или столбцов.

Но существует несколько способов, с помощью которых лист может изменяться без запуска события, например, если данные на листе отсортированы.

Я нашел способ отслеживать, когда фильтриспользуется функция, и пользователь меняет столбец сортировки или направление.Он включает в себя периодическое сравнение свойств листа с их предыдущими значениями, и он ужасно грязный и хакерский, но это работает, что угодно.

Но кнопка «Сортировка» на вкладке «Данные» ускользает от меня, потому что она, похоже, не связана с какими-либо Worksheet свойствами или событиями.Лучшее решение, которое я придумала до сих пор, - это периодически читать и перечитывать блоки ячеек, чтобы вручную проверить, что-то меняется.Это не совсем удовлетворительно.

Пожалуйста, помогите.

Кстати, я ошибаюсь, считая, что Microsoft уже более или менее отказалась от VSTO?

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

посмотрите на событие вычисления на листе, или, если вы используете именованный диапазон, используйте событие изменения этого указанного диапазона.

0 голосов
/ 10 декабря 2018

Если вы хотите понять VSTO, вам следует взглянуть на структуру объекта EXCEL.

Например, в Excel вы можете использовать редактор макросов для записи различных случаев.После этого вы можете увидеть в файле макроса, что сделал Excel.

В VSTO вы сможете использовать почти одинаковые события.В вашем случае вы можете посмотреть событие Workbook_SheetSelectionChange -.Если вы хотите узнать, изменилось ли что-либо в вашей рабочей книге, вы также можете обработать событие Workbook_BeforeClose - Event и проверить, является ли метод ActiveWorkbook.Saved - True или false.

Вот небольшой пример для события VSTOдля Workbook_BeforeClose (https://social.msdn.microsoft.com/Forums/office/en-US/9f96e186-dddb-44a9-ac99-ab0ebef846b3/save-workbook-event-in-excel-vsto-application?forum=exceldev)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...