1

我正在尝试从 Web 上的 Excel 调用外部 API。但是,我一直试图从 fetch 调用中获取结果。我什至使用 Office doc 示例来确保

在 Excel 中,单击 Automate 以创建新脚本

async function main(workbook: ExcelScript.Workbook): Promise<void> {
  let fetchResult = await fetch('https://jsonplaceholder.typicode.com/todos/1');
  let json = await fetchResult.json();
}

我不断收到以下消息(在fetchResult.json()调用中)

“Office Scripts 无法推断此变量的数据类型或推断它可能会导致意外错误。请注释变量的类型以避免此错误。您还可以使用编辑器中提供的快速修复选项自动填充基于类型关于用法。可以通过右键单击变量名称并选择 Quick Fix 链接来访问 Quick Fix。

运行 Chrome 检查器时,API 请求似乎处于暂停状态“注意:请求尚未完成”

PS:我不是 Office 管理员,目前无法访问,但希望这不是我的用户或 Office 帐户配置的问题

知道问题可能是什么吗?谢谢!

4

2 回答 2

2

OfficeScript 中不允许的“任何”类型是设计使然。我们认为通常任何类型都可能导致开发人员错误。我知道声明类型可能很困难——但现在最流行的 API 为您提供了可以使用的接口(或 d.ts)。其次,有诸如https://quicktype.io/typescript之类的工具,您可以在其中输入示例 JSON,它会为您提供完整的接口,然后您可以使用 interface 关键字在代码中声明。请参阅此代码,例如:https ://github.com/sumurthy/officescripts-projects/blob/main/API%20Calls/APICall.ts

您不需要声明所有属性——只需声明您将使用的那些。这是更多的前期工作——但最终质量会更好。

于 2021-03-30T17:15:02.757 回答
2

为预期的 JSON 类型添加interface定义为我解决了这个问题。

interface Todo {
  userId: number;
  id: number;
  title: string;
  completed: boolean
}

async function main(workbook: ExcelScript.Workbook): Promise<void> {
  let fetchResult = await fetch('https://jsonplaceholder.typicode.com/todos/1');
  let json: Todo = await fetchResult.json();
  console.log(json);
}

如果您调用的 Web API 返回不同的数据结构,您可能需要定义不同的接口。

于 2021-03-30T05:21:38.983 回答