javascript - 从一列中抓取数据并将结果传递到旁边的列

标签 javascript google-apps-script

我有以下数据抓取脚本(使用 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 ]);
}
}

它工作得很好,但是我很难处理输出。我从sheet2的第一列获取我的url,所以基本上是A1:A,我想在B1:B列中传递我的脚本的响应同一张纸。

appendRow 只需复制同一列中的值,但复制到我的网址列表下的行中。

最佳答案

你不需要调用sheet两次,我看到一个是sheet2,另一个是sheet5。这是正确的还是你只是想像你说的那样将其放在sheet2上?如果只是sheet2,请删除for循环中的varsheet,然后尝试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);
}

这是一个更快的方法,您不会遇到 Google 对其脚本的 6 分钟限制。

两种不同的方法,但如果您想要做的只是将响应放在 URL 一侧,则可以使用我在第一部分中向您展示的代码。

关于javascript - 从一列中抓取数据并将结果传递到旁边的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39793542/

相关文章:

Javascript/Jquery 注释导致 IE 中出现错误

javascript - 为什么 Lazyload 不显示图片?

google-apps-script - Google App Script onedit 限制为工作表

javascript - Google Script 从文件夹中的每个工作表复制到基于文件夹的主工作表?

javascript - 以不同的速率循环遍历数组

google-apps-script - 如何在运行 google 应用程序脚本时显示负载指示器

javascript - 如何使用 javascript growing bin packing algorithm 获得最终的 bin 大小?

javascript - 处理与 WebPack 连接有关的文件顺序?

javascript - Angular 2可观察/主题无法读取属性 'next'

google-apps-script - 在 HTML 模板中简单返回 Google Scripts 函数结果