appium + pyautogui + win32gui for python で、excelの保護ビューを解除する - end0tknr's kipple - 新web写経開発
当初、excelシートに配置された実行ボタンをクリックすることで、 マクロを実行しようとしましたが、appium や pywinauto で、ボタンを探索できなかった為、 excelマクロに対し、ショートカット実行(今回の場合、CTRL+I)を設定し、実行。
# -*- coding: utf-8 -*- from appium import webdriver from selenium.webdriver.common.keys import Keys import pyautogui import win32gui import time def main(): ## appiumで、アプリ起動 desired_caps = {} desired_caps["app"] = r"c:\Users\end0t\Downloads\ないしょ_DEV_MACRO.xlsm" driver = webdriver.Remote( command_executor='http://127.0.0.1:4723', desired_capabilities= desired_caps) ## win32guiで、対象のアプリを探索 time.sleep(2) app_handle = win32gui.FindWindow(None, "ないしょ_DEV_MACRO.xlsm \[保護ビュー\] - Excel") print("APP HANDLE 0:",app_handle) ## pyautoguiで、ショートカット(ALT→F→I→E)を送信し、保護ビューを解除 if app_handle > 0 : pyautogui.press('alt') time.sleep(1) pyautogui.press('F') time.sleep(1) pyautogui.press('I') time.sleep(1) pyautogui.press('E') time.sleep(2) ## pyautoguiで、ショートカット(CTRL+I)を送信し、マクロ実行 ## (CTRL+Iのショートカットは、EXCEL上でALT+F8により設定画面表示) app_handle = win32gui.FindWindow(None, "最適テリトリー_DEV_MACRO.xlsm - Excel") print("APP HANDLE 1:",app_handle) if app_handle > 0 : pyautogui.hotkey('ctrl','i') ## とあるセルに値を入力 ## (CTRL+Iのショートカットは、EXCEL上でALT+F8により設定画面表示) xpath_str = \ "".join(["/Pane[@Name=\"デスクトップ 1\"][@ClassName=\"#32769\"]", "/Window[@Name=\"ないしょ_DEV_MACRO.xlsm - Excel\"][@ClassName=\"XLMAIN\"]", "/Pane[@ClassName=\"XLDESK\"]", "/Tab[@Name=\"ないしょ_DEV_MACRO.xlsm\"][@ClassName=\"EXCEL7\"]", "/TabItem[@Name=\"シート 数_旬別\"]", "/DataGrid[@Name=\"グリッド\"]/DataItem[@Name=\"B1\"]"]) try: xls_cell = driver.find_element_by_xpath(xpath_str) xls_cell.click() xls_cell.send_keys("HOGE FOO") time.sleep(5) except Exception as e: pass ## version check画面が単に見つからない場合、無視して進みます ## 終了 driver.quit() if __name__ == '__main__': main()
マクロ設定画面は、ALT + F8 で起動。
参考