Вы также преобразовали столбец Time в объект pd.datetime
. 7, который вы видите, является частью даты (усеченной, чтобы показать только последнюю часть).
Если вы измените свои значения y на объекты Time, вы, скорее всего, получите то, что вам нужно. Например:
y7 = df.Time.dt.time.tolist()
Как только вы идентифицируете процесс по идентификатору процесса, вы можете получить 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» - это номер идентификатора процесса, который вы ищете. В противном случае код должен быть практически таким же, как приведенный в статье. (Игнорируйте тот факт, что его код написан для надстройки; этот аспект здесь не повлияет на ваши потребности, поэтому просто проигнорируйте его.
Записи ROT не помечены CLSID. ROT возвращает DWORD из реестра, который используется в качестве идентификатора для отмены регистрации. Я сталкивался с этой проблемой раньше, и единственный способ, который я решил, - это загрузить какую-нибудь надстройку в каждый Excel, с которой вы можете напрямую общаться.
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», где идентификатор процесса равен определенному значению.