Скопируйте определенные данные из одной таблицы Google в другую таблицу Google с помощью скрипта Google Apps - PullRequest
0 голосов
/ 13 января 2019

У меня есть электронная таблица, которую люди заполняют, а затем нажимают кнопку отправки. Эта кнопка создает PDF и отправляет эти данные по электронной почте. Часть этих данных должна быть скомпилирована в другую электронную таблицу каждый раз, когда кто-то отправляет свои данные.

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

function CopyDataToNewFile() {
var sss = SpreadsheetApp.openById('abcd1234'); // sss = source spreadsheet
  var ss = sss.getSheetByName('Timesheet'); // ss = source sheet
  //Get full range of data
  var SRange = ss.getRange("A10:L22");
  //get A1 notation identifying the range
  var A1Range = SRange.getA1Notation();
  //get the data values in range
  var SData = SRange.getValues();

  var tss = SpreadsheetApp.openById('abcd1234'); // tss = target spreadsheet
  var ts = tss.getSheetByName('Info'); // ts = target sheet
  var TRange = ts.getRange("A1:L13");
  var T1Range = TRange.getA1Notation();

  //set the target range to the values of the source data
  ts.getRange(T1Range).setValues(SData);

}

У меня две проблемы с этим кодом:

  1. Я не могу выбрать конкретные ячейки данных , мне нужно выбрать J6, но также и всю 11-ю строку. Бонусом будет, если он увидит значение, скажем, A14, то он скопирует весь 14-й ряд. Но если в A14 ничего нет, он не будет копировать эти данные.
  2. Данные перезаписываются каждый раз при отправке данных , мне нужно, чтобы каждое новое добавление данных отображалось под последним.

Я искал решение этой проблемы в течение нескольких часов, и я не достаточно разбираюсь в Javascript, чтобы написать что-нибудь нестандартное. Спасибо!

Ответы [ 2 ]

0 голосов
/ 17 января 2019

После еще одного исследования я собрал немного кода, который теперь прекрасно работает.

function CopyDataToNewFile(targetSheetName,targetSsId, sourceSheetName,sourceSsId) {
  var ss = SpreadsheetApp.openById('abcd1234sydfhnsgb').getSheetByName('Timesheet');
  var ssd = SpreadsheetApp.openById('abcd1234srymsnzd').getSheetByName('Info');

  var therapist = ss.getRange('D6:K6').getValues();
  var sourceData10 = ss.getRange('A10:10').getValues();  
  ssd.getRange(ssd.getLastRow()+1,1,therapist.length,therapist[0].length).setValues(therapist);

  if (!ss.getRange(10, 1).isBlank()) {
    ssd.getRange(ssd.getLastRow()+1,1,sourceData10.length,sourceData10[0].length).setValues(sourceData10);
  }
}
0 голосов
/ 13 января 2019

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

Есть также пример того, как вы можете проверить, имеет ли ячейка значение или нет.

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

function CopyDataToNewFile() {
    
    var sourceSheet = SpreadsheetApp.openById('ID'); // Selects your Source Spreadsheet by its ID
    var ssheet = sourceSheet.getSheetByName('Timesheet'); // Selects your Source Sheet by its Name
   
    var J6value = ssheet.getRange(6, 10).getValue();  // Get value from J6 in Source Sheet
    var A14value = ssheet.getRange(14, 1).getValue(); // get value from A14 in Source Sheet
    
    var the11thRow = ssheet.getRange('A11:11').getValues(); // Select the entire 11th row in the Source Sheet
    var the14thRow = ssheet.getRange('A14:14').getValues(); // Select the entire 14th row in the Source Sheet
       
    var targetSheet = SpreadsheetApp.openById('ID'); // Selects your Target Spreadsheet by its ID
    var tsheet = targetSheet.getSheetByName('Info'); // Selects your Target Sheet by its name
    
    var targetFor14thRow = tsheet.getRange('A11:11'); // Selects where your 11th row will be copied to, in this case simply row 11
    var targetFor11thRow = tsheet.getRange('A14:14'); // Selects where your 14th row will be copied to, in this case simply row 14
      
    if (!ssheet.getRange(14, 1).isBlank()) { // Conditional: If A14 in Source Sheet isn't empty
      targetFor14thRow.setValues(the14thRow); // Then copy the entire 14th row to its target
    }
          
    tsheet.getRange(1,2).setValue(J6value); // Copy the value of J6 in the source document to 2A of the Target Sheet
    tsheet.getRange(3,4).setValue(A14value); // Copy the value of A12 in the source document to C4 of the Target Sheet    
  }

РЕДАКТИРОВАНИЕ: Используйте .setValues ​​вместо .copyTo для копирования целых строк.

...