Как копировать ячейки из одной электронной таблицы на лист в другой электронной таблице? - PullRequest
0 голосов
/ 08 апреля 2019

Я пытаюсь создать сценарий, который позволяет пользователю копировать выделенный диапазон ячеек в другой неоткрытый документ листа 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.

1 Ответ

0 голосов
/ 08 апреля 2019
  • Вы хотите скопировать активный диапазон на листе «Новые материалы» в активной электронной таблице в последнюю строку на листе «Архив» в электронной таблице «targetheetIDgoeshere»

Если мое понимание верно, как насчет этой модификации? Я думаю, что есть две модели для вашей ситуации.

Шаблон 1:

В этом шаблоне копируются только значения. Пожалуйста, измените следующим образом. Если вам не нужно копировать формат, вы можете использовать это.

От:
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);
Для того, чтобы:
var values = source_range.getValues();
target_sheet.getRange(last_row + 1, 1, values.length, values[0].length).setValues(values);

Шаблон 2:

В этом шаблоне копируются как значения, так и форматы. Пожалуйста, измените следующим образом. К сожалению, 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);
Для того, чтобы:
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);

Ссылки:

Если я неправильно понял ваш вопрос, прошу прощения.

...