如何通过pywin32在Python中访问MS Project枚举?
在Python中访问MS Project枚举常量的解决方法
针对你用win32com调用MS Project的TimeScaleData方法时找不到pjAssignmentTimescaledWork和pjTimescaleDays等枚举常量的问题,有以下几种实用思路:
方法1:直接使用枚举对应的数值
MS Project的所有VBA枚举常量都对应固定的整数数值,你可以直接把数值代入代码参数中,无需额外加载常量库。比如:
import win32com.client ms_project = win32com.client.Dispatch("MSProject.Application") active_project = ms_project.ActiveProject for t in active_project.Tasks: for r in t.Assignments: # 直接用数值代替枚举常量:pjAssignmentTimescaledWork=20,pjTimescaleDays=2 TSV_collection = r.TimeScaleData('06/01/2019', '08/01/2019', 20, 2) for tsv in TSV_collection: print(tsv.Value)
常用的相关常量数值可通过MS Project的VBA帮助文档查询,比如:
pjAssignmentTimescaledWork= 20pjTimescaleDays= 2pjTimescaleWeeks= 3pjAssignmentTimescaledActualWork= 21
方法2:通过win32com加载MS Project常量库
win32com支持直接访问Office应用的内置常量,只需在初始化COM对象后加载常量集合:
import win32com.client # 启动MS Project并获取应用对象 ms_project = win32com.client.Dispatch("MSProject.Application") # 加载MS Project的常量 pj = win32com.client.constants active_project = ms_project.ActiveProject for t in active_project.Tasks: for r in t.Assignments: TSV_collection = r.TimeScaleData( '06/01/2019', '08/01/2019', pj.pjAssignmentTimescaledWork, pj.pjTimescaleDays ) for tsv in TSV_collection: print(tsv.Value)
如果加载常量时报错,可先通过win32com.client.makepy.py生成MS Project的类型库支持:
- 打开命令行,运行
python -m win32com.client.makepy - 在弹出的列表中找到"Microsoft Project xx.x Object Library"(xx.x为你的MS Project版本),选中后确定
- 重新运行代码即可正常访问常量
方法3:手动定义所需常量
如果只需要少数几个常量,直接在代码中手动定义变量是最简便的方式:
import win32com.client # 手动定义需要的MS Project枚举常量 pjAssignmentTimescaledWork = 20 pjTimescaleDays = 2 ms_project = win32com.client.Dispatch("MSProject.Application") active_project = ms_project.ActiveProject for t in active_project.Tasks: for r in t.Assignments: TSV_collection = r.TimeScaleData( '06/01/2019', '08/01/2019', pjAssignmentTimescaledWork, pjTimescaleDays ) for tsv in TSV_collection: print(tsv.Value)
内容的提问来源于stack exchange,提问作者Camilo Martínez M.
相关产品推荐
相关产品推荐

