Как получить экземпляр Excel или экземпляр Excel CLSID использование идентификатора Процесса?

Вы также преобразовали столбец Time в объект pd.datetime. 7, который вы видите, является частью даты (усеченной, чтобы показать только последнюю часть).

Если вы измените свои значения y на объекты Time, вы, скорее всего, получите то, что вам нужно. Например:

y7 = df.Time.dt.time.tolist()

12
задан Vic 20 April 2009 в 21:27
поделиться

3 ответа

Как только вы идентифицируете процесс по идентификатору процесса, вы можете получить Process.MainWindowHandle и затем использовать его вместе с AccessibleObjectFromWindow API чтобы получить доступ к объектной модели Excel для этого процесса.

В статье Получение объекта приложения в Shimmed Automation Add-in Эндрю Уайтчепелом подробно описывается этот метод, а также приведен пример кода.

Код ключа в этой статье для вас начинается со строки:

int hwnd = (int)Process.GetCurrentProcess().MainWindowHandle

, которая в вашем случае может выглядеть примерно так:

int excelId = 1234; // Change as appropriate!
int hwnd = (int)Process.GetProcessById(excelId).MainWindowHandle

где «excelId» - это номер идентификатора процесса, который вы ищете. В противном случае код должен быть практически таким же, как приведенный в статье. (Игнорируйте тот факт, что его код написан для надстройки; этот аспект здесь не повлияет на ваши потребности, поэтому просто проигнорируйте его.

12
ответ дан 2 December 2019 в 22:05
поделиться

Записи ROT не помечены CLSID. ROT возвращает DWORD из реестра, который используется в качестве идентификатора для отмены регистрации. Я сталкивался с этой проблемой раньше, и единственный способ, который я решил, - это загрузить какую-нибудь надстройку в каждый Excel, с которой вы можете напрямую общаться.

2
ответ дан 2 December 2019 в 22:05
поделиться
using System.Diagnostics;

   var eProcess = from p in Process.GetProcessesByName("EXCEL")
                   where p.Id == 3700 //whatever Id you have...
                   select p;

    foreach (var process in eProcess)
        process.Kill();

При этом получаются все процессы с именем «EXCEL», где идентификатор процесса равен определенному значению.

-3
ответ дан 2 December 2019 в 22:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: