Office 脚本获取错误(网络上 Excel)
Fetch error on Office Script (Excel on web)
我正在尝试从网络上的 Excel 调用外部 API。但是,我一直在尝试从 fetch 调用中获取结果。我什至使用 Office 文档示例来确保
在 Excel 中,单击“自动化”以创建新脚本
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 脚本无法推断此变量的数据类型或推断它可能会导致意外错误。请注释变量的类型以避免此错误。您也可以使用编辑器中提供的快速修复选项来根据使用情况自动填充类型。可以通过右键单击变量名称并选择“快速修复”来访问“快速修复”link。“
当 运行 Chrome 检查员时,API 请求似乎被搁置“注意:请求尚未完成”
PS:我不是 Office 管理员,现在无法联系到,但希望这不是我的用户或 Office 帐户配置的问题
知道问题出在哪里吗?
谢谢!
为预期的 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 您正在调用 returns 不同的数据结构,您可能需要定义不同的接口。
OfficeScript 中不允许使用“任何”类型是设计使然。我们认为通常任何类型都可能导致开发人员错误。我知道声明类型可能很困难——但如今大多数流行的 API 都为您提供了可以使用的接口(或 d.ts)。
其次,有诸如 https://quicktype.io/typescript 之类的工具,您可以在其中输入示例 JSON,它会为您提供完整的接口,然后您可以使用 interface 关键字在代码中声明该接口。
例如,请参阅此代码:https://github.com/sumurthy/officescripts-projects/blob/main/API%20Calls/APICall.ts
您无需声明所有属性 - 只需声明您将使用的属性。
这是更多的前期工作——但最终质量更好。
我正在尝试从网络上的 Excel 调用外部 API。但是,我一直在尝试从 fetch 调用中获取结果。我什至使用 Office 文档示例来确保
在 Excel 中,单击“自动化”以创建新脚本
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 脚本无法推断此变量的数据类型或推断它可能会导致意外错误。请注释变量的类型以避免此错误。您也可以使用编辑器中提供的快速修复选项来根据使用情况自动填充类型。可以通过右键单击变量名称并选择“快速修复”来访问“快速修复”link。“
当 运行 Chrome 检查员时,API 请求似乎被搁置“注意:请求尚未完成”
PS:我不是 Office 管理员,现在无法联系到,但希望这不是我的用户或 Office 帐户配置的问题
知道问题出在哪里吗? 谢谢!
为预期的 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 您正在调用 returns 不同的数据结构,您可能需要定义不同的接口。
OfficeScript 中不允许使用“任何”类型是设计使然。我们认为通常任何类型都可能导致开发人员错误。我知道声明类型可能很困难——但如今大多数流行的 API 都为您提供了可以使用的接口(或 d.ts)。 其次,有诸如 https://quicktype.io/typescript 之类的工具,您可以在其中输入示例 JSON,它会为您提供完整的接口,然后您可以使用 interface 关键字在代码中声明该接口。 例如,请参阅此代码:https://github.com/sumurthy/officescripts-projects/blob/main/API%20Calls/APICall.ts
您无需声明所有属性 - 只需声明您将使用的属性。 这是更多的前期工作——但最终质量更好。