从一列中删除数据并将结果传递给旁边的列 [英] Scrap data from one column and pass result to the column next to it

查看:73
本文介绍了从一列中删除数据并将结果传递给旁边的列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

(var i = 0; i var sheet = SpreadsheetApp.openById('my_id')。getSheetByName(Sheet5); //插入电子表格ID和工作表名称
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]);


$ / code $ / pre

完美运作,但我很难处理outpout。我从sheet2的第一列中取得我的url,所以基本上 A1:A ,我想将脚本的响应传递到列 B1:B 在同一张表中。



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

解决方案

您不需要两次调用 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 url = sheet.getDataRange()。getValues();
var myNewArray = [];
for(var i = 0; i< urls.length; i ++){

var url = url [i]
var fromText ='< span class = NB-股>';
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);

$ / code>

这是一个更快的方式,你不会遇到6分钟的限制谷歌已经在其脚本。



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


I've the following data scraping script (working with Parse library) :

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 ]);
}
}

It's working perfectly however I've hard time dealing with the outpout. I'm taking my url from the first column of sheet2 so basically A1:A and I would like to pass the response of my script in the column B1:B in the same sheet.

appendRow just copy the value in the same column but in the rows under my url list.

解决方案

You don't need to call sheet twice, and I see that one is sheet2 and the other is sheet5. Is that correct or do you just want it on sheet2 like you said? If just sheet2, delete the var sheet in the for loop and then try sheet.getRange(i+1,2).setValue(scraped) This should work for what you are doing, but your script will run a lot faster if you put the response in an array and then set that array to the sheet after. Anytime a script communicates with the sheet it takes time, this is why we try to mitigate the times we call the sheet.

To do this:

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);
}

This is a much faster approche and you will not run into the 6 minute limit google has on its scripts.

Two different approaches, but if all you are trying to do is put the response on the side of the URLs you can use the code I showed you in the first part.

这篇关于从一列中删除数据并将结果传递给旁边的列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆