复制数据但跳过错误、空白和加载的脚本

问题描述 投票:0回答:1

因此,我有一个电子表格,用于检查多个帐户的 Instagram 关注者(使用公式),我想要一个脚本,只需将包含关注者数量的单元格复制到另一个单元格,并仅在有新信息可用时进行覆盖(跳过错误和空白) )。由于此公式经常出现错误或需要很长时间才能加载,因此我认为使用脚本来始终保持最新信息可见会很有趣。这可能吗?我找到了下面的公式,它有效,但不会跳过错误、空白或加载......并且无论如何都会覆盖。

function copyValuesOnly() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var source = ss.getRange('ALL!K8:K')
source.copyTo(ss.getRange('ALL!L8'), {contentsOnly: true});
};

我尝试过更改脚本,但我不太理解它。如果有人可以帮助我编写脚本(我认为很简单),我将非常感激。

google-apps-script google-sheets
1个回答
0
投票

此函数仅复制大于零的数字值,它会跳过其余部分,但在部分中使用 setValues() 来尽快存储数据,并且可以大大加快写入过程。

function copyValuesOnly() {
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getSheetByName("Sheet0");//update sheet name
  const sr = 2;//update data start row
  const vs = sh.getRange(sr, 11, sh.getLastRow() - sr + 1).getValues().flat();
  const obj = vs.reduce((acc,e,i) => {
    if(!isNaN(e) && e > 0) {//this determines what it good data that should be copied the other values will be skipp
      if(acc.buffer.length == 0) {
        acc.pA.push(acc.pA.length);
        acc[`${acc.pA[acc.pA.length - 1]}`] = {sr: i + sr, elems:[[e]]};
        acc.buffer.push(e)
      } else {
        acc[`${acc.pA[acc.pA.length - 1]}`].elems.push([e]);
        acc.buffer.push(e);
      }
    } else {
      if(acc.buffer.length > 0) {
        acc.buffer = [];
      }
    }
    return acc;
  },{pA:[],buffer:[]});
  obj.pA.forEach(p => {
    let v = obj[p].elems;
    sh.getRange(obj[p].sr,12,v.length,v[0].length).setValues(v)
  });
  const end = "is near";
}
© www.soinside.com 2019 - 2024. All rights reserved.