从多张纸复制行并删除

问题描述 投票:1回答:1

我不熟悉Google中的JavaScript和脚本。我一直在研究Google Spreadsheet。我需要从多个工作表中复制行并将它们粘贴到“已关闭”工作表中,然后仅在B列中找到单词Cerrado时才从发现的工作表中删除它们。当我运行脚本时,它仅在工作表Material de Papeleria上运行,并且仅是第一行。如果找到Cerrado,它将复制并粘贴。我会手动运行此脚本。如何使它在所有页面和行上正确运行?

function deleteRow(){
   var ss=SpreadsheetApp.getActiveSpreadsheet();

    var tabs = [
      'Mantenimiento',
      'Material de papeleria',
      'Transporte',
      'Recursos para Eventos',
      'Mobiliario',
      'Material de Limpieza (e Higiene)'
    ];
  var sh1=ss.getSheetByName('closed');

  for (var i = 0; i < tabs.length; i++) {
    var sheet=ss.getSheetByName(tabs[i]);
    var range=sheet.getRange('A:AR').getValues();
      if(range[i][1]=='Cerrado')
      {
        sh1.appendRow(range[i]);
        sheet.deleteRow(i+1)
      }
    }
  }
javascript google-sheets delete-row
1个回答
1
投票

您需要一个嵌套循环来处理range中的数据。变量i跟踪您在tabs数组中的位置。在range中处理数据时重用它是没有意义的。

此外,您将需要以相反的顺序处理行,否则,在删除行时将导致行索引不匹配。

function deleteRow(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();

  var tabs = [
      'Mantenimiento',
      'Material de papeleria',
      'Transporte',
      'Recursos para Eventos',
      'Mobiliario',
      'Material de Limpieza (e Higiene)'
  ];

  var closedSheet = ss.getSheetByName('closed');

  for (var i = 0; i < tabs.length; i++) {
    var sheet = ss.getSheetByName(tabs[i]);
    var range = sheet.getRange('A:AR').getValues();

    for (var j = range.length-1; j >= 0; j--) {
      if (range[j][1] == 'Cerrado') {
        sh1.appendRow(range[j]);
        sheet.deleteRow(j+1)
      }
    }
  }
© www.soinside.com 2019 - 2024. All rights reserved.