编辑单元格时,在选项卡之间来回移动行

时间:2016-06-23 02:04:11

标签: javascript google-apps-script google-sheets

我正在为一本书的图书制作一个借阅图书馆,以显示当前借来的东西(在借阅表上)。每个其他工作表都是某人的名字(在我的例子中称为姓名),显示他们拥有的可以借用的东西。我希望在" Borrowed"时将行复制到Borrowed表。在C列中,当它改回"返回"从Borrowed或Name中,将其从Borrowed表中删除。所以他们需要以某种方式联系起来。我之前尝试过使用query =但是无法在Borrowed上编辑本书的状态,只会破坏该行。

此代码正在将行复制到Borrowed,但我不确定如何完成返回的部分。

    function onEdit(event) {
// source data in sheet named Name
// target sheet named Borrowed
// test column with yes/no is col 3 or C
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();

if(s.getName() == "Name" && r.getColumn() == 3 && r.getValue() == "Borrowed") {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Borrowed");
  var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1,1,numColumns);
    s.getRange(row, 1, 1, numColumns).copyTo(target);

}
    }

1 个答案:

答案 0 :(得分:1)

这是一种混合方法,它在一个方向上使用电子表格函数(从主表到借用),以及用于向相反方向移动事物的脚本。

借来的工作表包含公式

=iferror(filter({row(Master!A:C), Master!A:C}, Master!C:C = "Borrowed"), "No books are borrowed at present")

显示借书的记录(假设在A:C栏中),前面是主表中每本书的行号。行号有助于链接工作表之间的记录。 (作为副作用,Borrowed工作表中的数据向右移动一列)。

如果图书状态更改为从主页面退回,则会自动离开借阅。棘手的部分是处理Borrowed表的编辑。这就是这个脚本的用途。

function onEdit(e) {
  var ss = e.source;
  var sheet = e.range.getSheet();
  var row = e.range.getRow();
  var col = e.range.getColumn();
  var entry = (typeof e.value == 'object' ? '' : e.value.toLowerCase());
  if (sheet.getName() == 'Borrowed' && col == 4 && entry == 'returned') {
    e.range.clear();
    SpreadsheetApp.flush();
    var originalRow = sheet.getRange(row, 1).getValue();
    ss.getSheetByName('Master').getRange(originalRow, 3).setValue('Returned');
  }
}

脚本检查用户是否确实在表Borrowed的第4列(D)中放置了“返回”(不区分大小写)。如果是这样,它会记下行号,清除已编辑的单元格。这将恢复filter函数的功能,将工作表返回到先前的状态。然后,脚本从Borrowed的A列读取原始行号,并编辑Master sheet的相应单元格。作为此编辑的结果,Borrowed工作表不再具有返回书籍的行。

是的,这是一种有点迂回的做事方式......但它确实有用。