Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.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
Google apps script 谷歌应用程序脚本从两个不同的电子表格中删除行_Google Apps Script_Google Sheets_Google Apps - Fatal编程技术网

Google apps script 谷歌应用程序脚本从两个不同的电子表格中删除行

Google apps script 谷歌应用程序脚本从两个不同的电子表格中删除行,google-apps-script,google-sheets,google-apps,Google Apps Script,Google Sheets,Google Apps,我做了很长时间的搜索,找不到我要找的东西。也许有人能帮忙 我有两个谷歌电子表格,电子表格1和电子表格2。我将只参考两个电子表格的表1 我需要一个脚本,删除在Spread1的B列中包含“Hello”的行,但只有在Spread2的B列中出现“Hello”时才删除 如果删除了行(如果两列中都出现了相同的单词),那么我希望脚本返回到Spread2并删除B列中带有“Hello”的行 因此,在脚本运行后,“Hello”将不会出现在两个电子表格的B列中 如果有人知道如何做到这一点,我将非常感激——你的宝贵帮助

我做了很长时间的搜索,找不到我要找的东西。也许有人能帮忙

我有两个谷歌电子表格,电子表格1和电子表格2。我将只参考两个电子表格的表1

我需要一个脚本,删除在Spread1的B列中包含“Hello”的行,但只有在Spread2的B列中出现“Hello”时才删除

如果删除了行(如果两列中都出现了相同的单词),那么我希望脚本返回到Spread2并删除B列中带有“Hello”的行

因此,在脚本运行后,“Hello”将不会出现在两个电子表格的B列中

如果有人知道如何做到这一点,我将非常感激——你的宝贵帮助将不胜感激

谢谢你的关注

编辑:

我有一个脚本,它删除了Spread2中B列中包含“hello”的行:

function deleteRow() {
  var ss = SpreadsheetApp.openById("SPREADSHEET KEY"); 
  SpreadsheetApp.setActiveSpreadsheet(ss);
  var s = ss.getSheetByName('Sheet1'); // change to your own
  var values = s.getDataRange().getValues();
  for( var row = values.length -1; row >= 0; --row )
     if (values[row][1] == 'Hello')
      s.deleteRow(parseInt(row)+1);
};

但我只希望它在Spread1的B列中出现“Hello”时这样做。有什么想法吗?谢谢

您可以在同一脚本中引用两个电子表格,并在步骤中处理这两个数组

function deleteRow() {
      var ss = SpreadsheetApp.openById("SPREADSHEET KEY"); 
      SpreadsheetApp.setActiveSpreadsheet(ss);
      var s = ss.getSheetByName('Sheet1'); // change to your own
      var values = s.getDataRange().getValues();
      var ss1 = SpreadsheetApp.openById("SPREADSHEET KEY1"); 
      var s1 = ss1.getSheetByName('Sheet1'); 
      var values1 = s1.getDataRange().getValues();
            // assumes sheets have same number of rows and you wish to delete corresponding rows in each
      for( var row = values.length -1; row >= 0; --row )
         if (values[row][1] == 'Hello' || values1[row][1] == 'Hello')
          s.deleteRow(parseInt(row)+1);  // parseInt is not required
          s1.deleteRow(parseInt(row)+1);
    }; 

为了简化此解决方案,我使用for
ArrayLib.find()
。您可以编写一个函数,在sheet2中的行中循环查找“Hello”

function deleteRow() {
  // This assumes script is independent of either sheet
  var s1 = SpreadsheetApp.openById("SPREADSHEET KEY1").getSheetByName('Sheet1'); 
  var s2 = SpreadsheetApp.openById("SPREADSHEET KEY2").getSheetByName('Sheet1'); 

  var values1 = s1.getDataRange().getValues();
  var values2 = s2.getDataRange().getValues();

  // Check if "Hello" appears in column B of Spread2.
  if (ArrayLib.find(values2, 1, 'Hello') != -1) {
    // Yes it does, so delete rows containing "Hello" in column B of Spread1
    for( var row = values.length -1; row >= 0; --row )
       if (values1[row][1] == 'Hello')
        s1.deleteRow(parseInt(row)+1);
    }
  }
}

您可以通过删除对
deleteRow()
的调用,以数组形式修改Spread1,然后调用
clearContent()
setValues()
将修改后的数组写回工作表来进一步优化此功能。这样,您就可以将
n
服务调用替换为2,并节省大量运行时间。

脚本的哪一部分有问题?-显示代码。您所描述的一切都可以使用电子表格服务轻松交付。我有一个脚本,用于删除Spread2中B列中包含“hello”的行:我有一个脚本,用于删除Spread2中B列中包含“hello”的行:函数deleteRow(){var ss=SpreadsheetApp.openById(“电子表格键”);SpreadsheetApp.setActiveSpreadsheet(ss);var s=ss.getSheetByName('Sheet1');//更改为您自己的var值=s.getDataRange().getValues();for(var row=values.length-1;row>=0;--row)if(values[row][3]='Need today')s.deleteRow(parseInt(row)+1);};但我只希望它在Spread1的B列中出现“Hello”时这样做。有什么想法吗?谢谢你,非常感谢你的回复。恐怕我的电子表格不会有相同的行数,并且我不想删除相应的行。Spread1可能包含多个带有“Hello”(在B列中)的行,如果“Hello”在Spread2(B列)中的任何一行中,我希望删除这些行。你知道我是如何做到这一点的吗?非常感谢