Google表格:查询sec.gov以获取给定公司的最新文件

问题描述 投票:0回答:1

最近我从SO社区获得了大量帮助,我首先想对大家说声谢谢!

我最新的Google Sheet追求是查询sec.gov以获取给定报价的最新文件。我不是要抓取该网站,我只是想获取最新的文件,这样我可以提醒自己公司何时向SEC提交了新文件。

我目前正在通过importhtml和index对每个股票进行此操作:

index(
importhtml("https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK="&A2&"&owner=include&count=100",
"table",3),2)

...,股票代码在单元格A2中。但是,这一直无法正常工作,因为我一直在尝试使用2500多个股票行情。我注意到,一次有这么多调用时,importhtml会遇到问题。

是否有某种方法可以通过Google脚本自动执行此操作,这样我就可以每晚进行一次最新的归档(或最近5次左右的归档)?我对Google脚本和触发器非常熟悉,我只是不知道如何解决importhtml的限制,以及如何将脚本限制在最新的〜5个文件中,以免使电子表格不知所措。只需要在正确的方向上轻推即可。

谢谢!

google-sheets google-sheets-formula google-sheets-api google-sheets-query edgar
1个回答
0
投票

我相信您的目标如下。

  • 您要检索"4" "Document" "Statement..." "2020-04-17" URL的值。
  • =index(importhtml(URL,"table",3),2)之类的公式放入单元格“ A1:A”,并且您要从第1行到第5行检索值。
  • 您想使用Google Apps脚本来实现。

为了实现它们,这个答案怎么样?

流量:

此示例脚本的流程如下。

  1. 替换源工作表中单元格“ A1:A5”中的公式。这样,公式就会刷新。
  2. 从刷新的公式中检索值。
  3. 将值放入目标表。

示例脚本:

请复制以下脚本并将其粘贴到带有论坛的Google Spreadsheet的脚本编辑器中。并且请设置srcSheetNamedstSheetName的工作表名称。运行myFunction()时,将检索值并将其放在目标表中。

function myFunction() {
  const srcSheetName = "Sheet1";  // Please set the source sheet name.
  const dstSheetName = "Sheet2";  // Please set the destination sheet name. The values are put to this sheet.

  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const srcSheet = ss.getSheetByName(srcSheetName);
  const dstSheet = ss.getSheetByName(dstSheetName);

  // 1. Replace the formula in the cells "A1:A5" of the source sheet.
  const range = srcSheet.getRange("A1:A5");
  range.createTextFinder("^\\=").matchFormulaText(true).useRegularExpression(true).replaceAllWith("=sample");
  range.createTextFinder("^\\=sample").matchFormulaText(true).useRegularExpression(true).replaceAllWith("=");
  SpreadsheetApp.flush();  // This might not be required.

  // 2. Retrieve the values from the refreshed formulas.
  const values = range.offset(0, 0, 5, srcSheet.getLastColumn()).getValues();

  // 3. Put the values to the destination sheet.
  dstSheet.getRange(dstSheet.getLastRow() + 1, 1, values.length, values[0].length).setValues(values);
}

注意:

  • 如果要通过时间驱动的触发器运行脚本,请将其安装到myFunction()功能。您可以在here处查看如何安装触发器。

参考:

添加:

在此示例脚本中,从源工作表中检索了5个公式。然后将公式放到临时表中。从临时表中检索结果值。

示例脚本:

function myFunction() {
  const srcSheetName = "Sheet1";  // Please set the source sheet name.
  const dstSheetName = "Sheet2";  // Please set the destination sheet name. The values are put to this sheet.

  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const srcSheet = ss.getSheetByName(srcSheetName);
  const dstSheet = ss.getSheetByName(dstSheetName);
  const tmpSheet = ss.insertSheet();
  const srcRange = srcSheet.getRange("A1:A5");
  const tmpRange = tmpSheet.getRange("A1:A5");
  tmpRange.setFormulas(srcRange.getFormulas());
  SpreadsheetApp.flush();
  Utilities.sleep(5000); // This might not be required.
  const values = tmpRange.offset(0, 0, 5, tmpSheet.getLastColumn()).getValues();
  dstSheet.getRange(dstSheet.getLastRow() + 1, 1, values.length, values[0].length).setValues(values);
  ss.deleteSheet(tmpSheet)
}
© www.soinside.com 2019 - 2024. All rights reserved.