如何解决openpyxl 正在覆盖由 Win32 宏在 Excel 中完成的任何工作
我目前正在编写一个脚本,需要我更新 Excel 工作表中的数据并运行宏。运行宏后,我尝试使用 win32 保存文件,以便能够再次运行类似的过程。但是,我已将所有内容与 win32 和 openpyxl 的一个奇怪问题联系起来。似乎如果我使用 win32 运行宏,保存文件并打开它,一切看起来都应该如此。但是,如果我在运行宏后使用 openpyxl 向该文件添加内容,则宏的整个结果将被删除。例如,宏用正确的数据填充单元格 A4:H23,但是在使用 win32 保存并使用 openpyxl 重新打开和编辑之后,如果我之后尝试向单元格 A3 添加任何值并打开文件,唯一的事情是显示的是 A3 中的值,而宏不应该执行任何操作。我可以手动打开工作表并添加数字并重新保存它,但是当我使用 openpyxl 这样做时,它会清除所有宏结果。我在下面包含了我的代码以供参考。任何帮助将不胜感激。
from openpyxl import load_workbook
import os
import win32com.client
import re
import time
Macro1 = r"C:\Users\...\Documents\Macro1Demo.xlsm"
Macro2 = r"C:\Users\...\Documents\Macro2Demo.xlsm"
MiddleManTest = r"C:\Users\...\Documents\MiddleManTest.xlsm"
MiddleMan2 = r"C:\Users\...\Documents\MiddleMan2.xlsm"
DistrictList = r"C:\Users\...\Documents\DistrictList.xlsx"
Macro1WB = load_workbook(filename = Macro1,keep_vba = True)
Macro2WB = load_workbook(filename = Macro2,keep_vba = True)
MM2WB = load_workbook(filename = MiddleMan2,keep_vba = True)
ListWB = load_workbook(filename = DistrictList,keep_vba = True)
ListSheet = ListWB['Sheet1']
M1Sheet = Macro1WB['Entry']
M2Sheet = Macro2WB['Raw']
for i in range(2,3):
Macro1WB['Entry']['A2'].value = ListWB['Sheet1']['A' + str(i)].value
Macro1WB['Entry']['B2'].value = ListWB['Sheet1']['B' + str(i)].value
OrgName = Macro1WB['Entry']['A2'].value
DistrictName = Macro1WB['Entry']['B2'].value
Macro1WB.save(Macro1)
SimpleOrgName = re.sub('[/\:*?<>|"]','',OrgName)
SimpleDistrictName = re.sub('[/\:*?<>|"]',DistrictName)
NewFileName = SimpleOrgName + "(" + SimpleDistrictName + ")"
print(Macro1WB['Entry']['A2'].value,Macro1WB['Entry']['B2'].value)
print("Org/District Copied.")
if os.path.exists(r"C:\Users\...\Documents\Macro1Demo.xlsm"):
xl = win32com.client.Dispatch("Excel.application")
xl.visible = True
workbook = xl.Workbooks.Open(os.path.abspath(r"C:\Users\...\Documents\Macro1Demo.xlsm"))
xl.Application.Run("Macro1Demo.xlsm!Module1.AdvancedFilter")
print("Data filtered.")
workbook.SaveAs(MiddleMan2)
xl.Application.Quit()
MM2WB['Entry']['A3'] = i
MM2WB.save(MiddleMan2)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。