Microsoft Graph API无法更新Excel文件
我有一个Excel文件(Microsoft Graph API无法更新Excel文件,excel,microsoft-graph-api,onedrive,Excel,Microsoft Graph Api,Onedrive,我有一个Excel文件(.xlsx),当我的OneDrive中已有该文件时,我可以使用如下REST命令对其进行修改: /v1.0/me/drive/root:/SpreadSheetName.xlsx:/workbook/worksheets/content\u stats/tables('RawStats')/Rows 当我修改代码以首先将文件上载到OneDrive(而不是使用已经存在的文件)并使用REST API时,会出现以下错误: OpenTypes不支持打开导航属性。属性名称:“表” 我
.xlsx
),当我的OneDrive中已有该文件时,我可以使用如下REST命令对其进行修改:
/v1.0/me/drive/root:/SpreadSheetName.xlsx:/workbook/worksheets/content\u stats/tables('RawStats')/Rows
当我修改代码以首先将文件上载到OneDrive(而不是使用已经存在的文件)并使用REST API时,会出现以下错误:
OpenTypes不支持打开导航属性。属性名称:“表”
我在网上搜索了这条消息,但找不到任何与我正在做的事情相关的内容。修改刚刚上传的文件的REST调用几乎相同,尽管我确实通过ID
引用了该文件,因为上传API返回了该文件。这是我用来修改刚刚上传的文件的URL
/v1.0/me/drive/items:/:/workbook/worksheets/content_stats/tables('RawStats')/Rows
两人都在做POST
。完全相同的文件,唯一的区别是它是先上传的,而不是已经在OneDrive中。该文件绝对上传正确,因为当我通过OneDrive web界面时,我确实找到了它,并且可以在线查看。这是一个商业帐户
它被上传为MIME类型:application/vnd.openxmlformats of icedocument.spreadsheetml.sheet
它使用通过OAuth2委托的这些作用域:
User.Read
User.ReadWrite
文件。读取
文件。读写
Files.ReadWrite.All
Sites.ReadWrite.All
函数copyTemplateInOneDrive(res、queryParam、officeAccessToken、回调){
var fs=需要('fs');
var excelExt=“.xlsx”;
var excelSpreadsheetFilenameStart=“stats”;
var uploadUrl=”https://graph.microsoft.com/v1.0/me/drive/root:/" +
excelSpreadsheetFilename+dateNowFull()+excelExt+“:/content”;
var xlsxMimeType=“application/vnd.openxmlformats officedocument.spreadsheetml.sheet”;
fs.readFile(Excel电子表格模板文件名,函数读取(错误,文件内容){
var请求=要求(“请求”);
变量选项={
url:上传url,
标题:{
“接受”:“应用程序/json”,
“授权”:“持有人”+officeAccessToken,
“内容类型”:xlsxMimeType,
},
正文:文件内容
};
请求.放置(选项,函数(错误,响应,正文){
var result=JSON.parse(body);
如果(结果中的“id”){
log(“已成功将模板文件上载到OneDrive”);
res.write(“已成功将模板文件上载到OneDrive”);
var excelSpreadsheetID=result.id;
excelSpreadsheetUrl=result.webUrl;
}否则{
console.log(“错误:无法将模板文件上载到OneDrive”+正文);
res.write(“错误:无法将模板文件上载到OneDrive”+正文);
返回;
}
回调(null、res、queryParam、officeAccessToken、excelSpreadsheetID);
});
});
}
它使用node.js中的异步模块(它使用回调)。它还保存返回的ID,然后将其传递到对Microsoft Graph的调用中 这里的问题是您使用
id
调用的URL使用的语法要求文件路径(即folder\filename.ext
)而不是id
。这就是为什么切换到文件名开始为您工作的原因
有两种方法可以寻址存储在OneDrive中的文件:
drive/items/{item id}
/drive/root:/path/to/file
(注意:
)驱动器/根目录
切换到驱动器/项目
,但如果将:
保留在原位,则告诉OneDrive按文件路径而不是id来寻址。换句话说,它正在寻找一个名为“{some id}”
的文件
对于按文件路径寻址的文件,您的URL是正确的:
/drive/root:/{file-path}:/workbook/worksheets/content_stats/tables('RawStats')/Rows
但是,要通过文件的id对文件进行寻址,您需要删除:
:
/drive/items/{file-id}/workbook/worksheets/content_stats/tables('RawStats')/Rows
您可以在的文档中阅读文件的地址。您可以提供触发此错误的代码吗?这里没什么可谈的。嗨,马克!这是修改表的第二次调用,如上所示:“”。你也想要JavaScript吗?我不认为JS是坏的,因为它可以在文件已经在OneDrive中时使用。另外,请注意,您编辑了第一个命令的完整URL,它丢失了“”虽然第二个命令保留了该位,但通常会删除graph.microsoft.com
位,因为可以假定该位,因此较短的字符串更容易读入。我错过了第二个电话。至于这个电话,JS会很有帮助。您的通话内容几乎相同,因此在拨打电话之前,显然存在一些问题。最有可能的问题是上传文件或上传完成后获得的ID
。谢谢Marc。也许您可以传递一条更好的错误消息,然后是“OpenTypes上不支持打开导航属性。属性名称:'表'”,而这仅仅是文件无法打开的问题。