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

从Yahoo Finance提取JSON数据的通用函数优化:Google Sheets横向输出调整与代码简化问询

解决Google Sheets自定义Yahoo Finance函数的横向输出与代码简化问题

嘿,我来帮你搞定这两个问题!咱们一个个来:

1. 实现横向输出的修改方案

Google Sheets里,自定义函数返回一维数组(比如[1.76, 0.75])时会默认纵向排列,要让它横向显示,只需要把这个一维数组包装成二维数组(比如[[1.76, 0.75]])就行。

你有两种修改方式:

方式一:直接在yFinance函数里修改返回值

找到yFinance里的返回语句:

return getMatchingValues(getPath(quote, 'quoteSummary/result/0'), paths);

把它改成:

return [getMatchingValues(getPath(quote, 'quoteSummary/result/0'), paths)];

这样就把一维数组包进了一个外层数组,Google Sheets会自动把它横向渲染在一行的相邻单元格里。

方式二:修改getMatchingValues函数

如果想让这个函数直接返回横向格式的数组,可以修改它的返回逻辑:

function getMatchingValues( obj, paths ) {
  return [paths.flatMap( path => getPath( obj, path ))];
}

这样调用它的时候直接返回二维数组,同样能实现横向输出。

2. 简化现有代码的方案

你的现有代码里,getPath函数处理了很多数组场景,但在这个Yahoo Finance的案例里,我们的路径都是对象层级(从quoteSummary/result/0之后都是对象属性,没有数组遍历的需求),所以可以大幅简化代码,甚至把getPath和getMatchingValues的逻辑整合到yFinance里,减少冗余。

下面是简化后的完整代码:

function yFinance(symbol) { 
  const url = `https://query2.finance.yahoo.com/v10/finance/quoteSummary/${encodeURI(symbol)}?modules=summaryDetail`;
  // 只请求需要的模块(这里只用到summaryDetail,不需要其他模块,能减少返回数据量)
  
  const response = UrlFetchApp.fetch(url, {muteHttpExceptions: true}); 
  if (response.getResponseCode() !== 200) { 
    return -1; 
  } 

  const quote = JSON.parse(response.getContentText());
  const result = quote.quoteSummary?.result?.[0];
  if (!result) return "No data found";

  // 直接提取需要的字段,不需要复杂的路径解析函数
  const dividendRate = result.summaryDetail?.dividendRate?.raw;
  const payoutRatio = result.summaryDetail?.payoutRatio?.raw;

  // 返回二维数组实现横向输出
  return [[dividendRate, payoutRatio]];
}

简化的关键点:

  • 减少请求模块:原来的URL请求了很多不需要的模块(比如price、assetProfile等),只保留summaryDetail就能拿到我们需要的股息率和派息率,减少数据传输量,提升速度。
  • 直接属性访问:用可选链操作符(?.)替代递归的getPath函数,代码更简洁易读,同时避免属性不存在时的报错。
  • 整合逻辑:把原来三个函数的逻辑合并到一个函数里,减少函数嵌套,维护更方便。

如果之后需要扩展提取更多字段,只需要在最后添加对应的属性提取,并把它们加入返回的二维数组里就行,比如:

const peRatio = result.summaryDetail?.trailingPE?.raw;
return [[dividendRate, payoutRatio, peRatio]];

这样修改后,调用=yFinance("KO")就会在相邻的单元格里横向显示数据啦!


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 17:42:48