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

如何通过Microsoft.Office.Interop.MSProject获取当前MS Project活动文档文件名?

获取当前激活MS Project文档文件名的实现方案

嘿,这个问题我之前做项目的时候刚好碰到过!用Microsoft.Office.Interop.MSProject获取当前激活的MS Project文档文件名其实挺直接的,核心就是借助Application.ActiveProject对象,下面给你详细的实现步骤和代码示例:

1. 准备工作

首先确保你已经在项目里引用了Microsoft.Office.Interop.MSProject组件,并且在代码文件顶部添加对应的命名空间:

using Microsoft.Office.Interop.MSProject;
using System.IO; // 处理文件名扩展名时需要

2. 核心实现代码

你可以通过ActiveProject属性获取当前激活的项目实例,然后访问它的Name属性就能拿到带扩展名的文件名。如果需要不含扩展名的版本,用Path.GetFileNameWithoutExtension处理即可:

// 获取正在运行的MS Project应用实例(如果没有运行,也可以new Application()启动)
Application projApp = (Application)System.Activator.CreateInstance(Type.GetTypeFromProgID("MSProject.Application"));

try
{
    // 获取当前激活的项目文档
    Project activeProject = projApp.ActiveProject;

    if (activeProject != null)
    {
        // 获取带扩展名的完整文件名
        string fullFileName = activeProject.Name;
        Console.WriteLine($"当前激活的文档文件名:{fullFileName}");

        // 若需要不带扩展名的文件名
        string fileNameWithoutExt = Path.GetFileNameWithoutExtension(fullFileName);
        Console.WriteLine($"不带扩展名的文件名:{fileNameWithoutExt}");
    }
    else
    {
        Console.WriteLine("提示:当前没有打开或激活的MS Project文档");
    }
}
catch (Exception ex)
{
    Console.WriteLine($"获取过程出错:{ex.Message}");
}
finally
{
    // 务必释放COM对象,避免内存泄漏
    System.Runtime.InteropServices.Marshal.ReleaseComObject(projApp);
}

3. 关键注意点

  • 如果当前没有任何打开的MS Project文档,直接访问ActiveProject会抛出异常,所以一定要加上空值判断或者异常捕获逻辑
  • 操作完COM对象后,必须调用Marshal.ReleaseComObject释放资源,防止内存泄漏
  • 如果你想连接到已经在运行的MS Project实例,也可以用GetObject(null, "MSProject.Application")来获取,而不是新建实例

内容的提问来源于stack exchange,提问作者Y.op

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:27:33