Переместить строку между различными электронными таблицами - Google Spreadsheet - PullRequest
1 голос
/ 05 февраля 2020

Я новичок в кодировании и в SO, но я пытаюсь понять, что я делаю и что происходит в коде.

Я хочу переместить строку между различными электронные таблицы.

У меня есть скрипт в электронной таблице "CORE", который перемещает строку между листами "Home" и "Finished" Ссылка на электронную таблицу :

function onEdit(event) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();

  if (s.getName() == "Home" && r.getColumn() == 5 && r.getValue() == true) {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Finished");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
  }
  else if (s.getName() == "Finished" && r.getColumn() == 5 && r.getValue() == false) {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Home");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
  }
}

Я искал, как переместить данные, расположенные на «готовом» листе, в другую таблицу под названием «БАЗА ДАННЫХ» Ссылка на электронную таблицу :

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Finished");
  var range = sheet.getRange("A1:E2");
  var values = range.getValues();
  var allvals = [];
  for (var i = 0; i < values.length; i++) {
    allvals.push(values[i]) ;
  }

  var dataLength = allvals.length;
  // alert data
  var ui = SpreadsheetApp.getUi();
  // ui.alert( JSON.stringify(allvals) )

  // copy to another Google Spreadsheet
  var newSheet = SpreadsheetApp.openById('1Xn-hrPPr3tQwWMbKdWxHTXcazOqWu1bdHT6A5LZmlD8').getSheets()[0];
  var tmp = "A1:E" + dataLength;
  var newRange = newSheet.getRange(tmp);
  newRange.setValues(values);
}

Но я хочу перенести данные от листа "CORE" / "Завершено" до листа "БАЗА ДАННЫХ" / "DB" без перезаписи других строк, уже находящихся на листе DB. Моя идея состоит в том, чтобы сделать электронную таблицу «БАЗА ДАННЫХ» реальной базой данных, в которую другие листы помещают данные, а другие используют эти данные.

Можно ли перемещать строки между различными электронными таблицами, как в первом коде? Я знаю, что невозможно использовать .openById () с функцией onEdit (), , но самое главное, чтобы переместить строки, не переписывая другие строки уже на целевом листе (DB).

1 Ответ

0 голосов
/ 05 февраля 2020

Перемещение строки в другую электронную таблицу с помощью устанавливаемого триггера onEdit

Это всего лишь пример перемещения данных в строке из одной электронной таблицы в другую с помощью устанавливаемого триггера onEdit. Если вы хотите поиграть с ним sh, не забудьте добавить идентификатор целевой таблицы.

function onMyEdit(e) {
  //e.source.toast('Entry');
  var sh=e.range.getSheet();
  //Logger.log(JSON.stringify(e));
  if(sh.getName()=='Sheet2' && e.range.columnStart==11 && e.value=="TRUE") {
    //e.source.toast('Access');
    e.range.setValue('FALSE');
    var tss=SpreadsheetApp.openById('SSID');
    var tsh=tss.getSheetByName('Sheet2');
    var v=sh.getRange(e.range.rowStart,1,1,sh.getLastColumn()-1).getValues();
    Logger.log(v);
    tsh.getRange(tsh.getLastRow()+1,1,v.length,v[0].length).setValues(v);
    sh.deleteRow(e.range.rowStart);
  }
}

enter image description here

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