我无法使用任务调度程序来自动刷新excel工作表



我有一个python脚本,可以将值从一个excel粘贴到另一个excel,名为"Automate"。我已将值粘贴到Automate的工作表1中的特定单元格中,以便Automate中的工作表2可以读取值并应用公式。在"自动"中,我有一个宏,可以在保存之前将图纸2中的值上载到SQL。我使用openpyxl处理excel,函数wb.save(Automate.xlsxm(不运行宏。

我可以运行下面的代码来刷新qa并保存Automate,它还可以运行宏将值上传到SQL。但是,我必须手动运行脚本,并且当我使用任务调度程序运行脚本时,值不会将值从Automate上载到SQL。

import win32com.client                                                                                     
                                     
xlapp = win32com.client.gencache.EnsureDispatch("Excel.Application")                                       
wb = xlapp.Workbooks.Open('Automate.xlsm')             
wb.RefreshAll()                                                                                            
xlapp.CalculateUntilAsyncQueriesDone()                                                                     
wb.Save()                                                                                                  
wb.Close()                                                                                                 
wb = None                                                                                                  
xlapp.Quit()                                                                                               
xlapp = None 

将非常感谢您的帮助

Openpyxl不评估excel公式和宏,因为它实际上没有使用excel,也没有内置该功能。相反,我建议使用xlwings,它可以打开excel,并在打开时评估所有公式(如果设置为自动重新评估(。您也可以使用xlwings来运行宏,这里有一些示例。代码的大致轮廓是:

import openpyxl as op
import xlwings as xw
# Openpyxl open and write
wb_path = "Your_workbook.xlsm"
wb = op.load_workbook(wb_path)
ws = wb["Sheet1"]
# Write your values etc
# Save
wb.save(wb_path)
wb.close()
# Open with xlwings
wb = xw.Book(wb_path)
app = xw.apps.active
# Run macro
macro = wb.macro("YourMacro")
macro()
# Save, close
wb.save(wb_path)
app.quit()

最新更新