gpt4 book ai didi

excel - Microsoft Graph API 无法更新 Excel 文件

转载 作者:行者123 更新时间:2023-12-04 19:50:52 25 4
gpt4 key购买 nike

我有一个 Excel 文件 ( .xlsx ),当我的 OneDrive 中已有它时,我可以使用这样的 REST 命令来修改它:

/v1.0/me/drive/root:/SpreadSheetName.xlsx:/workbook/worksheets/content_stats/tables('RawStats')/Rows

当我修改我的代码以首先将文件上传到 OneDrive(而不是使用已经存在的文件)并使用 REST API 时,我收到错误:

Open navigation properties are not supported on OpenTypes. Property name: 'tables'.

我已在网上搜索此消息,但找不到与我正在做的事情相关的任何内容。修改刚刚上传的文件的 REST 调用几乎相同,尽管我确实通过 ID 引用了该文件。相反,因为这是上传 API 返回的内容。这是我用来修改刚刚上传的文件的 URL。

/v1.0/me/drive/items:/<RealExcelSpreadsheetID>:/workbook/worksheets/content_stats/tables('RawStats')/Rows

两者都在做 POST .完全相同的文件,唯一不同的是它是先上传的,而不是已经在 OneDrive 中。该文件确实已正确上传,因为当我通过 OneDrive 网络界面时,我确实找到了它并可以在线查看。这是一个企业帐户。

它以 MIME 类型上传:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet .

它使用通过 OAuth2 委托(delegate)的这些范围:

  • User.Read
  • User.ReadWrite
  • Files.Read
  • Files.ReadWrite
  • Files.ReadWrite.All
  • Sites.ReadWrite.All

使用 Node.js 和 JavaScript,尽管这无关紧要。

这是用于上传文件的代码:

function copyTemplateInOneDrive(res, queryParam, officeAccessToken, callback) {
var fs = require('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(excelSpreadsheetTemplateFilename, function read(error, fileContent) {
var request = require('request');
var options = {
url: uploadUrl,
headers: {
'Accept': 'application/json',
'Authorization': 'Bearer ' + officeAccessToken,
'Content-Type': xlsxMimeType,
},
body: fileContent
};
request.put(options, function (error, response, body) {
var result = JSON.parse(body);
if ('id' in result) {
console.log("Successfully uploaded template file to OneDrive");
res.write("Successfully uploaded template file to OneDrive");

var excelSpreadsheetID = result.id;
excelSpreadsheetUrl = result.webUrl;
} else {
console.log("ERROR: unable to upload template file to OneDrive " + body);
res.write("Error: unable to upload template file to OneDrive" + body);
return;
}
callback(null, res, queryParam, officeAccessToken, excelSpreadsheetID);
});
});
}

它使用来自 node.js 的异步模块(使用回调)。它还保存返回的 ID,稍后将其传递到对 Microsoft Graph 的调用中。

最佳答案

您的问题是您使用 id 调用的 URL 使用的语法需要文件路径(即 folder\filename.ext)而不是 编号。这就是切换到文件名开始为您工作的原因。

有两种方法可以解决存储在 OneDrive 中的文件:

  1. drive/items/{item-id}
  2. /drive/root:/path/to/file(注意 :)

您正确地将您的 URI 从 drive/root 切换到 drive/items 但是通过将 : 留在原地,您告诉 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

您可以在 DriveItem 的文档中了解文件的寻址方式.

关于excel - Microsoft Graph API 无法更新 Excel 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47025257/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com