2016-09-06 22 views
0

Googleのスクリプトでは、私はGoogleシートに記載されている私の毎月の費用を確認するために何かを書いている。 スクリプトが見つけた単語に基づいて、すべての行がカテゴリタグを取得します。それはうまく動作しますが、検索する単語の数が増えています。アレイも大きくなっています。自動的に配列に変数を追加しますか?

私は6つのペア(追加するタグ)を見つけましたが、実際のバージョンでは35個もあります。

これは私のスクリプトです:

function myFunction() { 
// check usual suspects 
var A1 = ["CAFE", "HORECA"] 
var A2 = ["ALBERT", "AH"] 
var A3 = ["VOMAR","Vomar"] 
var A4 = ["HEMA","HEMA"] 
var A5 = ["KRUID","Drogist"] 
var A6 = ["RESTA", "Horeca"] 

// in Array 
var expenses = [A1,A2,A3,A4,A5,A6] 

var ss = SpreadsheetApp.getActiveSheet(); 
var data = ss.getDataRange().getValues(); // read all data in the sheet 


for (i in expenses) 
{for(n=0;n<data.length;++n){ // iterate row by row and examine data in column A 

if(data[n][3].toString().toUpperCase().match(expenses[i][0])==expenses[i][0]){ data[n][4] = expenses[i][1]}; 


// if column D contains 'xyz' then set value in index [5] (is column E) 
} 

Logger.log(data) 
ss.getRange(1,1,data.length,data[0].length).setValues(data); // write back to the sheet 
} 

} 

答えて

4

私はことを提案することができます。代わりに、あなたの「ペア」のための変数を使用しての

function multiPass(){ 
    var searchCriterions = [ 
       ["CAFE","HORECA" ], 
       ["ALBERT", "AH"], 
       ["VOMAR","Vomar"], 
       ["HEMA","HEMA"] 
       ]; 
    var dico = {}; 
    var patt = ""; 

    for (var i in searchCriterions) { 
    dico[searchCriterions[i][0]] = searchCriterions[i][1]; 
    patt += "("+searchCriterions[i][0]+")"; 
    if((Number(i)+1)<searchCriterions.length){ 
    patt += "|"; 
    } 
    } 
    var re = new RegExp(patt,""); 

    var ss = SpreadsheetApp.getActiveSheet(); 
    var data = ss.getDataRange().getValues(); // read all data in the sheet 
    Logger.log(re); 
    for(n=0;n<data.length;++n){ // iterate row by row and examine data in column A 
    // THAT'S NOT COLUMN "A", 3 --> "D" 
    var test = data[n][3].toString().toUpperCase().match(re); 
    Logger.log(test); 
    if(test!==null){ 
    data[n][4] = dico[test[0]] 
    }; 
} 
ss.getRange(1,1,data.length,data[0].length).setValues(data); // write back to the sheet 
} 

は(大きなテーブルを使用することを好む、それは書くことが少なくpainfullです) 次にオブジェクトのペアを変換してペアの2番目の引数に素早くアクセスし、すべてのキーワードを1つずつ解析するのではなく、すぐにチェックする大きな正規表現を作成します。
検索条件として大きな配列を使用しているので、この大きな配列がハードコーディングではなく読み込まれていると完全に想像することができます。データがあるシートがある場合は、この方法でコードを変更することができます。
var searchCriterions = SpreadsheetApp.getActive().getRange("namedRange").getValues();

+0

すごく、私が探していたものです!コードをコピーし、完全に動作します。それがどのように動作するかを実際に理解するのに時間を費やす必要がありますが、それは宿題です。 – mrtn

関連する問題