【问题标题】:How to work with MS Project TimeScaleValue object using Python如何使用 Python 处理 MS Project TimeScaleValue 对象
【发布时间】:2022-02-04 01:11:17
【问题描述】:

我正在尝试使用 win32com.client 使用来自 MPP 文件的数据创建一个图表来读取数据。但是在咨询了Microsoft's documentation之后,我尝试从一个简单的代码开始。

import win32com.client

mppFileName = 'C:/python/test.mpp'

mpp = win32com.client.Dispatch("MSProject.Application")
mpp.visible = 0
    
mpp.FileOpen(mppFileName)
project = mpp.ActiveProject

ResourceList = project.Resources
assignments = project.Assignments
    
for resource in ResourceList:
    if resource.Work != 0:
        print(resource.Name, ' ', resource.Job)
     
mpp.FileClose(Save=0)
  
exit()

但此代码在assignments= 行上生成错误(Assignments 为“未知”)。有谁知道使用 Assignments 和 TimeScaleValues 对象的正确方法?我的目标是创建一个图表,其中包含按周分配给每个项目资源的工作量。

【问题讨论】:

  • project 没有 Assignments 属性,但 resource 有,根据您提供的文档链接。
  • 您好,感谢您的评论!使用文档我了解到我有两个必须声明的嵌套集合。我已经尝试使用“Assigments = ResourceList.Assigments”、“Assignments = Resources.Assignment”和其他变体,但似乎没有任何效果。这个link VBA 文档对我也没有太大帮助...
  • 你在'for'循环中试过assignments = resource.Assignments吗?文档很清楚:Assignments 是 Resource 对象的一个​​属性(如Work):docs.microsoft.com/en-us/office/vba/api/…
  • 感谢您的帮助!有了你的 cmets 和 Rachel 的回答,我就可以继续了。我必须在循环内而不是在外面做作业......谢谢!

标签: python python-3.x win32com ms-project


【解决方案1】:

您需要遍历每个ResourceAssignments 集合。然后对于每个Assignment,使用TimeScaleData 方法循环遍历您想要的时间段(例如几周),这是按天/周/等读取(和设置)工作的关键。此方法返回 TimeScaleValues 对象的 TimeScaleValue 集合。

伪代码:

for r in ResourceList:
  asgmts = r.Assignments
  for a in asgmts 
    ''' create timescalevalues collection to loop through time periods'''
    tsvs = a.TimeScaleData(start, end, type, unit)
    for tsv in tsvs
      ' aggregate the work as needed

其他需要了解的有用对象:ApplicationTasks 集合、Task 对象和Resources 集合

还可以在 stackoverflow 中搜索 similar questions,例如 TimeScaleData in Project using .net。大多数问题和答案不会是python(c#,vb.net,vba),但使用项目对象模型的核心将适用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多