Javascript 归档不同工作表中的行,并在我要取消归档(谷歌工作表)时将它们删除到初始位置(到初始工作表)
我在同一个电子表格中有4张表格:每个员工3张(Elisa、Miriam、Victor),存档1张(archive)。项目完成后,每个员工都可以通过复选框(数据验证)归档整行(这要感谢下面的脚本)。 此行将被删除到名为“存档”的工作表中 我在脚本编辑器中保存了这个在“Archive-Elisa”下工作的脚本 我面临两个问题。 首先,我为其他员工复制了此脚本,并将每个脚本保存在脚本编辑器的“Archive-NameEmployee”下。当我运行脚本时,它对Miriam或Victor不起作用:因此,如果我在Miriam或Victor的工作表中选中一个框,该行不会移动到存档。这只是对Elisa有效第二次,我非常绝望,因为我找不到将该行从存档中删除到其初始工作表的方法。我想说的是:当维克托从档案中取消选中盒子时,这一行将返回到它的工作表,而不是米里亚姆或伊莉莎的 非常感谢你的帮助 第一:如果你想为Miriam和Victor运行相同的脚本,你不需要复制脚本。 更准确地说,您不应该这样做,因为这将导致在同一个项目中有三个Javascript 归档不同工作表中的行,并在我要取消归档(谷歌工作表)时将它们删除到初始位置(到初始工作表),javascript,google-sheets,Javascript,Google Sheets,我在同一个电子表格中有4张表格:每个员工3张(Elisa、Miriam、Victor),存档1张(archive)。项目完成后,每个员工都可以通过复选框(数据验证)归档整行(这要感谢下面的脚本)。 此行将被删除到名为“存档”的工作表中 我在脚本编辑器中保存了这个在“Archive-Elisa”下工作的脚本 我面临两个问题。 首先,我为其他员工复制了此脚本,并将每个脚本保存在脚本编辑器的“Archive-NameEmployee”下。当我运行脚本时,它对Miriam或Victor不起作用:因此,如
onEdit
函数,这是不允许的
此外,复制脚本并将其保存在其他员工的名下也不会使其生效
相反,您需要修改脚本
线路
if(s.getName()=“Elisa”&&r.getColumn()==2&&r.getValue()==true){
指定仅当工作表名称为“Elisa”时才应存档该行。若要使其适用于其他员工,请将其修改为:
if((s.getName()=“Elisa”| | s.getName()=“Victor”| | s.getName()=“Miriam”)和&r.getColumn()=“2和&r.getValue()==true){
第二:
行var targetSheet=ss.getSheetByName(“Elisa”);
指定行应移回的工作表为“Elisa”
如果要将其移动到创建此行的人员的工作表-此行必须包含有关其创建者的一些信息。是否包含一些信息?如果没有,则必须在指定创建者的所有工作表中实现附加列
如果创建者名称存储在S列中,您可以更改代码的else
语句,如下所示:
else if(s.getName() == "Archive" && r.getColumn() == 2 && r.getValue() == false) {
var row = r.getRow();
var nameColumn = 19;
var name = s.getRange(row, nameColumn).getValue();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName(name);
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
}
基本上,您可以使用
var name=s.getRange(行、名列).getValue();
然后将变量的内容传递给
var targetSheet=ss.getSheetByName(name);
因此,目标工作表将根据行动态建立。非常感谢您的帮助,第一个问题是由于您的帮助才得以解决的!第二个问题是,在S列中的每一行,都会识别员工!S列中的名称与工作表名称“Elisa”、“Miriam”和“Victor”完全相同?是的,它是一个列,用于标识工作表的所有者和员工,然后感谢您的帮助,真的。最后,名称是W(因此我更新了var name column=22),W中的名称与工作表的名称完全相同。但我可能遗漏了一些内容,因为它在我这边不起作用。。。
else if(s.getName() == "Archive" && r.getColumn() == 2 && r.getValue() == false) {
var row = r.getRow();
var nameColumn = 19;
var name = s.getRange(row, nameColumn).getValue();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName(name);
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
}