如何将SharePoint中的Microsoft Project文件转为可查询格式并自动化处理?
一、解决Power Query读取单个Project文件无列的问题
Power Query无法识别Project文件列,核心是缺少对应驱动或连接方式错误,按以下步骤处理:
- 安装Microsoft Project OLEDB驱动:
下载与你的Excel位数(32/64位)匹配的驱动(如MS Project 2016 OLEDB驱动),安装后重启Excel。 - 用OLEDB连接读取Project数据:
- 在Excel中打开Power Query编辑器,选择数据>获取数据>从其他来源>从OLEDB。
- 输入连接字符串(替换为你的文件路径):
Provider=MSProject.OLEDB.16.0;Data Source=C:\Path\To\Your\File.mpp; - 点击“确定”后,选择要加载的表(如
Tasks、Resources或Assignments),即可看到完整列数据。
二、批量读取SharePoint文件夹中的Project文件
解决单个文件读取后,通过Power Query批量处理整个文件夹:
- 正确连接SharePoint文件夹:
- 选择数据>获取数据>从SharePoint网站>从文件夹,输入完整的SharePoint站点URL(如
https://yourtenant.sharepoint.com/sites/yourteam),选择目标文件夹。 - 若仍出现NotFound错误:
- 确认站点URL包含子站点路径(如果有),避免只填根站点。
- 检查账号对该文件夹的读取权限,确保能访问文件夹内容。
- 选择数据>获取数据>从SharePoint网站>从文件夹,输入完整的SharePoint站点URL(如
- 创建自定义函数批量加载数据:
- 在Power Query编辑器中,点击主页>新建源>空白查询,将其命名为
fnLoadProjectData。 - 打开高级编辑器,替换为以下代码(根据需要调整表名,比如改为
Resources):(filePath as text) as table => let Source = OleDb.DataSource("Provider=MSProject.OLEDB.16.0;Data Source=" & filePath, [Query="SELECT * FROM Tasks"]), #"Changed Type" = Table.TransformColumnTypes(Source,{{"Task Name", type text}, {"Start", type datetime}, {"Finish", type datetime}, {"Duration", type duration}}) in #"Changed Type" - 返回文件夹文件列表,添加自定义列,调用
fnLoadProjectData函数(参数选[Folder Path]&[Name])。 - 展开自定义列,即可合并所有Project文件的任务数据。
- 在Power Query编辑器中,点击主页>新建源>空白查询,将其命名为
三、全流程自动化(基于Power Automate Enterprise)
结合Power Automate实现无需手动干预的自动化流程:
- 触发方式:选择定时触发(如每天凌晨)或当SharePoint文件夹有文件创建/修改时触发。
- 核心步骤:
- 获取文件夹中的MPP文件:使用“列出文件夹中的文件”动作,指定SharePoint站点和文件夹路径,筛选文件扩展名等于
.mpp。 - 批量读取Project数据:
- 对每个文件,使用“运行Power Query脚本”动作,导入之前编写的批量读取Power Query代码,输出合并后的数据集。
- 或使用“启动Microsoft Project”动作打开文件,通过“导出到Excel”动作将数据导出到临时工作簿(推荐用Power Query方式更高效)。
- 更新主列表:
- 若目标是Excel主列表:使用“写入范围”动作,将合并数据覆盖或追加到主列表工作表。
- 若目标是SharePoint自定义列表:使用“创建项”或“更新项”动作,直接将数据写入SharePoint列表(无需中转Excel)。
- 可选通知:添加“发送电子邮件(V2)”动作,向指定人员发送更新完成的通知。
- 获取文件夹中的MPP文件:使用“列出文件夹中的文件”动作,指定SharePoint站点和文件夹路径,筛选文件扩展名等于
关键注意事项
- 确保Excel、Project和OLEDB驱动的位数一致(均为32位或64位),否则会出现驱动加载失败。
- 若使用Power Automate,需确保账号对SharePoint文件夹、Project文件和目标列表有足够的读写权限。
内容的提问来源于stack exchange,提问作者Marie Rodriguez
相关产品推荐
相关产品推荐

