首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过触发器将一行数据从一个工作表发送/存档到另一个工作表?

如何通过触发器将一行数据从一个工作表发送/存档到另一个工作表?
EN

Stack Overflow用户
提问于 2021-03-22 00:42:54
回答 2查看 77关注 0票数 0
代码语言:javascript
复制
function onEdit() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getActiveSheet();
  var r = ss.getActiveRange();
  var rows = r.getRow();
  var cell = s.getRange(rows, r.getColumn());

  if (s.getName() == "Sheet" && r.getColumn() == 2 && cell.getValue() == "Archive" || cell.getValue() == "Cancel" || cell.getValue() == "Canceled" || cell.getValue() == "Cancelled") { // "Sheet" is original sheet, 2 is column to search for trigger
  var numColumns = s.getLastColumn();
  var targetSheet = ss.getSheetByName("Sheet Archive"); // "Sheet Archive" is the 2nd/target sheet
  var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
  s.getRange(rows, 1, 1, numColumns).moveTo(target);
  s.deleteRow(rows);
  Logger.log(target);
  }

我想找一种方法将一行数据从一个工作表(工作表)发送到另一个(工作表存档)。如果" archive“写在一行的第二列中,它会将数据发送到归档表。

我希望数据层层堆叠。假设我将第20行存档在第1页中,我希望它将数据发送到第9行。如果我归档第21、22、30、31等行,它应该一个接一个地堆叠归档的行,所以在存档的第9、10、11、12、13行中。

我以前使用过的代码,但后来我重新设计了工作表,它们停止了工作。当我输入归档时,它会从表#1中删除它,但是在归档表中它会丢失。因此,它是“发送”它,但它没有出现或正确粘贴它。有更好的办法吗?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-23 16:10:32

我已经清理过你的代码了,但基本上没问题。使用getActiveRangegetActiveSheet,使用触发器参数提供的范围。这就是它的样子:

代码语言:javascript
复制
function onEdit(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var r = e.range;
  var s = r.getSheet();

  var row = r.getRow();
  var col = r.getColumn();
  var cell = s.getRange(row, col);
  var archiveStates = ["Archive", "Cancel", "Canceled", "Cancelled"];

  if (s.getName() === "Sheet" && r.getColumn() === 2 && archiveStates.includes(cell.getValue())) {
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Sheet Archive"); // "Sheet Archive" is the 2nd/target sheet
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
  }
}

我还改变了您测试选项的方式,并使用了严格的等式(注意这个)。

参考文献

票数 1
EN

Stack Overflow用户

发布于 2021-03-22 01:17:05

传输数据以选择工作表并删除当前行

代码语言:javascript
复制
function onEdit(e) {
  const sh = e.range.getSheet();
  const cvs = ['Archive', 'Cancel', 'Canceled', 'Cancelled'];//target sheets
  const idx = cvs.indexOf(e.value);//to get sheetname
  if (sh.getName() == 'Sheet' && e.range.columnStart == 2 && ~idx && e.range.rowStart>1) {
    const vs = sh.getRange(e.range.rowStart, 1, 1, sh.getLastColumn()).getValues();
    const tsh = e.source.getSheetByName(cvs[idx]);
    tsh.getRange(tsh.getLastRow() + 1, 1, vs.length, vs[0].length).setValues(vs);
    sh.deleteRow(e.range.rowStart);//delete current row
  }
}

Sheet1:

比特不~

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66739029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档