我有一个python脚本,可以将值从一个excel粘贴到另一个excel中,叫做'Automate‘。我已经将值粘贴到Automate的工作表1中的特定单元格,以便Automate中的工作表2可以读取这些值并应用公式。在Automate中,我有一个宏可在保存之前将工作表2中的值上载到SQL。我使用openpyxl来处理excel,函数wb.save(Automate.xlsxm)不运行宏。
我能够运行下面的代码来刷新Q并保存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
我们将非常感谢您的帮助
发布于 2021-11-30 19:16:18
Openpyxl不计算excel公式和宏,因为它实际上不使用excel,也没有内置的功能。取而代之的是,我建议使用xlwing,它可以打开excel并在打开时计算所有公式(如果它们被设置为自动重新计算)。你也可以使用xlwing来运行你的宏,比如here。您的代码的大致轮廓将是:
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()
https://stackoverflow.com/questions/70172496
复制相似问题