首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从google应用程序脚本解析表值

如何从google应用程序脚本解析表值
EN

Stack Overflow用户
提问于 2021-06-01 10:14:45
回答 1查看 75关注 0票数 1

我在一个单元格中使用它,但是我有很多问题要获取信息,因为很多时候工作表是“加载”的,并且没有加载信息。

代码语言:javascript
复制
=QUERY(IMPORTHTML("http://performance.morningstar.com/Performance/fund/trailing-total-returns.action?t=LU0266117414", "table", 1), "SELECT Col2, Col3, Col4, Col5, Col6, Col7, Col8, Col9 WHERE Col1='LU0266117414' LIMIT 1 LABEL Col2 '', Col3 '', Col4 '', Col5 '', Col6 '', Col7 '', Col8 '', Col9 '' ")

因此,我在想,如果读取URL表的字段,问题仍然会比当前使用getcontents读取的问题要少。

就像这样

代码语言:javascript
复制
var url = http://performance.morningstar.com/Performance/fund/trailing-total-returns.action?t=LU0266117414
websiteContent = UrlFetchApp.fetch(url).getContentText()

我发现的问题是,我不能只从第一行提取字段。如果它是一个单一的价值,我知道如何做,但有几个同时我还没有达到它。

你知道我怎么能做到吗?

非常感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-01 11:59:23

我相信你的目标如下。

  • 您希望从http://performance.morningstar.com/Performance/fund/trailing-total-returns.action?t=LU0266117414的URL中检索以下值。
代码语言:javascript
复制
- `-1.25    3.87    -3.97   -4.76   -0.82   54.78   29.64   28.68`
  • 您希望使用Google脚本来实现这一点。

在本例中,下面的示例脚本如何?在这个示例脚本中,为了解析表,我使用了Google脚本的XmlService。

示例脚本:

请将以下脚本复制并粘贴到Google电子表格的脚本编辑器中,并使用脚本编辑器运行myFunction()函数。这样,将检索值并将值作为附加值放到活动表中。

代码语言:javascript
复制
function myFunction() {
  var url = "http://performance.morningstar.com/Performance/fund/trailing-total-returns.action?t=LU0266117414";
  var websiteContent = UrlFetchApp.fetch(url).getContentText();
  var trs = [...websiteContent.matchAll(/<tr class\="action">[\s\S\w]+?<\/tr>/g)];
  if (trs.length > 0) {
    var obj = XmlService.parse(trs[0][0].replace(/&mdash;/g, "-")); // Modified
    var values = obj.getRootElement().getChildren("td").map(e => {
      var v = e.getValue();
      return isNaN(v) ? v : Number(v);
    });
    values.splice(-2);
    SpreadsheetApp.getActiveSheet().appendRow(values)
  } else {
    throw new Error("Table cannot be retrieved.");
  }
}

注意:

  • 当您想使用此脚本作为自定义函数时,还可以使用以下脚本。在这种情况下,请复制并粘贴以下脚本到电子表格的脚本编辑器,并保存它。并且,请把=SAMPLE("http://performance.morningstar.com/Performance/fund/trailing-total-returns.action?t=LU0266117414")的公式放在一个细胞里。这样,就可以检索值。 函数样例(Url){ var websiteContent = UrlFetchApp.fetch(url).getContentText();var trs = [...websiteContent.matchAll(/\s\S+?<\/tr>/g);if (trs.length > 0) { var obj =XmlService.parse(trs.replace(/-/g,"-"));//修改的var值= obj.getRootElement().getChildren("td").map(e => { var v= e.getValue();返回isNaN(v)?V: Number(v);});values.splice(-2);返回值;} throw {抛出新错误(“无法检索表”);}}
  • 此示例脚本可用于http://performance.morningstar.com/Performance/fund/trailing-total-returns.action?t=LU0266117414的URL。因此,当HTML的结构发生更改和/或将其用于其他URL时,该脚本可能无法使用。请小心这个。
  • 从你下面的回复来看, 非常感谢,看起来不错,但是像"http://performance.morningstar.com/Performance/fund/trailing-total-returns.action?t=IE00B42W3S00“这样的url有问题。

我为http://performance.morningstar.com/Performance/fund/trailing-total-returns.action?t=LU0266117414http://performance.morningstar.com/Performance/fund/trailing-total-returns.action?t=IE00B42W3S00的两个URL修改了上面的脚本。

参考文献:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67786966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档