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

如何用C#代码更新Microsoft Project 2019的资源费率?

基于Microsoft Project 2019的资源费率更新C#实现

前提准备

  • 确保运行代码的机器已安装Microsoft Project 2019
  • 在C#项目中添加引用:Microsoft.Office.Interop.MSProject(版本16.0对应Project 2019)

C#代码示例

以下示例实现从ERP获取资源费率数据,批量更新Project文件中的员工资源费率:

using Microsoft.Office.Interop.MSProject;
using System;
using System.Collections.Generic;

namespace ProjectRateUpdater
{
    class Program
    {
        static void Main(string[] args)
        {
            // 初始化Project应用实例
            Application projectApp = new Application();
            projectApp.Visible = false; // 后台运行,不显示界面

            try
            {
                // 打开目标Project文件(替换为你的文件路径)
                Project targetProject = projectApp.Projects.Open(@"C:\Path\To\Your\ProjectFile.mpp");

                // 从ERP获取资源费率数据(此处为模拟逻辑,替换为实际ERP数据获取代码)
                var erpResourceRates = GetResourceRatesFromERP();

                // 遍历资源,匹配并更新费率
                foreach (Resource res in targetProject.Resources)
                {
                    // 跳过空资源
                    if (res.Name == null) continue;

                    // 匹配ERP中的资源(此处按资源名称匹配,可根据实际调整为工号等唯一标识)
                    if (erpResourceRates.TryGetValue(res.Name, out decimal newRate))
                    {
                        // 设置标准费率(默认生效日期为当前时间,如需指定时间段可调整RateTables)
                        res.StandardRate = newRate.ToString("0.00") + "/h"; // Project需要带单位格式,如"50.00/h"
                        Console.WriteLine($"已更新资源 {res.Name} 的费率为 {newRate}/小时");
                    }
                }

                // 保存并关闭项目
                targetProject.Save();
                targetProject.Close();
                Console.WriteLine("费率更新完成");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"更新失败:{ex.Message}");
            }
            finally
            {
                // 释放COM对象,避免内存泄漏
                if (projectApp != null)
                {
                    projectApp.Quit();
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(projectApp);
                }
            }
        }

        /// <summary>
        /// 模拟从ERP获取资源费率数据的方法
        /// </summary>
        /// <returns>资源名称-费率的字典</returns>
        private static Dictionary<string, decimal> GetResourceRatesFromERP()
        {
            // 实际场景中,此处应调用ERP的API、数据库查询等逻辑获取数据
            return new Dictionary<string, decimal>
            {
                { "张三", 85.50m },
                { "李四", 92.00m },
                { "王五", 78.00m }
            };
        }
    }
}

关键注意事项

  • 资源匹配逻辑:示例中按资源名称匹配,实际建议使用唯一标识(如员工工号)进行匹配,避免名称重复导致错误
  • 费率格式:Project的费率字段需要带单位后缀,如"85.50/h"(小时费率)、"1500/week"(周费率)等
  • 费率时间段:如需设置不同生效时间段的费率,可通过Resource.RateTables属性操作,例如添加新的费率周期
  • COM对象释放:必须确保Project应用实例被正确释放,否则会导致进程残留占用内存
  • 权限问题:运行代码的账号需要有目标Project文件的读写权限,以及ERP数据的访问权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 18:35:05