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

Excel脚本无法拉取Canvas API数据,但VS Code可正常运行求助

Canvas API在Mac版Excel脚本中无响应的排查与解决建议

问题概述

在VS Code中测试Canvas API调用能正常获取JSON响应,但通过Mac版Excel「自动化>新建脚本」运行相同逻辑时,输出栏无任何内容。开放API(如美国气象局)可正常运行,仅Canvas API出现此问题。测试代码如下:

function main(workbook: ExcelScript.Workbook) {

  let secret = 'MY-SECRET-KEY';

  fetch('https://MY-INSTITUTION-URL/api/v1/courses/COURSEID', {
    method: 'GET',
    headers: {
      authorization: ' Bearer ' + secret
    },
  })
    .then(response => response.json())
    .then(response => console.log(response))
}

排查与解决建议

  • 修复异步执行逻辑:Excel Script的main默认是同步执行,原代码中的fetch异步操作可能在脚本结束前还未完成,导致无输出。改为异步函数并使用await等待请求完成:
    async function main(workbook: ExcelScript.Workbook) {
    
      let secret = 'MY-SECRET-KEY';
    
      try {
        const response = await fetch('https://MY-INSTITUTION-URL/api/v1/courses/COURSEID', {
          method: 'GET',
          headers: {
            authorization: 'Bearer ' + secret // 移除Bearer前的多余空格
          },
        });
        if (!response.ok) {
          throw new Error(`请求失败:${response.status} ${response.statusText}`);
        }
        const data = await response.json();
        console.log(data);
        // 可选:将数据写入Excel工作表
        // const sheet = workbook.getActiveWorksheet();
        // sheet.getRange("A1").setValue(JSON.stringify(data));
      } catch (error) {
        console.error('错误详情:', error);
      }
    }
    
  • 修正认证头格式:原代码中' Bearer '的前置空格可能导致Canvas服务器认证失败,改为'Bearer '(仅保留Bearer后的单个空格)。
  • 添加错误捕获机制:原代码未处理请求失败的情况,用try/catch包裹逻辑,能打印出请求错误的具体信息,快速定位问题。
  • 检查网络访问限制:Mac版Excel可能有 stricter 的网络策略,确认Canvas API的机构域名是否在Excel允许的跨域访问列表中,若为内部域名可联系IT部门确认权限。
  • 验证令牌权限:在浏览器中直接访问API地址(携带正确的Authorization头),确认令牌有访问目标课程ID的权限,排除API自身的权限问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 21:52:39