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

如何修复基于筛选向所有Google Sheets动态传输数据的代码错误

报错原因
  • 当某只股票对应的工作表在History1表中没有匹配到对应行数据时,存储匹配结果的数组oA为空,此时调用oA[0].length读取数组元素属性会触发未定义错误
  • 如果你没有预先实现getColumnHeight自定义函数,也会额外触发函数未找到的报错
修正后完整代码
// 拆分History1数据到对应股票工作表
function split_history() {
  const ss = SpreadsheetApp.getActive();
  const hsh = ss.getSheetByName("History1");
  // 先判断History1是否有有效数据
  if(hsh.getLastRow() < 2) return;
  const hvs = hsh.getRange(2,1,hsh.getLastRow() -1,9).getValues();
  const shts = ss.getSheets();
  const excl  = ["Summary","History1","Main Menu"];
  shts.forEach(s => {
    let oA = [];
    if(!~excl.indexOf(s.getName())) {
      hvs.forEach(r => {
        if(s.getName() == r[0]) {
          oA.push(r.slice(0,8));
        }
      });
      // 仅当匹配到数据时执行写入
      if(oA.length > 0) {
        s.getRange(getColumnHeight(1,s,ss) + 1,1,oA.length,oA[0].length).setValues(oA);
      }
    }
  });
}

// 补充getColumnHeight工具函数实现,你如果已有该函数可删除这段
function getColumnHeight(col, sheet, ss) {
  const range = sheet.getRange(sheet.getLastRow(), col);
  if(range.getValue() !== "") return sheet.getLastRow();
  const values = sheet.getRange(1, col, sheet.getLastRow()).getValues();
  for(let i = values.length - 1; i >= 0; i--) {
    if(values[i][0] !== "") return i + 1;
  }
  return 0;
}
修改说明
  • 新增oA非空校验,只有匹配到对应数据时才触发写入操作,彻底解决空数组访问报错问题
  • 新增History1表有效数据校验,当表中只有表头没有录入数据时直接终止运行,避免范围取值报错
  • 补充了getColumnHeight工具函数的完整实现,如果你之前已经定义过该函数可以直接删除对应代码段

内容的提问来源于stack exchange,提问作者Ali Ahmer Rahil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:09:01