Удалить первую строку в gsheet и сдвинуть строки вверх - PullRequest
1 голос
/ 26 сентября 2019

Мой лист Google, значения являются лишь примером

Это всего лишь пример таблицы в качестве примера по соображениям конфиденциальности.

В моем текущем gsheet я автоматически добавляю данные с помощью python.Но моя таблица не должна быть длиннее 50 строк.Как я могу автоматизировать в gsheet с помощью JS, чтобы при добавлении строки 51 строка 1 удалялась, а все записи списка сдвигались вверх на одну строку, так что мои данные находились в строках с 1 по 50?

var ss = SpreadsheetApp.openById("XXXXX");
var sheet = ss.getSheetByName('Tabellenblatt1');


function myFunction() {

//if row number >50 exceute code below   

//first row should be deleted here


//shift rows up
sheet.getRange("A1:B3").moveTo(sheet.getRange("A2:B4"));

}

Ответы [ 2 ]

1 голос
/ 27 сентября 2019

Я не могу понять, как вы можете обрабатывать это автоматически, когда вы вводите значения в python, чтобы триггер onChange не работал.

Тем не менее вы можете создать основанный на времени триггер и «обрезать»данные в зависимости от частоты ваших входных данных.

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

function myFunction() {
    var ss = SpreadsheetApp.getActiveSpreadsheet()
    var sheet = ss.getActiveSheet();
    var limit = 50;
    var numRows = sheet.getLastRow();
    var range = sheet.getRange('A1:B' + numRows + '');
    var values = range.getValues();
    var numRowsToDelete = 0;
    if (numRows > limit){
     numRowsToDelete = numRows - limit;
     values.splice(0, numRowsToDelete)
     for (var i = 0; i < numRowsToDelete; i++)
     {
       var arr = [];
       for (var j = 0; j < values[0].length; j++)
         arr.push("");
        values.push(arr)
     }
     range.setValues(values);
    }
}

или даже проще, если вы хотите удалить всю строку, которую вы можете сделать

function myFunction() {
    var ss = SpreadsheetApp.getActiveSpreadsheet()
    var sheet = ss.getActiveSheet();
    var numRows = sheet.getLastRow();
    var limit = 50;

    if (numRows > limit){
     var numRowsToDelete = numRows - limit;
     //first argument is the start index where you delete so if you
     // have a header you can put 2 and add a + 1 to the limit variable
     sheet.deleteRows(1, numRowsToDelete);
    }
}

СПРАВКА:

времяоснованный триггер

0 голосов
/ 27 сентября 2019

Спасибо за помощь.Код ниже работает.Я хочу выполнять его через триггер каждую минуту, чтобы строк не было намного больше, чем 50.

function deleteRows() {
  var ss = SpreadsheetApp.openById("XXXX");
  var sheet = ss.getSheetByName('Tabellenblatt1');
  //count rows
  var max_rows = sheet.getLastRow();
  var limit = 50;
  if (max_rows >limit)
  {
    //erste Zeile mit Inhalt soll gelöscht werden
    sheet.getRange('A2:B2').clearContent();
    //shift rows up
    sheet.getRange("A3:B").moveTo(sheet.getRange("A2:B"));
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...