如何通过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
相关产品推荐
相关产品推荐

