Javascript 在应用程序脚本中使用ImportHTML进行数据刮取&;谷歌表单

Javascript 在应用程序脚本中使用ImportHTML进行数据刮取&;谷歌表单,javascript,google-apps-script,web-scraping,google-sheets,Javascript,Google Apps Script,Web Scraping,Google Sheets,目标:我正在尝试从网站中提取数据,并使用它创建一个大表。我可以说,我很快就要让它发挥作用了,但我遇到了一个障碍 背景: 我有一张三页的谷歌表格。(1) 标题为“股票代码”的是标准普尔500指数中所有股票代码的列表,第A1-A500行。(2) 标题为actionField的页面只是脚本中使用的空白页面。(3) 标题为resultField的字段将保存结果。不过,我要访问的网站是()的,我希望该脚本能够对通过importHtml访问的任何数据起作用(稍加修改) 脚本: 我目前拥有的脚本如下: fun

目标:我正在尝试从网站中提取数据,并使用它创建一个大表。我可以说,我很快就要让它发挥作用了,但我遇到了一个障碍

背景: 我有一张三页的谷歌表格。(1) 标题为“股票代码”的是标准普尔500指数中所有股票代码的列表,第A1-A500行。(2) 标题为actionField的页面只是脚本中使用的空白页面。(3) 标题为resultField的字段将保存结果。不过,我要访问的网站是()的,我希望该脚本能够对通过importHtml访问的任何数据起作用(稍加修改)

脚本: 我目前拥有的脚本如下:

function populateData() {
var googleSheet = SpreadsheetApp.getActive();

// Reading Section

var sheet = googleSheet.getSheetByName('tickers');

var tickerArray = sheet.getDataRange().getValues();
var arrayLength = tickerArray.length;
var blankSyntaxA = 'ImportHtml("http://www.reuters.com/finance/stocks/companyOfficers?symbol=';
var blankSyntaxB = '", "table", 1)';

// Writing Section

for (var i = 0; i < arrayLength; i++)
  {
     var sheet = googleSheet.getSheetByName('actionField'); 
     var liveSyntax = blankSyntaxA+tickerArray[i][0]+blankSyntaxB;
     sheet.getRange('A1').setFormula(liveSyntax);
     Utilities.sleep(5000);
     var importedData = sheet.getDataRange().getValues();
     var sheet = googleSheet.getSheetByName('resultField'); 
     sheet.appendRow(importedData)
  }  
}
[Ljava.lang.Object;@42782e7c
[Ljava.lang.Object;@2de9f184
[Ljava.lang.Object;@4b86a4d0
它跨多个列显示,行数与循环中的迭代数相同

如何成功追加数据?

(还有关于改进此脚本的建议吗?

此处不适用。由于它只追加一行,因此其参数应为1D值数组

getValues
中得到的通常是一个2D值数组,如
[[a,b],[c,d]]
。即使只是一行,
getValues
也会返回
[[a,b]]
。唯一的例外是一个单单元格范围,您只能从该单元格中获取值。它从来不是一维数组

如果只需要一行,请使用,例如,
appendRow(importedData[0])

否则,请插入所需的行数,并为其指定二维值数组

 var sheet = googleSheet.getSheetByName('resultField'); 
 var lastRow = sheet.getLastRow();
 sheet.insertRowsAfter(lastRow, importedData.length);
 sheet.getRange(lastRow + 1, 1, importedData.length, importedData[0].length)
      .setValues(importedData);