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

Google Apps Script运行报错ReferenceError: wsd未定义问题咨询

错误原因

你遇到的ReferenceError: wsd is not defined报错本质是变量作用域限制:
你定义的wsd是importazione函数内的局部常量,它的可访问范围仅局限于importazione函数内部,包括函数内部嵌套的作用域。而scriviElenco是独立于importazione之外的顶层函数,没有权限访问其他函数内部定义的局部变量。

你之前的脚本能正常运行,大概率是之前的wsd是定义在所有函数之外的全局变量,全局变量可以被当前文件内的所有函数访问。

修复方案

方案1:将wsd作为参数传递给scriviElenco

修改两处代码即可:

  1. 调用scriviElenco时传入wsd变量
  2. 定义scriviElenco时新增参数接收wsd

修改后完整代码:

function importazione() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const wsd = ss.getSheetByName("morosi");
  wsd.getRange(2,1,1000,10).clearContent();
  SpreadsheetApp.flush();

  const ws = ss.getSheetByName("importa");
  const max_riga = ws.getLastRow();
  var dati = ws.getRange(2, 1, max_riga-1, 6).getValues();
  
  dati.forEach(r => {                  
    // 调用时传入wsd
    scriviElenco(wsd, {
      corso: r[0],
      ciclo: r[1],
      studente: r[2],
      status: r[4],
      id_matr: r[5]
    });
  });
}

// 新增wsd参数
function scriviElenco(wsd, passa) {
  if (passa.status === "NO PAGÓ") {    
    var daSplittare = passa.corso+"|"+passa.studente+"|"+passa.id_matr;
    var riga = daSplittare.split("|");
    wsd.appendRow(riga);
  };
}

方案2:合并逻辑到循环内,无需单独抽函数

如果scriviElenco没有其他地方复用,可以直接把逻辑写到forEach循环中,直接访问wsd变量,同时还能省略不必要的字符串拼接+拆分操作,提升运行效率:

function importazione() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const wsd = ss.getSheetByName("morosi");
  wsd.getRange(2,1,1000,10).clearContent();
  SpreadsheetApp.flush();

  const ws = ss.getSheetByName("importa");
  const max_riga = ws.getLastRow();
  var dati = ws.getRange(2, 1, max_riga-1, 6).getValues();
  
  dati.forEach(r => {                  
    if (r[4] === "NO PAGÓ") {
      const riga = [r[0], r[2], r[5]];
      wsd.appendRow(riga);
    }
  });
}

内容的提问来源于stack exchange,提问作者LUCA DELLA GHEZZA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:39:04