You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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 = 20
  • pjTimescaleDays = 2
  • pjTimescaleWeeks = 3
  • pjAssignmentTimescaledActualWork = 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的类型库支持:

  1. 打开命令行,运行python -m win32com.client.makepy
  2. 在弹出的列表中找到"Microsoft Project xx.x Object Library"(xx.x为你的MS Project版本),选中后确定
  3. 重新运行代码即可正常访问常量

方法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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 12:01:01