问题

我的谷歌表,值只是一个例子

这只是一个 gsheet 作为隐私原因的例子。

在我的实际gsheet中,我使用python自动附加数据.但我的表不需要超过50行.如何使用JS在gsheet中自动化,如果添加行51被删除,所有列表条目都移动一行,以便我的数据位于第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"));

}
 

  最佳答案

我真的看不到你如何自动处理这个,因为你在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);
    }
}
 

参考:

基于时间的触发

  相同标签的其他问题

javascriptgoogle-apps-scriptgoogle-sheets