首页 > 解决方案 > 谷歌表分叉(不适用于谷歌表单响应表)

问题描述

此功能工作正常。当前工作表不是 Google 表单响应表时。我正在使用(每分钟)触发器

图像:将数据 (mainData) 表打磨到 (shareData1) 表

这里的问题是,当我使用 Google Forms 响应表时,此功能将不再起作用。它显示一个错误。 错误图像

在降级的错误图像中,我手动运行此功能,同样的错误显示在 Executions AppScript 面板中。

function doneCopy() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("mainData");
  var values = sheet.getRange(1, 3, sheet.getLastRow(), 1).getValues();

  var moveRows = values.reduce(function(ar, e, i) {
    if (e[0] == "Paid" ) ar.push(i + 1)
    return ar;

  }, []);

  var targetSheet = ss.getSheetByName("shareData1");

  moveRows.forEach(function(e) {
    sheet.getRange(e, 1, 1, sheet.getLastColumn()).moveTo(targetSheet.getRange(targetSheet.getLastRow() + 1, 1));
  });
  moveRows.reverse().forEach(function(e) {sheet.deleteRow(e)});
}

标签: google-apps-scriptgoogle-sheetsgoogle-sheets-apispreadsheetgoogle-forms

解决方案


function doneCopy() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sh = ss.getSheetByName("mainData");
  const tsh = ss.getSheetByName("shareData1");
  const vs = sh.getRange(1, 3, sh.getLastRow(), 1).getValues().flat();
  const n = sh.getLastColumn();
  let d = 0;
  vs.forEach((e, i) => {
    if (e == 'Paid') {
      sh.getRange(i + 1, 1, 1, n).copyTo(tsh.getRange(tsh.getLastRow() + 1, 1));
      sh.deleteRow(i + 1 - d++);
    }
  });
}

我不确定您的其他需求是什么,但我会做出最好的猜测。

function doneCopy() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sh = ss.getSheetByName("mainData");
  const tsh = ss.getSheetByName("shareData1");
  const vs = sh.getRange(1, 3, sh.getLastRow(), 1).getValues().flat();
  const n = sh.getLastColumn();
  const a = ['Paid','Process'];
  let d = 0;
  vs.forEach((e, i) => {
    if (~a.indexOf(e)) {
      sh.getRange(i + 1, 1, 1, n).copyTo(tsh.getRange(tsh.getLastRow() + 1, 1));
      sh.deleteRow(i + 1 - d++);
    }
  });
}

推荐阅读