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

Google Script 为importrange脚本添加执行成功/错误提示

Google Script 跨表导入脚本错误提示实现方案

直接用try...catch语法捕获每个导入步骤的执行状态,就能实现成功/失败提示的匹配触发,不会出现脚本中途中断无法返回结果的问题。

修改后可直接使用的完整代码

function runsies() {
  const ui = SpreadsheetApp.getUi();
  const successList = [];
  const errorList = [];

  // 执行Nordics区域数据导入
  try {
    importRange(
      "1Xrhx03ub1uXdeFsS0mFZa2zi5uZL-qcuQDbe9oIULQU",
      "DATADUMP: LE!A2:I",
      "1GY-FjVa1XFNpKiR7wx3tCtGUMC2FRbLTORj-wI3iBK8",
      "Nordics - LE!A1"
    );
    successList.push("Nordics - LE");
  } catch (e) {
    errorList.push(`Nordics - LE 导入失败:${e.message}`);
  }

  // 执行UK区域数据导入
  try {
    importRange(
      "13Y0NOJie1gYWXanQhtkSnTNsx4vt_bcqfUIXj0ePnac",
      "DATADUMP: LE!A2:I",
      "1GY-FjVa1XFNpKiR7wx3tCtGUMC2FRbLTORj-wI3iBK8",
      "UK - LE!A1"
    );
    successList.push("UK - LE");
  } catch (e) {
    errorList.push(`UK - LE 导入失败:${e.message}`);
  }

  // 弹出执行结果提示
  let tipContent = "";
  if (successList.length) {
    tipContent += `导入成功:共${successList.length}个区域数据更新完成,包含:${successList.join("、")}\n\n`;
  }
  if (errorList.length) {
    tipContent += `导入异常:共${errorList.length}个区域导入失败,详情如下:\n${errorList.join("\n")}`;
  }
  ui.alert("跨表数据导入任务结果", tipContent, ui.ButtonSet.OK);
}

function importRange(sourceID, sourceRange, destinationID, destinationRangeStart){
  // 读取源表数据
  const sourceSS = SpreadsheetApp.openById(sourceID);
  const sourceRng = sourceSS.getRange(sourceRange);
  const sourceVals = sourceRng.getValues();

  // 校验源数据是否有效
  if (!sourceVals.length || !sourceVals[0].length) {
    throw new Error("指定源范围无有效数据");
  }
 
  // 定位目标表写入位置
  const destinationSS = SpreadsheetApp.openById(destinationID);
  const destStartRange = destinationSS.getRange(destinationRangeStart);
  const destSheet = destStartRange.getSheet();
 
  // 清空目标表旧数据
  destSheet.clear();
 
  // 匹配写入范围
  const destRange = destSheet.getRange(
      destStartRange.getRow(),
      destStartRange.getColumn(),
      sourceVals.length,
      sourceVals[0].length
    );
  
  // 写入新数据
  destRange.setValues(sourceVals);
  SpreadsheetApp.flush();
}

实现逻辑说明

  • 每个导入任务单独放在try块中执行,执行过程中触发的任何错误(包括源表无权限、范围拼写错误、目标表无编辑权限、行列不匹配等)都会被对应的catch块捕获,不会导致整个脚本直接中途崩溃
  • 用两个数组分别收集成功、失败的任务信息,所有任务全部执行完成后,统一调用表格原生弹窗展示结果,成功时显示完成的区域,失败时直接展示具体错误原因,不需要翻执行日志排查
  • 新增了源数据空值校验,避免源范围选空时抛出用户看不懂的底层代码错误
  • 原脚本的执行顺序没有改动,只有成功读取到源数据之后才会清空目标表旧内容,不会出现目标表被清空但新数据没写入的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 02:01:12