Office365 获取当前Word文档的OneDrive项目Id

Office365 获取当前Word文档的OneDrive项目Id,office365,microsoft-graph-api,office-js,onedrive,Office365,Microsoft Graph Api,Office Js,Onedrive,我正在考虑为MicrosoftWord构建一个外接程序,它将涉及创建当前文档的副本 我找到了我能找到的地方。但是,这需要复制文档的项目id 我似乎找不到如何通过Office JavaScript API获取当前Word文档的项目id 我研究了Office.context.document对象,以及Office.context.document.getFileAsync()和Office.context.document.getFilePropertiesAsync()函数 如何获取当前Word文

我正在考虑为MicrosoftWord构建一个外接程序,它将涉及创建当前文档的副本

我找到了我能找到的地方。但是,这需要复制文档的项目id

我似乎找不到如何通过Office JavaScript API获取当前Word文档的项目id

我研究了
Office.context.document
对象,以及
Office.context.document.getFileAsync()
Office.context.document.getFilePropertiesAsync()
函数


如何获取当前Word文档的OneDrive项目Id?

仅使用Office.js无法做到这一点,您还需要利用Microsoft Graph来查找实际Id

保存文件后,可以使用获取URI。您需要从URI解析文档名和路径。然后,您可以在驱动器的方法上使用查询筛选器来隔离要查找的特定文件

例如,如果您的URI为
https://d.docs.live.net//Documents/somedoc.docx
您可以确定以下各项:

  • 这是消费者OneDrive(请注意live.net URI)
  • 文档名称为
    somedoc.docx
  • 它存储在目录
    Documents
要查找此文档,请执行以下图形命令:

https://graph.microsoft.com/v1.0/me/drive/root/children/Documents?$filter=name eq'somedoc.docx'


所有这些都可以直接从外接程序中执行。请记住,用户可以将文档保存到OneDrive和OneDrive for Business。用户必须使用与其保存的驱动器相同的凭据对图形进行身份验证

公认答案中的解决方案并不是实现这一点的最佳方式,也许不再是了,因为microsoft从那时起更改了api

它适用于根文件;但是,对于嵌套文件夹中的文件,必须多次执行相同的查询,直到获得所有文件夹ID。因为您需要这些ID来构建包含要搜索的文件的完整路径

到目前为止,这里有一个更简单的方法。 假设get
Office.context.document.getFilePropertiesAsync()
为您提供
https://d.docs.live.net//MyFolder1/MyFolder2/somedoc.docx

图形端点应为:
https://graph.microsoft.com/v1.0/me/drive/root:/MyFolder1/MyFolder2/Document.docx

谢谢!这是一个非常有用的答案。尽管如此,在使用Graph Explorer时,我发现Graph端点应该在文件夹后面包含子对象,以列出文档。所以,它看起来是这样的:eq'somedoc.docx'这是我应该期望的行为吗?正确。从技术上讲,这将返回一个数组,但我们依赖于每个文件夹名称唯一的要求,因此数组中应该只有一个条目。我还使用冒号后面的相对路径发现了此方法。用这个方法代替$filter有什么不同或缺点吗?我想不出有什么不同或缺点。只要你知道目录,每次都应该返回正确的文件。不是真的,不。你可以使用传统的web上载方法上载文档,但是用户体验会非常混乱,并且错误百出(例如,他们进行了进一步的编辑,但没有保存,所以他们上载的是旧版本)。您最好检查该位置,如果加载项未保存到预期位置,则在加载项中显示一条警告。我将包含的
文档
的错误路径指定给该路径,并收到404错误。从路径中删除
文档后,它将工作。