Запрещение пользователям использовать экземпляр Excel - PullRequest
1 голос
/ 30 августа 2011

Я использую Microsoft.Office.Interop.Excel для создания отчетов Excel с C #.Эти отчеты имеют большое количество графики и занимают много времени на подготовку.Во время подготовки экземпляр приложения Excel, который использует моя программа, скрыт от пользователя.

МОЯ проблема в том, что Microsoft Office имеет тенденцию автоматически обмениваться экземплярами приложения.Если пользователь открывает книгу Excel, Excel попытается найти работающий экземпляр Excel и открыть документ оттуда.Когда пользователь пытается открыть книгу Excel во время работы моей программы, он присоединяется к экземпляру, который использует моя программа.

Это создает две проблемы.Во-первых, это заставляет мои отчеты быть видимыми, прежде чем они должны стать видимыми.И, во-вторых, моей программе теперь нужно бороться с пользователем за внимание экземпляра Excel - и моя программа обычно проигрывает.

Итак, есть ли способ заставить экземпляр Excel отклонять запросы (от пользователя.должен все еще подчиняться моей программе) открывать документы и заставлять Office игнорировать мой экземпляр, когда ему нужно решить, как открыть документ Excel?

Ответы [ 3 ]

1 голос
/ 30 августа 2011

Вы можете использовать NPOI, я предлагаю вам посетить следующую ссылку

http://npoi.codeplex.com/discussions/36157?ProjectName=npoi

1 голос
/ 30 августа 2011

Вы можете обработать событие Application.WorkbookOpen .Здесь можно либо запустить второй экземпляр Excel и открыть его, либо закрыть книгу с сообщением об ошибке.

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

0 голосов
/ 14 марта 2013

Я немного поэкспериментировал и думаю, что это сработает:

Всякий раз, когда вы начинаете работать с Excel, создайте два экземпляра и работайте со вторым. Когда вы закончите свою работу, удалите второй экземпляр и его объект, затем проверьте свойство «UserControl» первого. Если он возвращает «true», то удаляет только объект, но оставляет процесс для этого экземпляра позади. Если он возвращает «false», то также удалите экземпляр.

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

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