繁体   English   中英

使用 ImportJSON 将数据导入 Google 表格,select 值 output 基于列名?

Importing data using ImportJSON to Google Sheets, select value output based on column name?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在尝试将 Yahoo Finance 中的财务数据导入 Google 表格。 我刚刚了解了 ImportJSON。

我通过此链接使用 ImportJSON: https://query2.finance.yahoo.com/v10/finance/quoteSummary/EDIT?modules=defaultKeyStatistics
我的电子表格的 A 列中有股票代码,我想从上面的链接中为相应的代码提取某个值。

我试过这个:=INDEX(ImportJSON("https://query2.finance.yahoo.com/v10/finance/quoteSummary/"& A2&"?modules=defaultKeyStatistics"),2,69)

但是,由于我得到的结果好坏参半,该列似乎与每个股票代码的值不对应。
有没有办法让我使用列名而不是数字来索引?

1 个回复

它的复杂!

JSON 和类似电子表格的数据不会很容易地将 go 放在一起,因为 JSON 本质上是嵌套的,这不容易以表格方式表示。 通常,键每次都会以不同的顺序出现,这就是为什么您可能会得到不一致的结果。

出于这个原因,我建议您熟悉 Apps Script,因为它是一种与 JSON 交互的方式比通过工作表函数更友好。 这样您就可以轻松地按名称调用值,因为 JSON 毕竟是 JavaScript Object 表示法,而 Apps Script 是一种 JavaScript!

示例应用程序脚本

为了说明这一点,这是我刚刚编写的一个脚本,用于从您发布的特定 JSON 中提取数据。 它也可以作为 function 在片材中使用。 下面演示如何使用它:

/**
 * Returns 2D array of values. i.e.
 * Value, Raw, Fmt, LongFmt
 * sharesShort, 9890638, 9.89M, 9,890,638
 */
function getJsonValue(url) {
  // Fetch the JSON
  let response = UrlFetchApp.fetch(url);
  let text = response.getContentText();
  let json = JSON.parse(text);

  // Initialize the output array
  let output = [];

  // Navigate to where the main data is
  let stats = json.quoteSummary.result[0].defaultKeyStatistics

  // Adding headers to the output
  let header = ["Value", "Raw", "Fmt", "LongFmt"]
  output.push(header)

  // For each key in stats, add:
  // Value, Raw, Fmt, LongFmt
  for (let attribute in stats) {
    // initialize row array
    let row = [];
    // Add Value to array
    row.push(attribute);

    // Check if the contents of the attribute is an object, else add blank row
    if (typeof(stats[attribute]) == "object" && stats[attribute] != null) {
      // if the object contains raw, fmt, longfmt, then add to row, else add null
      "raw" in stats[attribute] ? row.push(stats[attribute].raw) : row.push(null)
      "fmt" in stats[attribute] ? row.push(stats[attribute].fmt) : row.push(null)
      "longFmt" in stats[attribute] ? row.push(stats[attribute].longFmt) : row.push(null)
    } else {
        row.push(null);
        row.push(null);
        row.push(null);
    }
    // Add row to output
    output.push(row)
  }
  // Return 2D array
  return output
}

你可以像这样使用它:

在此处输入图像描述

或在代码中:

function test() {
  
  let file = SpreadsheetApp.getActive();
  let sheet = file.getSheetByName("Sheet1");

  let output = getJsonValue("https://query2.finance.yahoo.com/v10/finance/quoteSummary/EDIT?modules=defaultKeyStatistics")

  let rows = output.length
  let cols = output[0].length
  let range = sheet.getRange(1,1,rows, cols)
  range.setValues(output)

}

这个脚本主要是给你自己适配的,取决于你使用的JSON的结构。

参考

3 有没有办法根据 Google 表格中数组中的数据返回列值?

下面是我的源数据的图像。 我正在使用 Google 表格。 它在 A 列中有学生姓名,在表格的其余部分中有他们已注册的组: 我试图在数组中查找每个组的所有实例,然后返回链接到该组的所有名称。 请参阅下图了解我所追求的内容。 决赛桌: 我已经使用 FILTER 函数对一列执行类似的操作,但 ...

2021-04-28 10:44:49 1 43   arrays
4 根据列中的值过滤Google表格

我需要使用表格API阅读Google表格。 我可以获取所有行,但是由于这些行成千上万并且将继续增长,因此我需要找到一种无需获取所有行即可对其进行过滤的方法。 我只需要一个带有相等条件的SQL WHERE子句即可访问一列或多列。 例如,在工作表的C列中有一个phoneNumber列。 ...

5 使用基于 Google 表格中复选框值的查询检索数据

我正在为一家公司制作电子表格,以跟踪处于不同开发阶段的先前潜在客户的数据。 目标是有一个带有许多下拉菜单的工作表,用于选择潜在客户和子类型的类型,然后使用复选框选择潜在客户的开发阶段。 潜在客户总共可以处于 9 个阶段。例如,第 5 阶段的潜在客户类型 A。然后,该表检索所有具有潜在客户类型 A 和 ...

8 如何根据Google表格中的单元格值命名Google云端硬盘文件夹

我需要重命名现有的Google云端硬盘文件夹,以匹配Google表格中特定工作表的单元格A1中的值。 每张工作表中的单元格A1包含一个下拉选择。 每个工作表都有一个文件夹,其中包含特定于该工作表的文档。 我希望每个文件夹始终被命名为该特定工作表的A1中显示的值。 例如 文件 ...

9 根据 Google 表格中的两列匹配返回第三列的值

我正在尝试对一个长表进行排序,以便我们可以更轻松地分析数据。 我有什么样的数据? A栏:产品名称 B 栏:日期(开始) C栏:日期(结束) D栏:价格 我需要做的是概述特定日期的所有产品及其价格,以便我可以轻松制作图表来显示价格随时间的变化。 我可以通过数据透视表来做到这一 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM