Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.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工作表中删除一系列特定工作表中所有未受保护的行_Google Apps Script_Google Sheets_Google Sheets Macros - Fatal编程技术网

Google apps script 如何使用应用程序脚本从Google工作表中删除一系列特定工作表中所有未受保护的行

Google apps script 如何使用应用程序脚本从Google工作表中删除一系列特定工作表中所有未受保护的行,google-apps-script,google-sheets,google-sheets-macros,Google Apps Script,Google Sheets,Google Sheets Macros,我的谷歌工作表中有几个受保护的范围,例如A2到F40,然后是A45到F90。我使用一个按钮(菜单——子菜单)来完成这个受保护的范围。但是,在一系列使用字母和数字的特定表格中,很少有行数据未受保护(例如ICT4113、MATH4104或HUM4119)。很少有其他图纸的名称只包含字母,不需要此功能 如何在没有任何触发器的情况下,在函数onOpen()中的一系列特定工作表中删除这些未受保护的数据行。当我想删除时,我会按一个子菜单 我相信你的目标如下 您希望使用Google Apps脚本完全删除没有

我的谷歌工作表中有几个受保护的范围,例如A2到F40,然后是A45到F90。我使用一个按钮(菜单——子菜单)来完成这个受保护的范围。但是,在一系列使用字母和数字的特定表格中,很少有行数据未受保护(例如ICT4113、MATH4104或HUM4119)。很少有其他图纸的名称只包含字母,不需要此功能


如何在没有任何触发器的情况下,在函数onOpen()中的一系列特定工作表中删除这些未受保护的数据行。当我想删除时,我会按一个子菜单

我相信你的目标如下

  • 您希望使用Google Apps脚本完全删除没有特定工作表保护范围的行。
    • 有几个特定的工作表需要实现这一点
  • 您希望通过Google电子表格上的自定义菜单运行脚本
对于这个问题,这个答案如何?此示例脚本的流程如下所示

  • 检索数据范围
  • 从受保护的范围创建对象。这用于从清除的行中删除
  • 创建使用对象清除行的范围列表
  • 删除不包含受保护范围的行的行
  • 示例脚本: 请将以下脚本复制并粘贴到脚本编辑器,设置工作表名称,然后重新打开电子表格。通过此操作,可以设置自定义菜单。运行
    myFunction
    时,将删除不受保护范围的行的单元格

    function onOpen() {
      SpreadsheetApp.getUi().createMenu('Custom Menu').addItem('run script', 'myFunction').addToUi();
    }
    
    function myFunction() {
      const ss = SpreadsheetApp.getActiveSpreadsheet();
      ss.getSheets().filter(s => /\d/.test(s.getSheetName())).forEach(sheet => {
        // 1. Retrieve data range.
        const dataRange = sheet.getDataRange();
    
        // 2. Create an object from the protected range. This is used for removing from the cleared rows.
        const protectedRanges = sheet.getProtections(SpreadsheetApp.ProtectionType.RANGE).map(e => {
          const r = e.getRange();
          const start = r.getRow();
          return {start: start, end: r.getNumRows() + start - 1};
        });
    
        // 3. Create range list for clearing rows using the object.
        let rangeList = [];
        for (let r = 2; r <= dataRange.getNumRows(); r++) {
          let bk = false;
          for (let e = 0; e < protectedRanges.length; e++) {
            if (protectedRanges[e].start == r) {
              r = protectedRanges[e].end;
              bk = true;
              break;
            }
          }
          if (!bk) rangeList.push(`A${r}:${r}`);
        }
    
        // 4. Delete the rows without the rows of the protected ranges.
        sheet.getRangeList(rangeList).getRanges().reverse().forEach(r => sheet.deleteRow(r.getRow()));
      });
    }
    
    函数onOpen(){ SpreadsheetApp.getUi().createMenu('custommenu').addItem('runscript','myFunction').addToUi(); } 函数myFunction(){ const ss=SpreadsheetApp.getActiveSpreadsheet(); ss.getSheets().filter(s=>/\d/.test(s.getSheetName()).forEach(sheet=>{ //1.检索数据范围。 const dataRange=sheet.getDataRange(); //2.从受保护范围创建对象。用于从清除的行中删除。 const protectedRanges=sheet.getProtections(SpreadsheetApp.ProtectionType.RANGE).map(e=>{ 常数r=e.getRange(); const start=r.getRow(); 返回{start:start,end:r.getNumRows()+start-1}; }); //3.创建使用对象清除行的范围列表。 让rangeList=[]; for(设r=2;r sheet.deleteRow(r.getRow()); }); } 参考资料:

    请注意,我需要删除所有未受保护的数据行。不仅仅是清理。我需要删除电子表格中一系列特定表格的数据行。例如,那些具有字母数字名称的工作表,如ICTE4113、MATH4115、HUM4118等。我在这些工作表中没有其他选项卡,如Master(仅字母名称),它不需要此功能。@Aktaruzzaman Liton感谢您的回复。对于给您带来的不便和我糟糕的英语水平,我深表歉意。要完全删除多个特定图纸中不带保护范围的行。从你的回答中我明白了这一点。为此,我更新了我的答案。你能确认一下吗?如果这不是你期望的方向,我再次道歉。你是对的。你能自动记下表格的名字吗。在我的电子表格中有8个主题/表格/选项卡,它们的代码像ICTE4113、MATH4110、HUM4103等(没有空格,只有字母和数字),还有其他选项卡也像Master、TempDataSet(只有字母,没有数字)。首先,我们需要收集所有同时包含字母和数字的工作表名称,并通过按子菜单(如REFRESH)将未受保护的数据范围删除到所有工作表名称中。“就这些了。”阿克塔鲁扎曼·利顿感谢您的回复。给您带来的不便,我深表歉意。我更新了我的答案以便你回复。你能确认一下吗?它不能正常工作。我把它换成了一张纸。该图纸具有A2:F84保护范围,然后再次具有A85:F90保护范围。然后我增加了一些出席人数。当我执行您的代码时,它正在删除A85:F90所有数据行以及标题行。所以在最后,它仍然是A1:F83保护的。请注意,代码在A1到F1(第一行是标题行)上没有任何作用。表中有许多保护范围,如A2:F84、A85:F90、A95:F100。您的代码不应该对所有受保护的范围和标题行执行任何操作,所有其他行都应该删除。