excel 使用Python访问COM对象中的UpdateLinks()

ltskdhd1  于 2022-11-18  发布在  Python
关注(0)|答案(2)|浏览(165)

我正在自动化一个Excel文件,它链接到某些.csv文件。这些.csv文件是从SAS代码创建的,每季度运行一次。创建的文件相应地有时间戳,例如XYZ_201603.csv和XYZ_201606.csv等。
我需要更新Excel文件上的链接,以便它自动更改指向下一季度文件的链接。我尝试使用Python win32com.client完成此操作,代码如下所示

from win32com import Dispatch
xl_app = Dispatch("Excel.Application")
xl_app.Visible = True
xl_app.DisplayAlerts = False
wb = xl_app.workbooks.open(r"C:\Users\XYZ\Desktop\Test\Summary.xlsx")
xl_app.AskToUpdateLinks = False

try:
    wb.UpdateLink(Name=r"C:\Users\XYZ\Desktop\Test\XYZ_201606.csv")

except Exception as e:
    print(e)

finally:
   wb.Close(True)
   wb = None

return True

xl_app.Quit()
xl = None

每当我运行此程序时,都会收到以下错误

(-2147352567,'Exception occured.',(0,'Microsoft Excel','UpdateLink method of
Workbook class failed','xlmain11.chm',0,-2146827284),None)

有人能告诉我这里出了什么问题吗?另外,如果我有多个链接,我如何知道哪个链接需要更改为什么?我能传递更新数据集的目录字典吗
代码和方法取自堆栈溢出问题的答案
使用Python更新Excel电子表格中的链接

tvokkenx

tvokkenx1#

如果你回顾一下Microsoft Documentation,看起来UpdateLink方法可以在没有任何参数的情况下被调用。因此,这个程序应该可以工作:

import win32com.client as win32
xl_app = win32.gencache.EnsureDispatch("Excel.Application")
xl_app.Visible       = True
xl_app.DisplayAlerts = False
wb = xl_app.workbooks.open(r"C:\Users\XYZ\Desktop\Test\Summary.xlsx")

wb.UpdateLink()
wb.Save()
wb.Close()
xl_app.Quit()
gfttwv5a

gfttwv5a2#

我不确定我的解决方案是否能解决您的问题,但我遇到了同样的问题,我改用了LinkSources()和ChangeLink()

newSource = r"C:\Users\XYZ\Desktop\Test\XYZ_201606.csv"
    oldSource  = wb.LinkSources()
    wb.ChangeLink(Name = oldSource[0], NewName = newSource, Type = 1)

希望能有所帮助!

相关问题