Google Sheets股票代码批量处理脚本故障求助
解决Google表格股票跟踪脚本的两个问题
问题分析与修复方案
问题1:最后一批处理错误,取到空单元格
原脚本通过B列非空行数计算已处理股票数量,逻辑存在偏差——当循环重新开始时,B列已有历史数据,会导致已处理数量计算错误,进而让batchSize取值出错,取到空行。
问题2:遍历完列表后停止运行,未回到顶部重新处理
原脚本在remainingTickers <=0时直接退出,没有重置起始行,导致后续调用不再执行。
修改后的完整脚本
function trackStockData() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var tickers = sheet.getRange("A2:A").getValues().filter(String); // 过滤空单元格,得到有效股票代码列表 var totalTickers = tickers.length; if (totalTickers === 0) return; // 没有股票代码时直接退出 var batchCount = 10; var scriptProps = PropertiesService.getScriptProperties(); var startRow = Number(scriptProps.getProperty("startRow")) || 2; // 计算当前已处理的股票数量:从第2行开始,startRow之前的行数即为已处理数 var tickersProcessed = startRow - 2; // 计算剩余未处理的股票数量,若已处理完所有则重置为0,准备重新开始 var remainingTickers = totalTickers - tickersProcessed; if (remainingTickers <= 0) { // 重置起始行到第2行,重新计算剩余数量 startRow = 2; tickersProcessed = 0; remainingTickers = totalTickers; } // 确定当前批次大小:不超过剩余数量和每批上限 var batchSize = Math.min(batchCount, remainingTickers); // 填充当前批次的时间戳 var dateTime = new Date(); var dateTimeValues = new Array(batchSize).fill([dateTime]); var range = sheet.getRange(startRow, 2, batchSize, 1); range.setValues(dateTimeValues); // 更新下一批次的起始行,若处理完所有则重置为2 var nextStartRow = startRow + batchSize; if (nextStartRow > 2 + totalTickers - 1) { nextStartRow = 2; } scriptProps.setProperty("startRow", nextStartRow.toString()); }
关键修改点说明
修正已处理数量计算逻辑
不再依赖B列内容,直接通过startRow - 2计算已处理的股票数量,确保批次大小计算准确,不会取到空行。添加循环重置逻辑
当remainingTickers <=0时,将startRow重置为2,同时重置已处理数量,让脚本从顶部重新开始处理。优化下一批起始行的更新
处理完当前批次后,判断下一个起始行是否超过最后一个有效股票的行号(2 + totalTickers -1),如果超过则重置为2,确保循环往复。
内容的提问来源于stack exchange,提问作者Pr0no
相关产品推荐
相关产品推荐

