首页 > 解决方案 > 无法通过 SSIS 打开复制的 SharePoint Online 文件

问题描述

好的,所以我们已经编写了一个实用程序(使用 Graph API)来允许我们在内部 SharePoint 在线站点上进行身份验证和访问文件,以替换以前的本地 WebDav 访问,我们在在线文件被访问后遇到问题复制。
简单来说,使用 Graph API,该过程从 SharePoint Online 获取文件路径,通过网站进行身份验证,如果用户有权访问该文件,则将其复制到定义的位置。这完全可以正常工作,并且相关文件已正确复制到新位置。对于本地文件,位置保持不变。由于我们找不到将 Graph API 集成到 SSIS 中的方法,因此复制了在线文件,因此需要通过将文件复制到其他地方来删除任何权限。

我们有一个现有的 SSIS 进程,该进程以前从本地文件位置列表中读取,并将每个 Excel 文件中的数据导入 SQL 数据库。在我们更新列表以包含 SharePoint Online 复制文件之前,这没有问题。SSIS 进程在服务帐户的上下文中运行,该服务帐户还具有对已定义位置的读/写访问权限,但是当 SSIS 任务运行时,它返回并显示以下错误:

错误:SSIS 错误代码 DTS_E_OLEDBERROR。发生 OLE DB 错误。错误代码:0x80004005。OLE DB 记录可用。源:“Microsoft Access 数据库引擎”Hresult:0x80004005 描述:“无法更新。数据库或对象是只读的。”。

我显然已经搜索过这个错误,唯一的建议是在连接上设置 IMEX=1,这已经完成,并且设置 DelayValidation = True,这已经完成了。
对于现有的本地文件,SSIS 流程应该与在线文件一样工作,但由于未知原因,本地文件按预期工作,但在线文件失败。该文件尚未在其他地方打开,它被复制,然后 SSIS 进程尝试打开它,但这就是它出错的地方。我可以在 Excel 中毫无问题地打开复制的文件。有关 SharePoint Online 的某些内容会在文件上留下锁定吗?我们是否需要使用 Graph API 来从任何指向 SharePoint 的链接发布副本?我自己和我的同事都看过这个,无法弄清楚为什么复制的文件打不开。

编辑:查看 SSIS 错误的上下文,似乎 ConnectionString 是有效的,ExcelFilePath 也是有效的(与前者中的数据源匹配):

ConnectionString: Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\OUR_SERVER_NAME\ShareName_UAT$\Excel_Macro_Enabled_File.xlsm;Extended Properties="Excel 12.0 MACRO;HDR=NO";
ExcelFilePath: \\OUR_SERVER_NAME\ShareName_UAT$\Excel_Macro_Enabled_File.xlsm 

感激地收到任何想法或建议。

谢谢马丁
_

标签: sharepointssismicrosoft-graph-api

解决方案


当源文件来自互联网时,可能与Excel保护措施有关?

有时,如果您在使用 ssis ( https://stackoverflow.com/a/59865686/5605866 )读取文件之前打开、保存和关闭文件,这会有所帮助


推荐阅读