Я пытаюсь создать скрипт, который позволяет пользователю копировать выделенный диапазон ячеек в другой неоткрытый документ листа Google. Я могу заставить его работать, если лист, на который я копирую данные, находится в текущем документе, но я НЕ могу понять, как сделать копию данных в другую электронную таблицу.
Я пробовал openById или openbyUrl, но постоянно получаю следующую ошибку:
«Целевой диапазон и исходный диапазон должны быть в одной электронной таблице».
function copyToDifferentDocument() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
// *** Have to figure out how to make the target a different document!!!! ***
var target = SpreadsheetApp.openById("targetsheetIDgoeshere");
/*
Next we need to pick the particular sheets within those spreadsheets.
Let's say your row is on the sheet named "New Stuff", and you have a sheet in the target spreadsheet named "Archive".
*/
var source_sheet = ss.getSheetByName("New Stuff");
var target_sheet = target.getSheetByName("Archive");
// The below makes the highlighted cells the range that will be copied.
var source_range = source_sheet.getActiveRange();
var last_row = target_sheet.getLastRow();
target_sheet.insertRowAfter(last_row);
var target_range = target_sheet.getRange("A"+(last_row+1)+":G"+(last_row+1));
// Take the highlighted rant and put it on the last row of the target sheet.
source_range.copyTo(target_range);
}
Я пытаюсь скопировать выделенный диапазон на лист в другом документе листа Google.
Если я правильно понимаю, как насчет этой модификации? Я думаю, что есть 2 шаблона для вашей ситуации.
В этом шаблоне копируются только значения. Пожалуйста, измените следующим образом. Если вам не требуется копировать формат, вы можете использовать это.
From:target_sheet.insertRowAfter(last_row);
var target_range = target_sheet.getRange("A"+(last_row+1)+":G"+(last_row+1));
// Take the highlighted rant and put it on the last row of the target sheet.
source_range.copyTo(target_range);
To:
var values = source_range.getValues();
target_sheet.getRange(last_row + 1, 1, values.length, values[0].length).setValues(values);
В этом шаблоне копируются как значения, так и форматы. Пожалуйста, измените следующим образом. К сожалению, copyTo()
может копировать диапазон в диапазон только в той же электронной таблице. Эту ситуацию также можно увидеть в сообщении об ошибке вашего вопроса. Таким образом, в этой модификации сначала лист копируется в целевую электронную таблицу. Затем диапазон копируется.
target_sheet.insertRowAfter(last_row);
var target_range = target_sheet.getRange("A"+(last_row+1)+":G"+(last_row+1));
// Take the highlighted rant and put it on the last row of the target sheet.
source_range.copyTo(target_range);
To:
if (last_row > 0) target_sheet.insertRowAfter(last_row);
var target_range = target_sheet.getRange(last_row + 1, 1);
var copiedsheet = source_sheet.copyTo(target);
copiedsheet.getRange(source_range.getA1Notation()).copyTo(target_range);
target.deleteSheet(copiedsheet);
Если я неправильно понял ваш вопрос, прошу прощения.
@Адам Кристиансен Добро пожаловать. Спасибо, что дали мне знать. Я рад, что ваша проблема была решена. Что касается вашего нового вопроса, он отличается от вашего первоначального вопроса. Поэтому, пожалуйста, опубликуйте его как новый вопрос, включая подробную информацию о вашей новой проблеме. Таким образом, это поможет пользователям подумать о вашем решении. В то время, пожалуйста, закройте этот вопрос. stackoverflow.com/help/accepted-answer
Tanaike - Pattern 2 - это именно то, что я искал. Работал как шарм. Большое спасибо! Теперь я перехожу к следующей части этого проекта, а именно: «Как разрешить пользователю выбирать из списка листов в целевом документе вместо того, чтобы жестко кодировать конкретный лист? (который был «архивным "в моем приведенном выше коде.)"... Еще раз спасибо!