我正在尝试使用python更新Excel中图表的外部数据链接。图表位于
workbook1.xlsm
它引用的更新自身的数据位于
external_workbook.xlsx
. 分离的原因是数据必须在
WorkBoo1.xLSM
定期使用python,如果图表在
WorkBoo1.xLSM
.
我看过各种各样的解决方案,但到目前为止还没有一个适合我。到目前为止,我尝试的两种解决方案包括:(1)以编程方式刷新工作簿;(2)在工作簿中运行宏以编程方式刷新工作簿。
(1)代码:
import win32com.client as w3c
xlapp = w3c.gencache.EnsureDispatch('Excel.Application')
xlapp.Visible = 0
xlwb = xlapp.Workbooks.Open(r'{}\{}'.format(path, fname), False, True, None)
xlwb.RefreshAll() # Runs with no errors, but doesn't refresh
time.sleep(5)
xlwb.Save()
xlapp.Quit()
(2)代码:
# ***************** #
# Excel macro - I've verified the macro works when I have the worksheet open.
Sub Update_Links()
ActiveWorkbook.UpdateLink Name:=ActiveWorkbook.LinkSources
End Sub
# ***************** #
import win32com.client as w3c
xlapp = w3c.gencache.EnsureDispatch('Excel.Application')
xlapp.Visible = 0
xlwb = xlapp.Workbooks.Open(r'{}\{}'.format(path, fname), False, True, None)
xlwb.Application.Run("{}!Module1.Update_Links".format(fname)) # Runs with no errors, but doesn't refresh
xlwb.Save()
xlapp.Quit()
Excel中图表的系列是
# External data link for Excel chart #
=SERIES(,'...path_to_external_file...[external_workbook.xlsx]Sheet1'!$A$2:$A$2000,
'...path_to_external_file...[external_workbook.xlsx]Sheet1'!$F$2:$F$2000,1)
有人能为我提供一个替代的解决方案来解决这个问题吗?
编辑
所以我尝试了一些更简单的方法来测试这个。我创建了一个名为
temp
在里面
WorkBoo1.xLSM
并尝试使用下面的代码将随机值写入单元格A1。运行代码后,临时表仍为空白。
import win32com.client as w3c
import random
xlapp = w3c.gencache.EnsureDispatch('Excel.Application')
xlapp.Visible = 0
xlwb = xlapp.Workbooks.Open(r'{}\{}'.format(path, fname), False, True, None)
books = w3c.Dispatch(xlwb)
sheet_temp = books.Sheets('temp')
sheet_temp.Cells(1,1).Value = random.random()
xlwb.RefreshAll() # Runs with no errors, but doesn't refresh
time.sleep(5)
xlwb.Save()
xlapp.Quit()
我在代码上没有发现任何错误,并遵循其他人在网上发布的示例。有人能指点我哪里出了问题吗?