2016-09-30 40 views
0

我下面的数据废弃脚本(使用Parse库工作):废料的数据和通过结果到列旁边

function getData() { 
var sheet = SpreadsheetApp.openById('my_id').getSheetByName('Sheet2'); 
var urls = sheet.getDataRange().getValues(); 

for(var i = 0; i < urls.length; i++) { 
    var sheet = SpreadsheetApp.openById('my_id').getSheetByName("Sheet5"); // insert Spreadsheet Id and Sheet name 
    var url = urls[i] 
    var fromText = '<span class="nb-shares">'; 
    var toText = '</span>'; 
    var content = UrlFetchApp.fetch(url).getContentText(); 
    var scraped = Parser 
        .data(content) 
        .from(fromText) 
        .to(toText) 
        .build(); 
    sheet.appendRow([ url,scraped ]); 
} 
} 

它的工作完美,但是我一直很难对付outpout。我正在从sheet2的第一列中取得网址,因此基本上是A1:A,我想在同一张表格中将脚本的响应传递给B1:B列。

appendRow只是将值复制到同一列中,但在我的url列表下的行中。

回答

1

您不需要拨打sheet两次,我看到一个是sheet2,另一个是sheet5。这是正确的吗?或者你只是想要在sheet2上像你说的那样?如果只是sheet2,请删除for循环中的var sheet,然后尝试sheet.getRange(i+1,2).setValue(scraped)这应该适用于您正在做的事情,但是如果将响应放入数组中,然后将该数组设置为表后,脚本将运行得更快。任何时候脚本与表单通信都需要时间,这就是为什么我们试图减轻我们称之为表单的时间。

要做到这一点:

function getData() { 
    var sheet = SpreadsheetApp.openById('my_id').getSheetByName('Sheet2'); 
    var urls = sheet.getDataRange().getValues(); 
    var myNewArray = []; 
    for(var i = 0; i < urls.length; i++) { 

    var url = urls[i] 
    var fromText = '<span class="nb-shares">'; 
    var toText = '</span>'; 
    var content = UrlFetchApp.fetch(url).getContentText(); 
    var scraped = Parser 
        .data(content) 
        .from(fromText) 
        .to(toText) 
        .build(); 
    myNewArray.push([scraped]); 
} 
sheet.getRange(1,2,myNewArray.length,1).setValues(myNewArray); 
} 

这是一个更快approche,你就不会碰到6分钟的限制谷歌在它的脚本。

两种不同的方法,但如果你所要做的只是将响应放在URL的一边,你可以使用我在第一部分中给出的代码。

+0

好的完美谢谢。还有两个问题:如何清除您传递数据的列(如果我使用不同的url运行多个脚本)。我试过但不起作用:'sheet.getRange(1,2,myNewArray.length,1).clear();'。另外我如何选择另一列而不是'A1:A'来构建我的url数组?比方说,我的网址是在列c例如? –

+1

我假设你想清除数据,然后再放入新数据。如果是这种情况,我会这样做。 'sheet.getRange(1,2,sheet.getLastRow(),1).clear()'这将清除所有B1:B。 – Mullenb

+1

对于列的选择,这是在你的'var url = urls [i]'它应该是为了'var url = urls [i] [0]''完成的,所以要改变列,你所做的就是改变数。 'var url = urls [i] [2]'因为C是第三列,而数组的索引是零。但getRange没有零,所以一定要记住一个数组将小于getRange数。 – Mullenb