Win32 COM python:无法访问excel上的图表

Win32 COM python:无法访问excel上的图表,python,excel,python-2.7,win32com,vba,Python,Excel,Python 2.7,Win32com,Vba,我需要使用python更改excel中图表的公式, 为了了解如何操作,我录制了一个宏,这是我得到的: ActiveSheet.ChartObjects("Graphique 1").Activate ActiveChart.Axes(xlCategory).Select ActiveSheet.ChartObjects("Graphique 1").Activate ActiveChart.SeriesCollection(1).Values = &quo

我需要使用python更改excel中图表的公式, 为了了解如何操作,我录制了一个宏,这是我得到的:

ActiveSheet.ChartObjects("Graphique 1").Activate
ActiveChart.Axes(xlCategory).Select
ActiveSheet.ChartObjects("Graphique 1").Activate
ActiveChart.SeriesCollection(1).Values = "='Données'!$ET$68:$IJ$68"
ActiveChart.SeriesCollection(1).XValues = "='Données'!$ET$1:$IJ$1"
因此,我的图表显然被称为Graphique 1,根据excel文档,在工作表objet上调用ChartObjects。简单,对吗

然而,似乎什么都不起作用:

from win32com import client
xl = client.Dispatch("Excel.Application")
xl.Visible = 1
workbook = xl.Workbooks.Open(r"D:\some\path\file.xls")
ws = workbook.Sheets("the sheet")   
    
#tried but did not work :
ws.ChartObjects("Graphique 1").Activate = True #Exception occured : no element with this name
ws.ChartObjects("Graphique 1").Activate = 1 #Exception occured : no element with this name
ws.ChartObjects(1).Activate = True #Exception occured : no message
ws.ChartObjects(1).Activate = 1 #Exception occured : no message
#in case it's 0ed indexed
ws.ChartObjects(0).Activate = True #Exception occured : no message
ws.ChartObjects(0).Activate = 1 #Exception occured : no message
print ws.ChartObjects("Graphique 1").SeriesCollection(1).Values #Exception occured : no element with this name
print ws.ChartObjects(1).SeriesCollection(1).Values #Exception occured : no message
有什么想法吗? 谢谢

Ps:我现在真的不太了解excel,我有10张工作表,如果正在绘制,我希望我的图表对象在工作表上

编辑 奇怪的是,每张图纸的ChartObjects计数返回0,这怎么可能?我可以亲眼看到

>>> for i in range(1,10):
    ws = workbook.Sheets(i)
    co = ws.ChartObjects()
    count = co.Count
    print count

    
0
0
0
0
0
0
0
0
0

但是,如果
.ChartObjects()
不起作用,所有这些功能都应该可以使用,可以尝试
.Shapes

import win32com.client as win32com

xl = win32com.DispatchEx ("Excel.Application")
xl.Visible = True

wb = xl.Workbooks.Open(r"C:\Book2.xls")

print wb.Worksheets(1).Name
# Selecting ChartObjects on a worksheet
wb.Worksheets(1).ChartObjects(1).Activate()
wb.Worksheets(1).ChartObjects(1).Select()

# Selecting Shapes on a worksheet (which charts are shapes)
#wb.Worksheets(1).Shapes(1).Activate() # Will not work
wb.Worksheets(1).Shapes(1).Select()

# This should loop through all of the shapes
for shape in wb.Worksheets(1).Shapes:
    print shape.Name

# This should loop though all Chart objects 
for chartz in wb.Worksheets(1).ChartObjects():
    print chartz.Name   # Print the name of the chart

如果这些不起作用,那么您的excel文件显然无法识别任何形状或图表。请尝试在该工作簿中创建一个新图表,然后重新运行这些命令以查看它是否显示,如果没有显示,则excel文件可能有问题。

所有这些操作都应该有效,但是,如果
.ChartObjects()
不起作用,请尝试
.Shapes

import win32com.client as win32com

xl = win32com.DispatchEx ("Excel.Application")
xl.Visible = True

wb = xl.Workbooks.Open(r"C:\Book2.xls")

print wb.Worksheets(1).Name
# Selecting ChartObjects on a worksheet
wb.Worksheets(1).ChartObjects(1).Activate()
wb.Worksheets(1).ChartObjects(1).Select()

# Selecting Shapes on a worksheet (which charts are shapes)
#wb.Worksheets(1).Shapes(1).Activate() # Will not work
wb.Worksheets(1).Shapes(1).Select()

# This should loop through all of the shapes
for shape in wb.Worksheets(1).Shapes:
    print shape.Name

# This should loop though all Chart objects 
for chartz in wb.Worksheets(1).ChartObjects():
    print chartz.Name   # Print the name of the chart

如果这些不起作用,那么您的excel文件显然无法识别任何形状或图表。请尝试在该工作簿中创建一个新图表,然后重新运行这些命令以查看它是否显示,如果没有,您的excel文件可能有问题。

测试类似的代码,
Shapes
对我来说效果很好(但
ChartObjects
)。测试类似的代码,
Shapes
对我来说效果很好(但是,
ChartObjects
)也是如此。