我需要连接到web excel中的共享点列表进行读写,才能像使用excel这样构建更智能计算的表单(是的,我知道powerapps/automation是一个更好的解决方案,但在这方面有一些公司限制(。到目前为止,我的脚本是这样的:
let bob = await getListData();
let mySheet = workbook.getActiveWorksheet();
let myCell = mySheet.getCell(1,1)
myCell.setValue(bob)
}
async function getListData(){
let dataj='test';
let headers:{};
headers ={
"method":"GET",
"credentials": "same-origin",
"headers": {
"accept": "application/json;odata=verbose",
"accept-language": "en-US,en;q=0.9",
"content-type": "application/json;odata=verbose"}
}
await fetch("https://mySite.sharepoint.com/sites/myGroup/_api/web/lists/GetByTitle('myList')/items", headers)
.then((data) => {dataj=data.statusText; console.log(dataj)});
return dataj
}
我已经在浏览器控制台测试了第二个功能;我得到了预期的响应,但在officescript中,我得到了"禁止",而如果我将凭据更改为"包括",我会得到"无法获取"。有人有主意吗?
关于获取失败的可能原因的一些想法:
-
CORS(https://en.wikipedia.org/wiki/Cross-origin_resource_sharing),这可能会阻止您从运行Office脚本的源/域(https://*.officescripts.microsoftusercontent.com(向其他域(在您的情况下,https://mySite.sharepoint.com)。以下是一些潜在的变通方法。基本上,如果您不能控制API服务提供商(在您的情况下是SharePoint(对API进行更改以在其服务器端支持CORS,则您需要找到一种方法来;"桥";您的请求通过某种中间层或代理服务。但是,由于您组织中的Azure限制,这可能会阻止您构建web服务,因此这对您来说可能也是一个挑战?或者你认为你可以使用其他网络托管提供商来构建一些东西吗?
-
验证。SharePoint API是受保护的API,要求您进行经过身份验证的调用。在直接从Excel Online网页的浏览器控制台测试API调用时,您不需要这样做,因为我猜API调用可能会继承经过身份验证的Excel Online会话的某些上下文(例如Cookie?(,因为它们在同一来源中。但是,如果您从不同的来源(https://*.officescripts.microsoftusercontent.com(进行身份验证调用,则需要找到获取访问令牌的方法,如果您要构建代理服务,则甚至需要从代理服务获取访问令牌。这也可能非常具有挑战性,因为代币获取通常需要在AzureAD中进行一些额外的预配置,此外,您甚至可能无法从Office脚本内部进行预配置-代币获取流程要求您将AAD客户端机密放入脚本代码中,或者使用重定向/弹出式方法,而这种方法在Office脚本中肯定不起作用。
不幸的是,我认为目前只有Office脚本很难解决这个问题。如果您认为有一些价值观可以支持从Office脚本内部进行经过身份验证的调用(特别是对那些官方的Microsoft/Office API(,请随时在以下位置提交建议/想法:https://feedbackportal.microsoft.com/feedback/forum/c23f3b77-f01b-ec11-b6e7-0022481f8472.