#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. это именно то, что я хотел… Спасибо