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

Google Apps Script表格数组转对象并创建子类实现股票拆股数据处理

代码调整方案

首先梳理现有代码的核心问题:

  • 没有按股票代码做分组归集,所有记录都是独立输出,没有把同一只股票的所有日期数据汇总到对应股票的key下
  • 未区分交易类型,Split(拆股)类型的记录不需要存储成交价格,仅需要存储拆股比例
  • 自定义对象结构缺少拆股比例字段,无法适配拆股记录的存储需求

调整后完整代码

// 定义统一的日期数据结构,同时支持交易记录和拆股记录
function StockDateRecord(date, type, quantity = null, price = null, splitRatio = null) {
  this.date = Utilities.formatDate(date, Session.getScriptTimeZone(), "M/d/yyyy");
  if (type === 'Buy' || type === 'Sell') {
    this.transaction = {
      quantity: quantity,
      price: price
    }
  } else if (type === 'Split') {
    this.split = {
      splitRatio: splitRatio
    }
  }
}

function retrieveData() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const inputSheet = ss.getSheetByName('History');
  // 读取所有有效行数据
  const data = inputSheet.getRange(2, 1, inputSheet.getLastRow() - 1, 9).getValues();
  // 过滤有效交易类型
  const filtered = data.filter(row => ['Buy', 'Sell', 'Split'].includes(row[2]));
  // 按日期升序排序
  const sorted = filtered.sort((a, b) => a[0].getTime() - b[0].getTime());
  // 初始化最终输出对象,key为股票代码
  const stockResult = {};

  for (let row of sorted) {
    const date = row[0];
    const type = row[2];
    const symbol = row[1];
    const quantity = row[3];
    const price = row[4];
    const splitRatio = row[5]; // 拆股比例所在列索引可根据实际表格调整
    // 若该股票未在结果中初始化,先创建空数组存储记录
    if (!stockResult[symbol]) {
      stockResult[symbol] = [];
    }
    // 生成对应记录推入数组
    const record = new StockDateRecord(date, type, quantity, price, splitRatio);
    stockResult[symbol].push(record);
  }
  // 输出结果验证
  console.log(stockResult);
  return stockResult;
}

功能说明

  • 新的StockDateRecord构造函数会根据交易类型自动适配字段,交易记录存transaction对象,拆股记录存split对象,和你需要的结构完全匹配
  • 最终输出的stockResult对象的key就是股票代码,对应的值是该股票所有按日期排序的记录数组
  • 日期统一格式化为你预期的M/d/yyyy格式,避免时区偏差导致的日期显示异常
  • 后续做拆股调整时,直接遍历对应股票的记录数组,按照你预设的规则计算即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 12:57:01