You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Scriptlab中使用JSONP/JQuery调用API并写入Excel

解决ScriptLab调用Census API后无法写入Excel的问题

问题根源

你的代码里,jQuery的$.ajax JSONP回调函数是脱离Excel.run的异步上下文执行的。当success回调触发时,外层的Excel.run异步函数已经执行完毕,对应的context对象已经失效,这时候再调用context.sync()根本无法触发Excel的内容更新。

修复方案

把异步请求改成Promise形式,用await等待请求结果,让整个流程始终处于Excel.run的上下文范围内。这样修改后,就能正常将API响应写入Excel单元格。

修改后的完整代码

$("#run").click(() => run());

async function run() {
  await Excel.run(async (context) => {
    const range = context.workbook.getSelectedRange();
    range.load("values");
    await context.sync();

    const address = encodeURIComponent(range.values[0][0]);
    const url = `https://geocoding.geo.census.gov/geocoder/geographies/onelineaddress?address=${address}&benchmark=2020&vintage=2010&format=json`;

    // 将jQuery ajax包装为Promise,用await等待结果
    const json = await new Promise((resolve, reject) => {
      $.ajax({
        url: url,
        dataType: "jsonp",
        success: resolve,
        error: reject
      });
    });

    // 更新单元格内容并同步到Excel
    range.values[0][1] = JSON.stringify(json);
    await context.sync();
  });
}

关键改动说明

  • 用new Promise包装$.ajax,把回调式的异步请求转为Promise,配合await让代码保持线性执行,全程处于Excel.run的上下文里。
  • 移除了多余的jsonpCallback手动指定,jQuery会自动生成回调函数,避免全局函数污染。
  • 去掉了冗余的range.values = range.values代码,修改range.values后直接调用context.sync()即可同步到Excel。

内容的提问来源于stack exchange,提问作者Ethan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 15:45:31