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

Google Sheets脚本遍历股票代码导出100行谷歌财经时序数据咨询

问题原因

你的代码只能粘贴第一行是两个错误导致的:

  • 读取A5:G254数据时末尾加了[0],getValues()返回的是对应区间的二维数组,[0]代表只取第一行数据
  • 原pasteData函数的逻辑是为单行数据设计的,只能逐单元格写入单行内容
    另外你需要添加强制刷新逻辑,保证谷歌财经API拉取数据、公式计算完成后再复制结果,避免拿到空值或者旧数据。
修改后的完整代码
function getNewPrices() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const tickerSheet = ss.getSheetByName('Tickers');
  const dataSheet = ss.getSheetByName('Data');
  const resultsSheet = ss.getSheetByName('Results');
  let data;

  let myListOfTickers = tickerSheet.getRange('B2:B51').getValues().filter(String).sort();

  myListOfTickers.forEach(ticker => {
    dataSheet.getRange('A2').setValue(ticker[0]);
    // 强制刷新表格,等待谷歌财经数据加载、公式计算完成
    SpreadsheetApp.flush();
    // 移除[0]获取全量数据,同时过滤掉区间内的空行
    data = dataSheet.getRange('A5:G254').getValues().filter(row => row.join('').trim() !== '');
    pasteData(resultsSheet, data);
  });
};

function pasteData(resultsSheet,data){
  // 无有效数据直接跳过
  if(!data || data.length === 0) return;
  const nextRow = resultsSheet.getLastRow() + 1;
  const rowCount = data.length;
  const colCount = data[0].length;
  // 批量写入多行数据,效率远高于逐单元格写入
  resultsSheet.getRange(nextRow, 1, rowCount, colCount).setValues(data);
};
改动说明
  • 移除了取数逻辑中的[0],可以拿到A5:G254区间的全部100行数据
  • 新增SpreadsheetApp.flush()触发表格全量计算,确保复制到的是对应股票的最新数据
  • 新增空行过滤逻辑,部分股票如果历史数据不足100行时,不会把区间内的空行粘贴到结果表
  • 重写了粘贴逻辑,直接用setValues()批量写入多行数据,运行效率比原来的循环写入提升几十倍

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 05:57:03