Скрытие открытого файла Excel - PullRequest
4 голосов
/ 08 июня 2011

вот мой вопрос:

Я разработал программу, которая использует компоненты Microsoft.Excel COM для чтения / записи поверх файлов Excel. Что ж, мое приложение работает хорошо, но когда я открываю, например, другой файл непосредственно в Excel во время работы моей программы, файлы, используемые моим приложением, появляются в Excel. Я не хочу это. Я пробовал также свойство Visibility класса приложения Excel, но это не было решением, оно просто не работает.

ПРИМЕЧАНИЕ. Я проверил этот вопрос.

Ограничить доступ к файлу Excel, открытому программой C #

Тем не менее, он говорит, что на самом деле нет правильного решения.

Ответы [ 2 ]

3 голосов
/ 08 июня 2011

Вы можете использовать Application.IgnoreRemoteRequests = true.Это позволит избежать открытия пользователями файлов Excel в том же Excel процессе, что и тот, который вы используете.

Однако есть одно предостережение: вы должны убедиться, что все пути выполнения вашего приложения сбрасывают это свойство в false.Это свойство НЕ будет сбрасываться само по себе, когда вы выйдете и отпустите приложение Excel, что означает, что Excel не будет правильно отвечать последующему пользователю, который, например, дважды щелкнет по файлу * .xls.

РЕДАКТИРОВАТЬ: возможные проблемы с IgnoreRemoteRequest

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

При установке IgnoreRemoteRequests = true вы должны обязательно сбросить это свойство ПЕРЕД выходом и / или выпуском приложения COM Excel.Если вы этого не сделаете, Excel не будет отвечать на запросы DDE, что означает, что если кто-то дважды щелкнет файл * .xls, файл не откроется (Excel запустится, но не откроет файл автоматически).

Однако это верно только в том случае, если вы выходите из приложения и / или выпускаете его без сброса свойства.Вам просто нужно убедиться, что где бы вы ни находились в своем коде, который вы выходите / сбрасываете, вы устанавливаете IgnoreRemoteRquests обратно на false раньше.

Если ваше приложение аварийно завершает работу и оно не былов состоянии очистить (необработанное исключение), тогда процесс EXCEL продолжит выполняться (если он невидим, вы увидите его только в диспетчере задач).Это нормально, так как у вашего приложения не было возможности выйти и выпустить внутренний используемый Excel.Это, однако, не является проблемой.Если пользователь игнорирует этот «просочившийся» процесс Excel до тех пор, пока он в конечном итоге не будет убит при следующей перезагрузке или чем-либо еще, или вручную убьет его с панели задач, Excel будет работать отлично.

Примечание: MS Excel 2007. Незнать о поведении предыдущих версий.

0 голосов
/ 08 июня 2011

Вы пытались запустить вашу программу под служебной учетной записью? Это должно исключать влияние объекта Excel com на экземпляр, используемый зарегистрированным пользователем консоли, поэтому они не увидят эффектов ваших объектов com. Вероятно, также лучше применять меры безопасности для запуска приложений типа COM под учетной записью службы вместо учетной записи пользователя, но это уже другой вопрос.

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