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

Google Apps Script循环报错:H列为空时range行数不足的解决方案咨询

问题根因
  • 原有代码错误添加了if(ct > 0)的判断条件:当H列全空时ct值为0,该判断会直接跳过所有数据抓取逻辑,导致最终待写入的valueArr是空数组,调用setValues时传入的行数为0,触发「range行数至少需要为1」的报错。
  • 没有对最终待写入数组做非空校验,即使没有数据也会执行写入操作,触发异常。
优化后代码
function soccerway() {
  var sh = SpreadsheetApp.getActiveSpreadsheet();
  var ss = sh.getSheetByName("Soccerway");
  
  if (ss.getRange("A2").getValues()[0][0] ==  "ATIVO") {
    var range = ss.getRange('F2:F31');
    var loop = range.getValues().flat().filter(e => e);
    // F列无有效链接时直接退出,避免无效运算
    if (loop.length === 0) return;

    // 计算H列第一个空白行位置,原有逻辑保留,保证不覆盖已有数据
    var column = ss.getRange('H2:H');
    var values = column.getValues();
    var ct = 0;
    while (values[ct] && values[ct][0] != "") {
      ct++;
    }

    var valueArr = [];
    // 移除原错误的ct>0判断,无论H列是否有数据都执行抓取
    for (var key of loop) {
      var contentText = UrlFetchApp.fetch(key).getContentText();
      var $ = Cheerio.load(contentText);
      var ElementSelect = $('#page_match_1_block_match_info_5 > div > div > div.container.left > a.team-title');
      var ElementSelect2 = $('#page_match_1_block_match_info_5 > div > div > div.container.right > a.team-title');
      var data1 = ElementSelect.text().trim() + '&&&&&' + ElementSelect.attr('href');
      var data2 = ElementSelect2.text().trim() + '&&&&&' + ElementSelect2.attr('href');
      valueArr.push([key, data1, data2]);
    }

    // 仅当有待写入数据时执行写入操作,从根源避免空range报错
    if (valueArr.length > 0) {
      ss.getRange(ct + 2, 8, valueArr.length, 3).setValues(valueArr);
    }
  }
}
方案说明
  • 完全保留原有追加写入的逻辑,新数据始终从H列第一个空白行开始写入,不会覆盖已有非空单元格
  • 不需要冗余的try/catch结构,仅通过两处判空逻辑就解决了空数组写入的报错问题
  • 额外新增了F列有效链接的判空逻辑,减少无意义的后续运算,提升脚本执行效率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:12:00