如何自动化Ms-Project的Project Import Wizard实现批量数据快速无干预导入
.NET 自动化调用MS Project导入向导的实现方案
1. 前置准备确认
- 你补充截图中的就是导入映射创建向导,按你的字段匹配规则配置完成后保存映射,记住映射的准确名称即可
- 待导入的Excel/CSV文件路径、映射名称、目标MPP文件路径都提前确认无误
- 项目中已经引用了
Microsoft.Office.Interop.MSProjectNuGet包或者对应COM组件
2. 核心实现代码
using Microsoft.Office.Interop.MSProject; using System.Runtime.InteropServices; public void ImportDataToProject(string csvOrExcelPath, string importMapName, string targetMppSavePath) { Application projApp = null; Project targetProject = null; try { // 初始化Project应用实例,设置后台运行无界面 projApp = new Application(); projApp.Visible = PjBoolean.pjFalse; projApp.DisplayAlerts = PjAlertLevel.pjAlertsNone; // 核心:调用OpenEx方法指定映射直接导入数据 targetProject = projApp.OpenEx( Filename: csvOrExcelPath, ReadOnly: PjBoolean.pjFalse, Merge: PjMergeType.pjMerge, Map: importMapName ); // 导入完成后保存为MPP文件 targetProject.SaveAs(targetMppSavePath); } finally { // 释放COM资源,避免后台残留Project进程 if (targetProject != null) Marshal.ReleaseComObject(targetProject); if (projApp != null) { projApp.Quit(PjSaveType.pjDoNotSave); Marshal.ReleaseComObject(projApp); } } }
3. 关键参数说明
Merge参数:如果是新建空白MPP导入,填pjMerge即可;如果是往已有MPP里追加数据,可以根据需求选择pjAppend或者pjMergeMap参数:必须和你提前在Project里保存的导入映射名称完全一致,大小写敏感- 如果导入的是Excel文件,需要注意提前关闭该Excel文件,避免被占用导致导入失败
4. 性能说明
这种导入方式的性能是直接逐行调用Assignments.Add等方法的10~100倍,数千条任务加资源分配的导入耗时通常在数秒到数十秒级别,完全可以满足批量导入需求。
内容的提问来源于stack exchange,提问作者bbb android
相关产品推荐
相关产品推荐

