首页 > 解决方案 > 存档脚本随机停止处理工作表上已填充的数据

问题描述

我的脚本以前没有问题,每天在其列 (5) 的下一行填充一次数据。但是,它停止了工作。现在它只能在没有以前数据的空白纸上工作。前两列包含相同的脚本,但仍在工作。这只是一个随机的错误吗?当它执行时,它声称它成功了

function test() {
  const ss = SpreadsheetApp.openById('sourceID');
  const sh = ss.getSheetByName('forecast');
  const data = [[sh.getRange('B126').getValue(),new Date()]];
  const tss = SpreadsheetApp.openById('archiveID');
  const ts = tss.getSheetByName('Archive');
  ts.getRange(getColumnHeight() + 1, 5, data.length, data[0].length).setValues(data);
}

function getColumnHeight(col, sh, ss) {
  var ss = ss || SpreadsheetApp.openById('archiveID');
  var sh = sh || ss.getSheetByName('Archive');
  var col = col || 5;
  const rcA = sh.getRange(1, col, sh.getLastRow(), 1).getValues().flat().reverse()
  let s = 0;
  for (let i = 0; i < rcA.length; i++) {
    if (rcA[i].toString().length == 0) {
      s++;
    } else {
      break;
    }
  }
  return rcA.length - s;
}

在此处输入图像描述

标签: google-apps-script

解决方案


试试这种方式:

function test() {
  const ss = SpreadsheetApp.openById('ssid');
  const sh = ss.getSheetByName('forecast');
  const data = [[sh.getRange('B126').getValue(), new Date()]];
  const tss = SpreadsheetApp.openById('Archive Id');
  const ts = tss.getSheetByName('Archive');
  ts.getRange(getMyColumnHeight(5, ts, tss) + 1, 5, data.length, data[0].length).setValues(data);
}

function getMyColumnHeight(col, sh, ss) {
  if (col && sh && ss) {
    var rcA = [];
    if (sh.getLastRow()) { rcA = sh.getRange(1, col, sh.getLastRow(), 1).getValues().flat().reverse(); }
    let s = 0;
    for (let i = 0; i < rcA.length; i++) {
      if (rcA[i].toString().length == 0) {
        s++;
      } else {
        break;
      }
    }
    return rcA.length - s;
  } else {
    throw "Invalid number of parameters";
  }
}

推荐阅读