Office Script调用天气API时出现两类报错的问题求助
Office Script调用天气API时出现两类报错的问题求助
嘿,能看出你正在入门Office Script,尝试调用天气API的思路真的很棒!不过你的代码里藏着几个小问题,刚好能解释你遇到的栈溢出错误和潜在的其他问题,咱们一步步来捋清楚:
首先,先揪出最明显的拼写错误:
- 你定义的城市变量是
const cuslocation = "New York",但拼接API地址的时候却写成了colocation,这个拼写失误会导致变量未定义,虽然它不一定直接引发栈溢出,但会让API请求地址彻底失效,进而触发后续的异常连锁反应。
然后是fetch请求的处理问题,这大概率是栈溢出的直接诱因:
response.Text()这里的方法名写错啦!应该是小写的response.text(),大写的T会让程序调用一个不存在的方法,这种错误很容易触发未处理的异常,进而导致栈溢出;- 另外,
fetch返回的是一个Promise对象,咱们需要正确解析它,而且Office Script里处理异步请求时,最好加上错误捕获逻辑,避免异常扩散引发崩溃。
给你整理了修正后的完整代码,你可以直接替换测试:
async function main(workbook: ExcelScript.Workbook) { // 定义城市变量,确保拼写前后一致 const cuslocation = "New York"; // 替换成你的真实API密钥 const apiKey = "****367d8059062daa61b5**********"; // 用字符串模板拼接URL,比加号更清晰不易错 const endpoint = `http://api.weatherstack.com/current?access_key=${apiKey}&query=${cuslocation}`; try { const response = await fetch(endpoint); // 先检查请求是否成功 if (!response.ok) { throw new Error(`请求失败,状态码:${response.status}`); } // 正确解析响应文本(注意是小写的text()) const weatherData = await response.text(); console.log(weatherData); // 如果你想把数据写入Excel,这里给你个示例(写入Sheet1的A1单元格) const targetSheet = workbook.getWorksheet("Sheet1"); targetSheet.getRange("A1").setValue(weatherData); } catch (error) { console.error("发生错误:", error); // 也可以把错误信息写入Excel方便查看 const targetSheet = workbook.getWorksheet("Sheet1"); targetSheet.getRange("A1").setValue(`错误信息:${error}`); } }
最后再补充几个实用小提醒:
- 一定要保管好你的API密钥,别随便分享出去;
- 栈溢出错误基本就是错误的方法调用(大写Text())加上未处理的异常导致的,修正方法名后应该就能解决;
- 用字符串模板(反引号``)拼接URL比加号更直观,也不容易出现拼写遗漏;
- 加上
try-catch块能帮你精准定位错误,避免程序莫名其妙崩溃。
备注:内容来源于stack exchange,提问作者Cool_Coder
相关产品推荐
相关产品推荐

