Сценарий Google Sheets Apps, соответствующий исходным целевым листам с одноименными вкладками

#javascript #google-apps-script #google-sheets

#javascript #google-apps-script #google-sheets

Вопрос:

Мне нужно скопировать значения между вкладками исходных и целевых листов. Вкладки имеют одинаковые имена H1, H2, H3 на обоих листах. Копирование выполняется между вкладками с одинаковыми именами, т.Е. H1-> H1, H2-> H2 и т. Д. Сценарий прилагается ниже. Каждый раз, когда мне нужно запустить скрипт, я меняю имя листа вручную. Как сделать это за один раз?

     function updateSourceToTarget(sourceID,sourceName,targetID,targetname){
  var source = SpreadsheetApp.openById("Source").getSheetByName("H1");
var destination = SpreadsheetApp.openById("Dest").getSheetByName("H1");
var sourcelastRow = source.getLastRow();
var sourcelastCol = source.getLastColumn();
var sourcedata = source.getRange(1,1,sourcelastRow,sourcelastCol).getValues();
destination.getRange(1,1,sourcelastRow,sourcelastCol).setValues(sourcedata);
}
 

Ответ №1:

Объяснение:

Выполните итерацию по массиву имен листов ["H1","H2","H3"] с помощью цикла forEach.

  • Поместите все имена листов в этот массив, и скрипт выполнит задачу для каждого набора исходных и целевых листов.

Решение:

 function updateSourceToTarget(sourceID,sourceName,targetID,targetname){         
    const sheetNames = ["H1","H2","H3"];
    sheetNames.forEach(h=>{                             
          let source = SpreadsheetApp.openById("Source").getSheetByName(h);
          let destination = SpreadsheetApp.openById("Dest").getSheetByName(h);
          let sourcelastRow = source.getLastRow();
          let sourcelastCol = source.getLastColumn();
          let sourcedata = source.getRange(1,1,sourcelastRow,sourcelastCol).getValues();
          destination.getRange(1,1,sourcelastRow,sourcelastCol).setValues(sourcedata);                                                                                                                                         
    });    
}
 

и я предполагаю, что это окончательная версия, которая использует параметры функции:

 function updateSourceToTarget(sourceID,targetID){ 
    const sheetNames = ["H1","H2","H3"];  
    sheetNames.forEach(h=>{                             
           let source = SpreadsheetApp.openById(sourceID).getSheetByName(h);
           let destination = SpreadsheetApp.openById(targetID).getSheetByName(h);
           let sourcelastRow = source.getLastRow();
           let sourcelastCol = source.getLastColumn();
           let sourcedata = source.getRange(1,1,sourcelastRow,sourcelastCol).getValues();
           destination.getRange(1,1,sourcelastRow,sourcelastCol).setValues(sourcedata);                                                                                                                                         
    });  
}
 

Комментарии:

1. это именно то, что я хотел… Спасибо