Я пытаюсь использовать скрипт Google Apps для создания функции, которая будет искать слово Yes в определенном столбце моей электронной таблицы Google.

Если он найдет Yes, он продолжит копирование всех этих строк в другую электронную таблицу, сохраненную на моем диске Google, а затем удалит ее из исходной электронной таблицы.

У меня практически нет опыта работы с этим языком, но я написал код.

Я ищу правильный способ выполнить это и как завершить свой код. Чтобы ты делал?

Новейшее редактирование кода:

function moveDelete() {
  var sh = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var dsh=SpreadsheetApp.getActive().getSheetByName('Sheet2');

  var data = sh.getRange(1, 1, sh.getLastRow()-1).getValues();
  var range = sh.getRange(1, 1, data.length);


  var rowsDeleted = 0;
  for (var i = 0; i <= data.length - 1; i++) {3
    var array = data[i]
    if (array[4] == 'Yes') {
      dsh.appendRow(array);
      sh.deleteRow((parseInt(i)+1) - rowsDeleted);
      rowsDeleted++;
    }
  }
};

function onOpen() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var entries = [{
    name : "Send to Record",
    functionName : "moveDelete"
  }];
  sheet.addMenu("Custom Menu", entries);
};
0
Cristian Garcia 4 Окт 2020 в 21:12

1 ответ

Лучший ответ

Решение 1. Перенести в тот же документ:

function moveDelete() {
  
  var ss = SpreadsheetApp.getActive()
  var sh = ss.getSheetByName('Sheet1');
  var dsh= ss.getSheetByName('Sheet2');  
  var data = sh.getDataRange().getValues();

  var rowsDeleted = 0;
  for (var i = 0; i <= data.length - 1; i++) {
    var array = data[i]
    if (data[i][4] == 'Yes') {
      dsh.appendRow(array);
      sh.deleteRow((parseInt(i)+1) - rowsDeleted);
      rowsDeleted++;
    }
  }
};

Решение 2 (на основе комментария) - перенос в другой файл электронной таблицы:

function moveDelete() {
  
  var ss = SpreadsheetApp.getActive();
  var ts = SpreadsheetApp.openById("id of the target spreadsheet here"); // example: 31d6k7iXh20rjLn22m0axvscR6-BcyOy_fxhdk-ResXU
  var sh = ss.getSheetByName('Sheet1'); // Sheet1 of the source spreadsheet
  var dsh= ts.getSheetByName('Sheet2'); // Sheet2 of the target spreadsheet
  var data = sh.getDataRange().getValues();

  var rowsDeleted = 0;
  for (var i = 0; i <= data.length - 1; i++) {
    var array = data[i]
    if (data[i][4] == 'Yes') {
      dsh.appendRow(array);
      sh.deleteRow((parseInt(i)+1) - rowsDeleted);
      rowsDeleted++;
    }
  }
};

Обратите внимание , что 1. использует 4 в качестве индекса, который проверяет наличие 5-го столбца, то есть столбца E . Убедитесь, что вы правильно указали порядковый номер, чтобы выбрать нужный столбец.

1
Mario 4 Окт 2020 в 23:51