sharepoint - 无法通过 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
感激地收到任何想法或建议。
谢谢马丁
_
解决方案
当源文件来自互联网时,可能与Excel保护措施有关?
有时,如果您在使用 ssis ( https://stackoverflow.com/a/59865686/5605866 )读取文件之前打开、保存和关闭文件,这会有所帮助
推荐阅读
- python - 如何根据像素 alpha 值使用 numpy.where?
- f# - 如何将 C# XAML 中的 F# 模块用于 DataTemplates 和 DataContext?
- javascript - 如何在保持顺序的同时异步处理 Node.js 中的流事件?
- javascript - 如何在 Typescript 中将“this”明确定义为“any”?
- javascript - Firestore 查询文档的字段 ID
- jquery - jQuery Promise 函数链接
- python - 运行代码时输出面板中没有输出 - VSCode 上的 Python
- java - 从使用 Retrofit 2 for java Android 的方法返回字符串
- firebase - 从非谷歌服务器访问firestore?(我只是上传服务帐户 json 吗?)
- json - 如何在scrapy中从json中删除转义字符?