繁体   English   中英

使用ImportJSON 将数据导入Google Sheets,根据列名选择值输出?

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

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

我正在尝试将财务数据从 Yahoo Finance 导入 Google Sheets。 我刚刚了解了 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 和类似电子表格的数据不太容易结合在一起,因为 JSON 本质上是嵌套的,这不容易以表格方式表示。 通常,键每次都会以不同的顺序出现,这就是为什么您可能会得到不一致的结果。

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

示例应用脚本

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

/**
 * 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