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

MS Project周度例外DaysOfWeek(pjWeekday)多组合整数值规则问询

MS Project 周度日历例外DaysOfWeek字段计算逻辑

DaysOfWeek本质是位掩码枚举值,每一位对应一周中的某一天,选中多日时直接将对应日的数值相加即可得到最终值,无需录制所有选择场景。

数值对应规则

一周每天对应固定的2的幂次数值:

  • 周日:对应值 1(2⁰)
  • 周一:对应值 2(2¹)
  • 周二:对应值 4(2²)
  • 周三:对应值 8(2³)
  • 周四:对应值 16(2⁴)
  • 周五:对应值 32(2⁵)
  • 周六:对应值 64(2⁶)

你给出的示例数值完全符合该规则:

  • 示例值6 = 2+4,对应选中周一+周二
  • 示例值10 = 2+8,对应选中周一+周三
  • 示例值18 = 2+16,对应选中周一+周四

双向处理方法

正向生成(Excel导出到MS Project)

需要组合任意工作日时,只需把对应日期的数值相加,将总和赋值给DaysOfWeek参数即可。比如要选中每周的周一、周三、周五,对应总和为2+8+32=42,直接调用代码即可生效:

ActiveProject.BaseCalendars("Copy of Standard").Exceptions.Add _
    Type:=6, _
    Start:="2024/1/1", _
    Finish:="2024/12/31", _
    Name:="自定义周度规则", _
    Period:=1, _
    DaysOfWeek:=42

反向解析(MS Project导入到Excel)

如果需要把读取到的DaysOfWeek数值转换为对应的选中工作日列表,逐位做与运算判断即可,示例VBA解析代码:

Function GetSelectedDays(daysOfWeekVal As Integer) As String
    Dim dayNames, dayVals, i, res
    dayNames = Array("周日", "周一", "周二", "周三", "周四", "周五", "周六")
    dayVals = Array(1, 2, 4, 8, 16, 32, 64)
    res = ""
    For i = 0 To 6
        If (daysOfWeekVal And dayVals(i)) = dayVals(i) Then
            res = res & IIf(res <> "", "、", "") & dayNames(i)
        End If
    Next
    GetSelectedDays = res
End Function

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 22:27:02