Google Script, как сделать резервную копию новых строк в главной таблице - PullRequest
1 голос
/ 29 января 2020

Таким образом, суть моего проекта состоит в том, чтобы скопировать новые данные, добавленные в электронную таблицу A, в электронную таблицу B. Цель состоит в том, чтобы использовать электронную таблицу A в качестве метода ввода и электронную таблицу B в качестве журнала всех вводимых данных в A за все время. Мастер лист так сказать. Обратите внимание, что это будет выполнено по временному триггеру, и все данные из листа a будут удалены.

Я взял некоторый код из Stackoverflow (спасибо тем, кто его сделал) и внес некоторые изменения. Я могу скопировать первый набор данных из A в B, но когда я удаляю данные из A, добавляю новые данные и запускаю код, я теряю все, что я ввел в B. Я также могу использовать use = importrange ,

Мое решение было логичным и взять getLastRow из B и поставить его перед установкой setValues. Теоретически, это должно получить последний ряд B и ввести новые данные из A в последний ряд B. Просто верно, НЕТ, я пытался выяснить это в течение многих дней и много часов, читая похожие случаи, но я Я не могу преодолеть это препятствие.

Я предполагаю, что я что-то неправильно понял в моей переменной SRange, A1Range или SData.

Любая помощь будет очень полезной.

function CopyDataToNewSheet() {
  var sss = SpreadsheetApp.openById('XXXXXXXXXXXXXXXXXXXXX');
  var ss = sss.getSheetByName('Sheet1'); 
  var lr = ss.getLastRow();
  var lc = ss.getLastColumn();
  var SRange = ss.getRange(2,1,lr,lc);
  var A1Range = SRange.getA1Notation();
  var SData = SRange.getValues();
  var tss = SpreadsheetApp.openById('XXXXXXXXXXXXXXXXXXXXX');
  var ts = tss.getSheetByName('Sheet1'); 
  var tlr = ts.getLastRow()+1;
  Logger.log(tlr);
  tlr.getRange(A1Range).setValues(SData);
}

1 Ответ

1 голос
/ 30 января 2020
function CopyDataToNewSheet() {
  var ss=SpreadsheetApp.openById('XXXXXXXXXXXXXXXXXXXXX');
  var sh=ss.getSheetByName('Sheet1'); 
  var srg=sh.getRange(2,1,sh.getLastRow()-1,sh.getLastColumn());
  var dA=srg.getValues();
  var tss=SpreadsheetApp.openById('XXXXXXXXXXXXXXXXXXXXX');
  var tsh=tss.getSheetByName('Sheet1'); 
  tsh.getRange(tsh.getLastRow()+1,1,dA.length,dA[0].length).setValues(dA);
}
...