Как скопировать лист таблицы в другую таблицу, не создавая новую копию листа при использовании скрипта листа Google? - PullRequest
1 голос
/ 05 марта 2020

1.У меня есть 2 таблицы. давайте назовем их A и B.

2.A имеет лист, назовем его X, в то время как B также имеет лист, назовем его Y.

3.X имеет всю информацию, которую я хочу скопировать в Y, например, значения, форматы, изображения (которые я помещаю в ячейку)

4. Потому что в X есть картинки. Поэтому я не могу использовать importrange, чтобы получить картинки в Y, так как они были в разном распространении, поэтому я должен скопировать его в Y, используя скрипт.

5.Моя цель - просто скопировать X в Y без создания другого листа в B.

5. Сначала Code Я использую код, подобный этому

function CopySheet() {

    var ss = SpreadsheetApp.openById("A's ID");       //Get spread A
    var cs = SpreadsheetApp.getActiveSpreadsheet();   //Get spread B

    var sourceSheet = ss.getSheetByName("X's name");  //Get sheet X
    sourceSheet.copyTo(cs);                           //Copy X into B (create a new sheet Z)
 }

Хотя недавно созданный лист Z может показывать рисунки, но в Spread BI есть другой лист, в котором используются формулы, содержащие ссылки с Y. Если я удаляю Y и переименовываю Z Я обнаружил, что ссылки каждой формулы потеряны!

Так есть ли какой-нибудь способ со скриптами, который может копировать только X в существующий Y без создания нового листа?

1 Ответ

0 голосов
/ 06 марта 2020

Решение

ПРИМЕЧАНИЕ: Это решение предложено вам @Cooper, который предложил возможный ответ в комментарии к этому вопросу. Этот ответ опубликован в вики сообщества.

Чтобы достичь своей цели, вот что сработало для меня:

  1. Скопируйте свой лист X из A в B
  2. Скопируйте все содержимое из Copy of X в B в Y
  3. Удалить Copy of X

Следующий код пример того, как это будет работать. Вы можете найти объяснения этому в комментариях к коду:

function myFunction() {
  // get spreadsheets A and B
  var a = SpreadsheetApp.openById('ID SHEET A');
  var b = SpreadsheetApp.openById('ID SHEET B');
  
  // copy sheet X into spreadhseet B
  a.getSheetByName('X').copyTo(b);
  
  // copy the values of the cells in the sheet just created in spreadsheet B
  var range = b.getSheetByName('Copy of X').getRange(b.getSheetByName('Copy of X').getLastRow(), b.getSheetByName('Copy of X').getLastColumn());
  
  // paste all the content of the sheet X into Y (into the desired range of Y)
  range.copyTo(b.getSheetByName('Y').getRange('A1'));
  
  // delete the sheet that was created when passing the information from one spreadsheet to another
  b.deleteSheet(b.getSheetByName('Copy of X'));
  
}

Надеюсь, это помогло вам. Дайте мне знать, если вам нужно что-то еще или вы что-то не поняли. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...