Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 归档不同工作表中的行,并在我要取消归档(谷歌工作表)时将它们删除到初始位置(到初始工作表)_Javascript_Google Sheets - Fatal编程技术网

Javascript 归档不同工作表中的行,并在我要取消归档(谷歌工作表)时将它们删除到初始位置(到初始工作表)

Javascript 归档不同工作表中的行,并在我要取消归档(谷歌工作表)时将它们删除到初始位置(到初始工作表),javascript,google-sheets,Javascript,Google Sheets,我在同一个电子表格中有4张表格:每个员工3张(Elisa、Miriam、Victor),存档1张(archive)。项目完成后,每个员工都可以通过复选框(数据验证)归档整行(这要感谢下面的脚本)。 此行将被删除到名为“存档”的工作表中 我在脚本编辑器中保存了这个在“Archive-Elisa”下工作的脚本 我面临两个问题。 首先,我为其他员工复制了此脚本,并将每个脚本保存在脚本编辑器的“Archive-NameEmployee”下。当我运行脚本时,它对Miriam或Victor不起作用:因此,如

我在同一个电子表格中有4张表格:每个员工3张(Elisa、Miriam、Victor),存档1张(archive)。项目完成后,每个员工都可以通过复选框(数据验证)归档整行(这要感谢下面的脚本)。 此行将被删除到名为“存档”的工作表中

我在脚本编辑器中保存了这个在“Archive-Elisa”下工作的脚本

我面临两个问题。 首先,我为其他员工复制了此脚本,并将每个脚本保存在脚本编辑器的“Archive-NameEmployee”下。当我运行脚本时,它对Miriam或Victor不起作用:因此,如果我在Miriam或Victor的工作表中选中一个框,该行不会移动到存档。这只是对Elisa有效第二次,我非常绝望,因为我找不到将该行从存档中删除到其初始工作表的方法。我想说的是:当维克托从档案中取消选中盒子时,这一行将返回到它的工作表,而不是米里亚姆或伊莉莎的

非常感谢你的帮助

第一:如果你想为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);
  }