Как открыть Excel через C # и дать Excel фокус - PullRequest
0 голосов
/ 29 февраля 2012

В моей программе я хочу открыть файл Excel и дать ему фокус.

Я использую process.Start () для этого, он работает только при первом открытии Excel, запускает Excelи сфокусируйтесь на этом.

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

Я пытался использовать Windows API, чтобы получить окно и установить фокус, но при открытии второго Excel возникло исключение:

process.MainWindowHandle = 'process.MainWindowHandle' threw an exception of type 'System.InvalidOperationException'

Кто-нибудь может мне помочь с этим?Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 29 февраля 2012

Скорее всего, вам просто нужно позвонить WaitForInputIdle, прежде чем пытаться получить доступ к MainWindowHandle. Это подождет, пока Excel не запустится достаточно, чтобы выделить дескриптор главного окна.

Еще одна вещь, которая сейчас приходит мне в голову, это то, что в Excel может не хватить одного процесса. Поэтому, когда вы делаете Process.Start() во второй раз, на самом деле происходит то, что второй процесс передает запрос первому процессу, а затем немедленно выключается. Вы можете использовать диспетчер задач, чтобы проверить эту гипотезу. Если я прав, используйте Process.GetProcesses(), чтобы получить список всех запущенных процессов, найти процесс Excel и выделить основное окно.

0 голосов
/ 29 февраля 2012

Вместо того, чтобы напрямую обращаться к Excel, просто укажите свой файл Excel в качестве имени файла и убедитесь, что он настроен на использование ShellExecute. Это загрузит его так же, как двойной щелчок в проводнике. Он также имеет преимущество работы с другими зрителями Excel.

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