Word-AddIn(VSTO)无法从本地OneDrive文件夹获取文件路径

3

我正在尝试开发一个Word-AddIn,可以上传文件或直接修改文件。我可以在本地NTFS Windows文件系统上对任何文件进行操作。但是如果文件位于任何“OneDrive”文件夹中,则无法正常工作,因为文件文档路径的开头为:

https://companyname-my.sharepoint.com/personal/name_whatever/Documents

根据以下返回值:

var doc = Globals.ThisAddIn.Application.ActiveDocument;

        MessageBox.Show("Document Name : " + doc.Name);
        MessageBox.Show("Document Full Name : " + doc.FullName);
        MessageBox.Show("Document Path : " + doc.Path);

而不是预期的:

C:\Users\myname\OneDrive-My_Company_Name\Documents

所以基本上本地文件夹是不可调用的。那么有没有人已经遇到过这种问题呢?


它不会工作。什么不会工作?我认为您不需要知道文件的位置。您无法在更改后保存文档吗?如果要保存副本,请调用“Save”,如果要在源文档的同一文件夹中保存副本,则需要检查OneDrive API;也许此链接会有所帮助:https://stackoverflow.com/questions/31195891/saving-a-shared-docx-from-onedrive-to-original-onedrive-location-in-ms-word - Fabrice T
我不想 保存 文档。我需要的是,当文档在 Word 中打开时,如果我想将它上传到 Web 服务器或任何其他目标位置,插件的代码将检查文档的当前位置,然后尝试获取并上传到目标位置(例如通过 POST 方法上传到网页)。所以如果文档在名为 C:\TEMP 的文件夹中,它可以正常工作。但是当文件在 Box 上的本地 OneDrive 文件夹中时,就会出现上述问题。 - Maik
在您的问题中,我不理解的是实际问题所在?您描述了“插件代码将检查文档的当前位置”、“尝试获取它”并且主要有三种情况:“上传到目标”。那么实际问题存在于哪里?有任何代码示例吗? - Ramesh Perera
您可以使用VBA 此解决方案获取文档的本地路径。我不知道将代码移植到.NET有多难。如果移植该解决方案太困难,您肯定可以使用此解决方案,虽然它不是100%可靠的,但在几乎所有实际情况下仍然有效。 - GWD
现在已经有一个VB.NET解决方案来解决这个问题,在这里可以找到。该解决方案是VBA函数的移植版本。由于VBA的某些功能在VB.NET中不可用,因此性能略低于VBA版本,但我不想改变代码太多以减少移植的工作量。也许这可以进一步移植到C#,而不需要太多的努力... - GWD
1个回答

0
您可以使用 DocumentSaveSaveAs 方法将文档保存在本地文件夹中。

为什么我要保存已经保存的文档呢?我只是通过Windows资源管理器从OneDrive本地文件夹打开它而已。现在我应该再次保存它,保存在哪里呢?在同一个文件夹中吗?还是在Windows上的任何其他文件夹中?这些都是我不想做的额外步骤。 - Maik
可能是到临时文件夹。 - Chris
你尝试过使用IO.FileInfo类中的DirectoryName方法吗? - user7937272
文档是否在受保护模式下打开? - Eugene Astafiev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接