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

如何通过VB.NET+VSTO获取MS Project任务使用视图的周度计划工时数据?

Ms Project任务使用视图按周计划工时导出匹配问题解决方案

核心结论

要获取与WORK字段总和匹配的按周分布计划工时,需使用官方枚举中的pjTaskTimescaledWork(对应值为0);如果要匹配PLANNED WORK(基线计划工时),则使用pjTaskTimescaledBaselineWork(对应值为1,前提是已为任务设置基线)。

问题排查与修正步骤

  1. 移除自定义枚举,使用官方库枚举
    你自定义的PjTaskTimescaledDataType枚举可能存在值偏差,直接引用Microsoft.Office.Interop.MSProject.PjTaskTimescaledDataType枚举,确保常量值与官方定义完全一致,避免因自定义值错误导致数据获取异常。

  2. 确认时间范围与单位转换逻辑
    获取时间刻度数据时,必须覆盖任务的完整生命周期(从任务Start到Finish),同时注意Project中工时默认单位为分钟,需除以60转换为小时。示例VB.NET代码如下:

    ' 获取目标任务对象
    Dim targetTask As MSProject.Task = project.Tasks.Item(1) ' 替换为你的任务获取逻辑
    
    ' 获取按周分布的任务时间刻度工时数据
    Dim tsWorkData As MSProject.TimescaledData = targetTask.TimescaledData(
        StartDate:=targetTask.Start,
        EndDate:=targetTask.Finish,
        Type:=MSProject.PjTaskTimescaledDataType.pjTaskTimescaledWork,
        TimeScaleUnit:=MSProject.PjTimescaleUnit.pjTimescaleWeek
    )
    
    ' 计算时间刻度数据总和并转换为小时
    Dim totalTsWork As Double = 0
    For Each tsItem As MSProject.TimescaledDataItem In tsWorkData
        totalTsWork += tsItem.Value / 60
    Next
    
    ' 对比任务WORK字段值(同样转换为小时)
    Dim taskTotalWork As Double = targetTask.Work / 60
    
  3. 匹配PLANNED WORK的特殊处理
    PLANNED WORK对应任务的基线计划工时,只有为任务设置过基线后,才能通过pjTaskTimescaledBaselineWork获取到对应时间刻度数据,其总和会与Baseline Work字段值一致(即初始计划工时)。

常见不匹配原因

  • 时间范围未覆盖任务全周期,导致部分时段工时未被统计
  • 单位转换错误(未将Project返回的分钟数转换为小时)
  • 使用了错误的枚举类型(如误选实际工时、预算工时等类型)
  • 任务存在拆分或非工作时间配置,需确认时间刻度数据是否按工作日统计(Project默认会排除非工作时间)

内容的提问来源于stack exchange,提问作者Jhorbam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 03:57:47