Я пишу надстройку VSTO для Excel, и я заметил, что если я заблокирую лист и защищу его паролем (так что только моя надстройка может писать на него, но пользователь может просматривать его), если пользователь пытается отредактировать лист, который появляется во всплывающем окне «Этот лист заблокирован». Если в то время как это приглашение все еще ожидает ввода пользователя, надстройка пытается записать на лист, Excel вылетает. Запись на лист включает снятие защиты, запись данных и их последующую блокировку. Надстройка захватывает данные из внешнего источника через последовательный порт, поэтому данные могут быть записаны в любое время.
Для воссоздания:
1. Блокировка листа с надстройкой.
2. Пользователь пытается редактировать содержимое листа
3. Пользователям предлагается не редактировать содержимое листа, поскольку он заблокирован.
4. Данные поступают в последовательный порт, и надстройка пытается разблокировать, записать данные и заблокировать лист до того, как у пользователя появится возможность подтвердить выданное приглашение.
5. Excel байт пыль.
Есть предложения? Я играл с идеей сохранения скрытого «основного» листа и видимого листа и просто использовал формулу Excel или именованный диапазон для ссылки на скрытый лист. Однако тогда это будет открыто для редактирования и потенциального повреждения данных пользователем. Данные должны быть максимально недоступны для редактирования.
Обновление: я был бы удовлетворен перехватом COMException, чтобы он не убивал Excel, однако общий "catch (Exception ex)", похоже, не помогает.