3

我有一个自定义函数,可以查找特定 Facebook 页面的当前点赞数。我还有一个自定义函数,通过触发器设置为每天运行一次,它应该复制和粘贴包含 facebook 查询函数的单元格。这将允许我有两列 1)日期和 2)喜欢的数量,每个新的一天都会更新。我必须在一天结束之前复制和粘贴值,这样每天的点赞数就不会自动重新计算为当前的点赞数。

我遇到的问题是在公式的复制和粘贴与值的复制和粘贴之间。看起来公式加载速度不够快,因为我一直在粘贴值“thinking...”。我曾尝试使用 Utilities.Sleep() 函数在复制和粘贴值之前暂停脚本,但它似乎无法解决问题。两个自定义函数都在下面。有什么建议吗?

function FBlikes(url) {
  var jsondata = UrlFetchApp.fetch("https://graph.facebook.com/"+url); 
  var object = Utilities.jsonParse(jsondata.getContentText());  
  return object.likes; //returns the number of "likes"
}


//pastes FB likes
function updateFbLikes() {
  var s = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Like History");
  var rangeToCopy = s.getRange("A2:E2"); //sets second line as the range to be copied
  var range = s.setActiveCell("A331");
  var notLastRow = true;
  while(notLastRow){  //finds last row
    if(range.getRow() == s.getLastRow()){
      notLastRow = false;
      s.insertRowAfter(s.getLastRow());
    }
    range = range.offset(1, 0);    
  }
  rangeToCopy.copyTo(range); // Paste the data
  range = range.offset(0, 0, 1, 5); //grab the whole new pasted row
  Utilities.sleep(10000); //slowdown so data will load before pasting values 
  range.copyValuesToRange(s, range.getColumn(), range.getColumn()+4, range.getRow(), range.getRow());   //paste values
}
4

1 回答 1

0

如果我理解正确并且您尝试做的是从第 2 行获取结果并将它们作为静态值放在页面末尾。

如果是这样,您可以尝试:

  1. 从工作表底部删除所有未使用的行
  2. 使用以下代码
函数 updateFbLikes() {
  var s = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("喜欢历史");
  var valuesToCopy = s.getRange("A2:E2").getValues();
  s.appendRow(valuesToCopy[0]);
}

如果还有更多内容,请告诉我。

于 2012-12-05T14:39:51.833 回答