Как скопировать / вставить с одной вкладки Google Sheet на другой лист Google и указать вкладку на целевом листе Google? - PullRequest
0 голосов
/ 16 апреля 2019

Я создаю скрипт приложения Google для документа Google Sheet. Мне нужно разрешить пользователю выбирать диапазон ячеек в исходном листе Google, а затем иметь возможность выбрать конкретную вкладку на целевом листе Google, чтобы вставить эти данные в.

Мне удалось жестко закодировать вкладку TARGET, которая находится на другом листе Google, но я не смог выяснить, как это сделать, чтобы пользователь мог выбрать конкретную вкладку таким образом, чтобы скопировать данные.

Это мое первое занятие кодированием. Я новичок на 100%.

function GeneralToTracking() {

  /*
  This code defines the Source Google Sheet Doc and the Target Google Sheet Doc. These are two
  different google sheet docs. They are NOT 2 sheets in the same google sheet doc.
  */

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var target = SpreadsheetApp.openById("1yxfpC7Yag9GAkoe5BUjjg12cUhGmGr5ryeGl87JmZqU");

  /*
  This code is to pick specific sheets within the Source & Target Sheet.
     Source Google Sheet = "New Stuff"
     Target Google Sheet = "Archive"
  */

  var source_sheet = ss.getActiveSheet();
  var target_sheet = target.getSheetByName("Archive"); // ++++ TO DO: Need to present the user with a list of tabs in the Target doc. Prompt w/ Radio Buttons. ++++

  /* 
  This code determines the from-range and the to-range to copy & says where to put it in the Target.
  */

  var source_range = source_sheet.getActiveRange();
  var last_row = target_sheet.getLastRow();

//  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);

}

1 Ответ

0 голосов
/ 16 апреля 2019

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

// ------------ GENERAL GOOGLE SHEET DOC TO TRACKING GOOGLE SHEET DOC ------------

function GeneralToTracking(tName) {
  /*
  This code defines the Source Google Sheet Doc and the Target Google Sheet Doc. These are two
  different google sheet docs. They are NOT 2 sheets in the same google sheet doc.
  */

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var target = SpreadsheetApp.openById('1yxfpC7Yag9GAkoe5BUjjg12cUhGmGr5ryeGl87JmZqU');

  /*
  This code is to pick specific sheets within the Source & Target Sheet.
     Source Google Sheet = "New Stuff"
     Target Google Sheet = "Archive"
  */

  var source_sheet = ss.getActiveSheet(); // ++++ TO DO: Need to make this work on whatever sheet the user is on currently, instead of being hardcoded. ++++
  var target_sheet = target.getSheetByName(tName); // ++++ TO DO: Need to present the user with a list of tabs in the Target doc. Prompt w/ Radio Buttons. ++++

  /* 
  This code determines the from-range and the to-range to copy & says where to put it in the Target.
  */

  var source_range = source_sheet.getActiveRange();
  var sValues = source_range.getValues();
  var last_row = target_sheet.getLastRow();

  //  source_range.copyTo(target_range);

  if (last_row > 0) target_sheet.insertRowAfter(last_row);
  var target_range = target_sheet.getRange(last_row + 1, 1, sValues.length, sValues[0].length);
  target_range.setValues(sValues);

  // double check and enable these when above test is pass
  // var copiedsheet = source_sheet.copyTo(target);
  // copiedsheet.getRange(source_range.getA1Notation()).copyTo(target_range);
  // target.deleteSheet(copiedsheet);
}

function onOpen() {
  SpreadsheetApp.getUi() // Or DocumentApp or SlidesApp or FormApp.
    .createMenu('Custom Menu')
    .addItem('Enter Target Name', 'enterTargetName')
    .addToUi();
}

function enterTargetName() {
  var ui = SpreadsheetApp.getUi(); // Same variations.

  var result = ui.prompt(
    'Enter Target Sheet Name',
    'Please enter target sheet name:',
    ui.ButtonSet.OK_CANCEL
  );

  // Process the user's response.
  var button = result.getSelectedButton();
  var text = result.getResponseText();
  if (button == ui.Button.OK) {
    // User clicked "OK".
    GeneralToTracking(text);
  }
}
...