我正在为一本书的图书制作一个借阅图书馆,以显示当前借来的东西(在借阅表上)。每个其他工作表都是某人的名字(在我的例子中称为姓名),显示他们拥有的可以借用的东西。我希望在" 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);
}
}
答案 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工作表不再具有返回书籍的行。
是的,这是一种有点迂回的做事方式......但它确实有用。