最近有一个自动化需求,实现的是:从SAP某些模块导出电子表格到本地,难点是实现excel临时文件的另存为,SAP导出的方式打开一个excel临时文件,然后往里写入数据,写好后需要另存excel临时文件,如果不另存为,SAP就直接关闭了临时文件,导出的数据也就消失了。
吐槽:SAP太不智能了,导出文件功能就直接导出一个文件,让我们另存为最好了,这个模块就非得打开excel然后往里写数据,关键是它不给我们保存,得让我们自己在excel上另存为。
解决办法:用python的pyautogui库,模拟键盘鼠标操作excel临时文件的另存为。
import win32gui
import pyautogui
# 获得excel临时文件的句柄
handle = win32gui.FindWindow(None, "工作簿1 - Excel")
# 激活并显示窗口。
win32gui.ShowWindow(handle, win32con.SW_RESTORE)
win32gui.EnableWindow(handle, True)
win32gui.SetForegroundWindow(handle)
time.sleep(1)
# 鼠标移动到屏幕中央并点击
# 上一块我们激活了窗口,这一块鼠标点击excel,目的还是确认操作excel,也可以不加这一块
screenWidth, screenHeight = pyautogui.size()
pyautogui.moveTo(screenWidth/2, screenHeight/2)
pyautogui.click()
# 点击另存为的快捷键
pyautogui.press('f12')
# 清空初始文件名
pyautogui.press('backspace')
# 输入文件名,注意press是一个键一个键的按,所以要把文件名拆成一个一个字母的
file_name = list("inline2020-03-06.xlsx")
pyautogui.press(file_name)
# 回车,实现保存
pyautogui.press('enter')
# 关闭excel文件
pyautogui.hotkey('ctrl', 'w')