Мне нужно скопировать значения нескольких диапазонов данных из моей основной электронной таблицы в другую электронную таблицу, а затем скопировать другой диапазон данных обратно в основную электронную таблицу.
Вот мои примеры таблиц:
Основная таблица (два листа: 1 – лист со вставленными значениями рядом со столбцами комментариев пользователей. 2 — лист с кнопкой, которая запускает скрипт приложений)
Таблица оперативных данных (извлекает и форматирует необходимые данные из других таблиц).
Ранее я использовал .copyTo() для копирования значений данных и вставки их в другое место в той же электронной таблице. Однако этот метод нельзя использовать для копирования данных в другую электронную таблицу. Копирование данных из нескольких диапазонов также вызывает у меня проблемы. Вот мой код:
function RefreshSheetData() {
// 1a. Run the script when a button is pressed (Main Spreadsheet - ‘Update report button!A3’)
// 1b. Run the script at a certain time (every Monday at 10 AM)
// 1c. Run the script when data in a sheet is replaced with new data via a formula – NOT POSSIBLE.
// 2. Copy email address and user comments (Main Spreadsheet - Editable report - J3:J & AM3:AR)
// 3. Clear the “Updated user comments” sheet below the header row (Live data Spreadsheet - Updated user comments - A2:G)
// 4. Paste the values (Live data Spreadsheet - Updated user comments - A2:G)
// 5. Clear the “Editable report” below the header rows (Main Spreadsheet - Editable report – B3:AR)
// 6. Copy the Live sheet (which should now include the most recent user comments via array vlookup) (Live data Spreadsheet - live data – A3:AQ)
// 7. Paste the values (Main Spreadsheet - Editable report - B3:AR)
// 8. Add the (United Kingdom) time and date (Main Spreadsheet - Update report button - A10)
// 9. Add the time and date (Live data Spreadsheet - Updated user comments - J1)
ScriptApp.newTrigger('RefreshSheetData')
.timeBased()
.onWeekDay(ScriptApp.WeekDay.MONDAY)
.atHour(10)
.create();
var ss = SpreadsheetApp.getActiveSpreadsheet();
var startSheet = ss.getSheetByName('Editable report');
var sourceRange = startSheet.getRangeList(['J3:J', 'AM3:AR']);
var sourceValues = sourceRange.getValues();
var target = SpreadsheetApp.openById('1OHQHefYvE4vZZPr8jgziy_L3-UBf1WSoKzMWQ8LUz6w');
var targetSheet = target.getSheetByName('Updated user comments');
var clearTargetRange = targetSheet.getRange('A2:G').clearContent();
var targetRange = targetSheet.getRange('A2').setValues(sourceValues);
var liveTargetSheet = target.getSheetByName('Live data');
var liveSourceRange = liveTargetSheet.getRange('A3:AQ').getValues();
var clearMainRange = startSheet.getRange('B3:AR').clearContent();
var startRange = startSheet.getRange('B3').setValues(liveSourceRange);
SpreadsheetApp.getActive().getRange('A10').setValue(new Date());
targetSheet.getRange('J1').setValue(new Date())
}
Любые советы будут оценены. Спасибо.
Часть моего вопроса заключалась в том, как запустить скрипт при изменении вывода формулы. Это невозможно. Ни триггеры .onEdit, ни .onChange не работают, поскольку они реагируют только на действия пользователя. Они не будут выполняться при изменении значения IMPORTRANGE или альтернативной формулы.