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
相关产品推荐
相关产品推荐

