Filter data by column K in Google Script Editor (Google Sheets)

后端 未结 3 2112
旧巷少年郎
旧巷少年郎 2021-01-01 01:21

In this example, I have a set of data from a Google Sheet (4Cat) feeding into another sheet (ImportFeeder) where I am running my Google Script.

At the end of the scr

3条回答
  •  轻奢々
    轻奢々 (楼主)
    2021-01-01 01:36

    you can add this to your original code:

    filterByText(rawData, 10, iPad);
    

    It will work as long as you add this function after your myFunction function:

    function filterByText(data, columnIndex, values) {
        var value = values;
        if (data.length > 0) {
            if (typeof columnIndex != "number" || columnIndex > data[0].length) {
                throw "Please, can you choose a valid column index?";
            }
            var r = [];
            if (typeof value == "string") {
                var reg = new RegExp(escape(value).toUpperCase());
                for (var i = 0; i < data.length; i++) {
                    if (columnIndex < 0 && escape(data[i].toString()).toUpperCase().search(reg) != -1 || columnIndex >= 0 && escape(data[i][columnIndex].toString()).toUpperCase().search(reg) != -1) {
                        r.push(data[i]);
                    }
                }
                return r;
            } else {
                for (var i = 0; i < data.length; i++) {
                    for (var j = 0; j < value.length; j++) {
                        var reg = new RegExp(escape(value[j]).toUpperCase());
                        if (columnIndex < 0 && escape(data[i].toString()).toUpperCase().search(reg) != -1 || columnIndex >= 0 && escape(data[i][columnIndex].toString()).toUpperCase().search(reg) != -1) {
                            r.push(data[i]);
                            j = value.length;
                        }
                    }
                }
                return r;
            }
        } else {
            return data;
        }
    }
    

    Above is the code used by Google Apps Script's ArrayLib library filterByText method. I literally just copied it and made the throw friendlier.

    Your full code could look something like this:

    function myFunction() {
      var sss = SpreadsheetApp.openById('1kL96dRm3Z8XBtMXnSzUARxR1b34-njlkZQ1sU0c3g1s'); //replace with source ID
      var ss = sss.getSheetByName('4cat'); //replace with source Sheet tab name
      var range = ss.getRange('A:I'); //assign the range you want to copy
      var data = range.getValues();
    
      var tss = SpreadsheetApp.openById('1u7547KaniKHLUJn2v-ezN4l8ZcxE4viCFcoxsA904MI'); //replace with destination ID
      var ts = tss.getSheetByName('Sheet1'); //replace with destination Sheet tab name
      ts.getRange(ts.getLastRow()+1, 1, data.length, data[0].length).setValues(data);
    
      var range = ts.getRange(ts.getLastRow()+1, 1, data.length, data[0].length)
      var rawData = range.getValues()     // get value from spreadsheet 2
      var data = filterByText(rawData, 10, iPad); // rawData is now sorted.
      range.clear();
    
      var powerRange = ts.getRange(ts.getLastRow()+1, 1, data.length, data[0].length);
    
      powerRange.setValues(data);
    } 
    
    function filterByText(data, columnIndex, values) {
        var value = values;
        if (data.length > 0) {
            if (typeof columnIndex != "number" || columnIndex > data[0].length) {
                throw "Please, can you choose a valid column index?";
            }
            var r = [];
            if (typeof value == "string") {
                var reg = new RegExp(escape(value).toUpperCase());
                for (var i = 0; i < data.length; i++) {
                    if (columnIndex < 0 && escape(data[i].toString()).toUpperCase().search(reg) != -1 || columnIndex >= 0 && escape(data[i][columnIndex].toString()).toUpperCase().search(reg) != -1) {
                        r.push(data[i]);
                    }
                }
                return r;
            } else {
                for (var i = 0; i < data.length; i++) {
                    for (var j = 0; j < value.length; j++) {
                        var reg = new RegExp(escape(value[j]).toUpperCase());
                        if (columnIndex < 0 && escape(data[i].toString()).toUpperCase().search(reg) != -1 || columnIndex >= 0 && escape(data[i][columnIndex].toString()).toUpperCase().search(reg) != -1) {
                            r.push(data[i]);
                            j = value.length;
                        }
                    }
                }
                return r;
            }
        } else {
            return data;
        }
    }
    

提交回复
热议问题