错误xlPrimary未在Python win32com中定义

2024-05-03 03:13:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我不断得到错误,其中xlCategoryxlValue和{}在python脚本中无法识别。在

我正在尝试标记图形的轴,并在昨天成功地使用以下代码:

chart = excel.Charts.Add()
chart.Name = "Chart Title"
chart.ChartType = -4169 #xlXYScatter
chart.SetSourceData(firstSheet.Range("$A:$B"))
series = chart.SeriesCollection(1)
series.Name = "Series Name"
chart.Axes(win32com.client.constants.xlCategory).HasTitle = True
chart.Axes(win32com.client.constants.xlCategory).AxisTitle.Caption = "x Axis"
chart.Axes(win32com.client.constants.xlValue).HasTitle = True
chart.Axes(win32com.client.constants.xlValue).AxisTitle.Caption = "y Axis"

这产生了以下错误:

^{pr2}$

所以我从这个stackoverflow问题changing axis labels in excel 2007 charts using python win32com尝试了这个问题:

pAxis = chart.Axes(AxisGroup = xlPrimary)
xAxis = pAxis(1)
yAxis = pAxis(2)

xAxis.HasTitle = True
yAxis.HasTitle = True
xAxis.AxisTitle.Caption = "VMD"
yAxis.AxisTitle.Caption = "MOD VMD"

但这产生了以下错误:

Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    startGraphBuild()
   File "C:\Python33\InCAS_Study_Analysis\VMDvsMODVMDG.py", line 37, in startGraphBuild
    pAxis = chart.Axes(AxisGroup = xlPrimary)
 NameError: global name 'xlPrimary' is not defined

还有其他人经历过吗?自从昨天开始工作以来,我尝试重新启动一切,卸载并重新安装pyWin,但这些都没有成功。在

我使用的是python3.3和excel2010。在


Tags: nameinclienttrue错误chartwin32comconstants
2条回答

常数已定义。但是,只有在为感兴趣的COM对象创建了COM类型库时,才会加载它们。有几种方法可以做到这一点(我对Accessing enumaration constants in Excel COM using Python and win32com的自我回答中有一些链接,您会发现这些链接很有用)。但基本上试试这个:

Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win
Type "help", "copyright", "credits" or "license" for more information.
Portable Python >>> import win32com
Portable Python >>> win32com.__gen_path__ # path to COM typelib generated by win32com
'C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\gen_py\\2.7'

现在尝试使用Dispatch

^{pr2}$

现在从gencache使用EnsureDispatch

^{3}$

您只需要使用EnsureDispatch一次,因为一旦创建了类型库,Dispatch也会加载常量。在

如果出于任何原因需要清除缓存,不容易找到,但可以删除gen_py文件夹,其路径可以从win32com.__gen_path__找到。在

此属性错误的主要原因是因为COM服务器已从后期绑定(动态)转移到早期绑定(静态)。在

  • 在后期绑定中,每当调用方法时,都会向对象查询该方法,如果成功,则可以进行调用。在
  • 在早期绑定中,对象模型的信息是由对象调用提供的类型信息预先确定的。早期绑定使用MakePy。另外,早期绑定是区分大小写的。在

有两种方法可以解决此问题:

  1. 使用动态模块强制代码以面向后期绑定的方式工作。示例用法:

    "win32com.client.dynamic.Dispatch()" instead of "win32com.client.Dispatch()" 
    
  2. 使用区分大小写的关键字进行早期的绑定。示例用法:

    "excel.Visible()" instead of "excel.VISIBLE()" or "excel.visible()"
    

如果要使用不区分大小写的变量,则应删除gen_py文件夹并使用win32com.client.Dispatch公司()

相关问题 更多 >