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

Google Apps Script循环仅输出最后采集值 如何按索引写入表格指定行

问题原因与解决方法

核心问题

你当前使用的index是页面所有<a>标签的全局遍历序号,而非匹配到的目标元素的顺序序号。
只有当两个符合条件的<a>刚好是页面的前两个<a>标签时,才能得到你预期的0、1连续序号。实际页面中符合条件的<a>前面/中间夹有其他不符合条件的<a>标签,就会导致序号不连续,甚至两次计算出的行号相同,后写入的值直接覆盖前一个,就出现了你遇到的仅最后一个值写入第10行的问题。

排查步骤

  • 第一步:在原代码的if判断内加入日志打印,验证每次匹配到的index实际值:
if (href === 'javascript:showSquad()') {
  // 打印日志查看实际index和对应值
  console.log(`全局a标签序号:${index},采集值:${$(value).text().trim()}`)
  sheet.getRange(index+10, 1).setValue($(value).text().trim())
}

运行后查看执行日志,就能看到两次匹配到的index大概率不是连续的0和1,即可确认问题根源。

修复方案

直接用Cheerio的属性选择器筛选出所有符合条件的目标元素,再遍历该集合,此时的index就是目标元素的顺序序号,刚好匹配你的需求:

function MenuDoPlantelTimeA() {
    const sheet = SpreadsheetApp.getActive().getSheetByName('Dados Importados Time A');
    const url = 'https://www.soccer-rating.com/Juventus-Torino/1593/';

    const contentText = UrlFetchApp.fetch(url).getContentText();
    const $ = Cheerio.load(contentText);
  
    // 直接筛选符合href条件的a标签,得到的集合仅包含目标元素
    const targetElements = $('a[href="javascript:showSquad()"]');

    targetElements.each((index, value) => {
        // 这里的index就是目标元素的顺序,第一个为0,第二个为1
        sheet.getRange(index + 10, 1).setValue($(value).text().trim());
    })
}

优化建议

如果后续采集的目标值数量较多,建议先把所有值整理成二维数组,再批量写入表格,减少频繁调用setValue带来的性能损耗:

const writeValues = targetElements.toArray().map(el => [$(el).text().trim()])
sheet.getRange(10, 1, writeValues.length, 1).setValues(writeValues)

内容的提问来源于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.07 15:45:02