Исходя из нашего разговора о комментариях, я понимаю, что вы хотите скопировать все данные из листа Parent в указанные листы. Я предполагаю, что список листов находится в верхнем левом углу листа Parent . Если это не так, пожалуйста, простите меня и укажите мне, где находится список листов. Это код, который выполняет ваш запрос:
function sheetPopulator(spreadsheetID) {
var masterSheet = SpreadsheetApp.openById(spreadsheetID).getSheetByName(
"Parent");
var specifiedSheets = masterSheet.getRange(2, 1, masterSheet.getLastRow(), 1)
.getValues();
var lastRowMasterSheet = masterSheet.getLastRow();
var lastColumnMasterSheet = masterSheet.getLastColumn();
var allData = masterSheet.getRange(1, 1, masterSheet.getLastRow(), masterSheet
.getLastColumn()).getValues();
for (var i = 0; i < specifiedSheets.length; i++) {
if (SpreadsheetApp.openById(spreadsheetID).getSheetByName(specifiedSheets[
i]) != null) {
SpreadsheetApp.openById(spreadsheetID).getSheetByName(specifiedSheets[i])
.getRange(1, 1, lastRowMasterSheet, lastColumnMasterSheet).setValues(
allData);
}
}
}
Эта функция сначала соберет список указанных листов, а затем прочитает все данные из листа Parent . После этого код будет перебирать каждый элемент списка и, если этот элемент совпадает с именем листа, он скопирует все ранее прочитанные данные на этот лист.
Пожалуйста, примите это как один из многих возможные решения вашей проблемы. Не стесняйтесь обращаться ко мне за разъяснениями или дополнительной помощью.
ОБНОВЛЕНИЕ
Я прошу прощения, если предыдущий скрипт не удовлетворяет вашим запросам. Прочитав ваши новые комментарии, я изучил ваши таблицы и разработал новый код. Я протестировал этот новый скрипт на копиях ваших электронных таблиц, и он работает безупречно. Это код вопроса:
function sheetPopulatorII() {
var parentSheetID = "{PARENT SHEET ID}";
var childrenListSheet = SpreadsheetApp.openById(parentSheetID).getSheetByName(
"Childs");
var childrenList = childrenListSheet.getRange(2, 1, childrenListSheet
.getLastRow() - 1, 1).getValues();
for (var i = 0; i < childrenList.length; i++) {
childrenList[i][0] = childrenList[i][0].toString().substring(39, 83);
}
for (var i = 0; i < childrenList.length; i++) {
var children = SpreadsheetApp.openById(childrenList[i][0]);
children.getSheets()[0].setName("OLD SHEET");
SpreadsheetApp.openById(parentSheetID).getSheetByName("Master").copyTo(
children).setName("Data");
children.deleteSheet(children.getSheetByName("OLD SHEET"));
}
}
Я собираюсь объяснить этот код шаг за шагом. Сначала он открывает лист списка детей (внутри листа Parent ), используя .openById()
для открытия таблицы Parent , .getSheetByName()
чтобы открыть соответствующий лист, .getRange()
для выбора списка, .getLastRow()
, чтобы узнать, насколько длинен список (чтобы вы могли добавлять новые URL в будущем, используя тот же код) и .getValues()
для сбора данных.
После этого код будет перебирать список для преобразования URL-адресов в идентификаторы с .substring()
в обрезки частей без идентификатора. Затем он будет повторять список снова, но на этот раз он переименует старый лист с временным именем, используя .setName()
, скопирует лист Parent с .copyTo()
и удалите переименованный лист с помощью .deleteSheet()
. Этот подход копирует оба: значения и формулы. Пожалуйста, свяжитесь со мной снова, если вам нужна дополнительная помощь в разработке кода или его понимании.