创建 UrlFetchApp 脚本以替换 Google Sheet importHTML 函数

Creating a UrlFetchApp script to replace the Google Sheet importHTML function

我使用以下公式大约一年了,突然它停止了 working/importing table。

=IMPORTHTML("https://tradingeconomics.com/matrix";"table";1)

它给了我一个 “无法获取 url: https://tradingeconomics.com/matrix" 错误。

我尝试了各种方法,其中一个有趣的发现是 importHTML 适用于缓存版本,但仅适用于不同 Google 帐户下的新 sheet。此外,缓存版本也会随机中断。

因此,我似乎不会为了这个目的而使用脚本。

理想情况下,这个脚本应该足够灵活,它应该有一个专门的功能,例如importHTMLtable 用户可以在其中输入 URL 和 table 号。它有效。所以它适用于我目前使用的以下功能,例如

=importHTMLtable("https://tradingeconomics.com/matrix";"table";1)

=importHTMLtable("https://tradingeconomics.com/country-list/business-confidence?continent=world";"table";1)

=importHTMLtable("https://tradingeconomics.com/country-list/ease-of-doing-business";"table";1)

等...

不确定 this Github 代码是否解决了这个问题。好像只能解析文本?

我认为这是 Google 表格用户的一个相当普遍的问题,并且认为可能已经有一个 AppScript 可以做到这一点,并且在导入速度方面也可能更快。

我不会编程,所以我尝试复制和发布代码,看看是否可以让一些代码工作。运气不好:(

任何人都可以提供代码或现有的应用程序脚本(我不知道)完全可以做到这一点吗?

试试这个方法

=importTableHTML(A1,1)

function importTableHTML(url,n){
  var html = UrlFetchApp.fetch(url,{followRedirects : true,muteHttpExceptions: true}).getContentText().replace(/(\r\n|\n|\r|\t|  )/gm,"")
  const tables = [...html.matchAll(/<table[\s\S\w]+?<\/table>/g)];
  var trs = [...tables[n-1][0].matchAll(/<tr[\s\S\w]+?<\/tr>/g)];
  var data = [];
  for (var i=0;i<trs.length;i++){
console.log(trs[i][0])
    var tds = [...trs[i][0].matchAll(/<(td|th)[\s\S\w]+?<\/(td|th)>/g)];
    var prov = [];
    for (var j=0;j<tds.length;j++){
      donnee=tds[j][0].match(/(?<=\>).*(?=\<\/)/g)[0];
      prov.push(stripTags(donnee));
    }
    data.push(prov);
  }
  return(data)
}
function stripTags(body) {
  var regex = /(<([^>]+)>)/ig;
  return body.replace(regex,"").replace(/&nbsp;/g,' ').trim();
}

url-fetch-app#advanced-parameters

matchAll