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