自动将变量添加到数组?

时间:2016-09-06 09:25:17

标签: google-apps-script

在谷歌脚本中,我写了一些东西来检查我的每月费用,这些费用列在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
}

}

1 个答案:

答案 0 :(得分: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
}

而不是为你的&#34;对使用变量&#34;喜欢使用大桌子(写起来不那么痛苦) 然后转换对象中的对,以快速访问该对的第二个参数,并创建一个大的正则表达式,立即检查所有关键字,而不是逐个解析它们。
现在我们正在使用一个大数组作为搜索标准,我们可以完全想象这个大数组被加载而不是硬编码。如果您有一张数据表,您可以这样更改代码:
var searchCriterions = SpreadsheetApp.getActive().getRange("namedRange").getValues();