Обновить весь лист при изменении другого листа (скрипт) - PullRequest
0 голосов
/ 06 марта 2019

У меня есть электронная таблица Google, которая содержит названия статей на главном листе (называемые «РЕЗЮМЕ»).В одном из столбцов указано, обсуждалась ли статья в лаборатории или нет («си», «нет»).Когда в столбце написано «si» (да), сценарий копирует название и информацию о бумагах на другой лист, называемый «Семинарии» (семинары), если в столбце говорится «нет», он копирует информацию на другой лист, называемый «DISCUTIR» (для обсуждения.).Скрипт работает нормально (он копирует информацию на соответствующий лист), но у него есть небольшая проблема.Когда мы обсуждаем документ, и я меняю его статус с «нет» на «да», он добавляет его на лист SEMINARIO, но не удаляет его из листа «DISCUTIR».Есть ли способ заставить скрипт обновить весь лист?(Если я удаляю все содержимое листа «DISCUTIR», он добавляет только те, которые мне нужны, но я хочу найти способ сделать это автоматически).

Здесь я прилагаю код, который япользуюсь.Я уверен, что это действительно неопрятно и неэффективно, так как я понятия не имею, что я делаю, поэтому я прошу прощения за это.У меня есть некоторый опыт программирования на MATLAB, но я никогда не использовал JavaScript и просто сумел заставить его работать, копируя и вставляя код.

function onEdit(e) {
  var sheetFrom = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("ABSTRACTS");
  var sheetTo = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("SEMINARIOS");
  var sheetTo2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("DESCARTADOS");
  var sheetTo3 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("DISCUTIR");
  var sheetTo4 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("CHEQUEAR");

  var data = sheetFrom.getDataRange().getValues();
  var target = new Array(); // this is a new array to collect data
  for (n = 0; n < data.length; ++n) { // iterate in the array, row by row
    if (data[n][8] == "si") { // if condition is true copy the whole row to target
      target.push(data[n]); // copy the whole row
    } //if
  } //for

  //Paste to another sheet from first cell onwards
  sheetTo.getRange(2, 1, target.length, target[0].length).setValues(target);

  var data = sheetFrom.getDataRange().getValues();
  var target = new Array(); // this is a new array to collect data
  for (n = 0; n < data.length; ++n) { // iterate in the array, row by row
    if (data[n][8] == "descartado") { // if condition is true copy the whole row to target
      target.push(data[n]); // copy the whole row
    } //if
  } //for

  //Paste to another sheet from first cell onwards
  sheetTo2.getRange(2, 1, target.length, target[0].length).setValues(target);

  var data = sheetFrom.getDataRange().getValues();
  var target = new Array(); // this is a new array to collect data
  for (n = 0; n < data.length; ++n) { // iterate in the array, row by row
    if (data[n][8] == "no") { // if condition is true copy the whole row to target
      target.push(data[n]); // copy the whole row
    } //if
  } //for

  //Paste to another sheet from first cell onwards
  sheetTo3.getRange(2, 1, target.length, target[0].length).setValues(target);

  var data = sheetFrom.getDataRange().getValues();
  var target = new Array(); // this is a new array to collect data
  for (n = 0; n < data.length; ++n) { // iterate in the array, row by row
    if (data[n][8] == "chequear") { // if condition is true copy the whole row to target
      target.push(data[n]); // copy the whole row
    } //if
  } //for

  //Paste to another sheet from first cell onwards
  sheetTo4.getRange(2, 1, target.length, target[0].length).setValues(target);

}

1 Ответ

0 голосов
/ 07 марта 2019

Я думаю, вы понимаете, почему строка не исчезает, но это потому, что вы перезаписываете данные только до последней строки ваших новых входных данных и ничего не делаете с этими строками после этого.

Документы показывают, что есть функция с именем clear(), которая избавит от всего, что было там ранее: https://developers.google.com/apps-script/reference/spreadsheet/sheet#clear

Вызов sheetTo4.clear() удалит все содержимое и форматирование, а вызов sheetTo4.clear({contentsOnly: true}) удалит только содержимое. Вам, конечно, придется переписать заголовки для листа.

...