将行内容复制到另一个 sheet 并清除除公式以外的数据

Copy row contents to another sheet and clear data except formulas

我需要将一行中的所有数据(包括公式和格式)复制到另一个选项卡(勾选复选框时),然后我想清除源上该行的内容sheet,但保留所有公式。我正在研究 Google 表格应用程序脚本。

我一直在尝试使用 range.getFormulas() 和 range.setFormulas(),但我没能成功。

这是我当前的清除所有内容的脚本。所以我希望在此基础上再接再厉。

这是 sheet 副本的可编辑 link: https://docs.google.com/spreadsheets/d/1vUjLrkwuhat28lInKDvCwJgY5BH6U85JDl_U61eeC2A/edit?usp=sharing

function onEdit(event) {
// assumes source data in sheet named Day to Day
// target sheet of move to named Total TO/YO
// getColumn with check-boxes is currently set to colu 36 or AJ
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();

if(s.getName() == "Day to Day" && r.getColumn() == 36 && r.getValue() == true) {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Total TO/YO");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).copyTo(target);
s.getRange(row, 1, 1, numColumns).clearContent();
}
}

在此先感谢您给我的帮助!

如果没有触发器

提供的事件对象,这不可能运行
function onEdit(e) {
  //e.source.toast('Entry')
  var sh = e.range.getSheet();
  if (sh.getName() == "Day to Day" && e.range.columnStart == 36 && e.value == "TRUE") {
    var numColumns = sh.getLastColumn();
    var tsh = e.source.getSheetByName("Total TO/YO");
    var trg = tsh.getRange(tsh.getLastRow() + 1, 1);
    sh.getRange(e.range.rowStart, 1, 1, numColumns).copyTo(trg);
    sh.getRange(e.range.rowStart, 1, 1, numColumns).getFormulas().flat().forEach((f, i) => {
      if (!f) {
        sh.getRange(e.range.rowStart, i + 1).setValue('')
      }
    })
  }
}

如果您遇到错误 TypeError: Cannot read property 'range' of undefined,可能是因为您从脚本编辑器 运行 它而没有提供事件对象。