Apps脚本JS从范围(如果尚未在数组中)向项目添加项目失败

时间:2017-10-08 18:18:17

标签: javascript google-apps-script

我正在循环遍历各种单元格并希望添加其字符串内容做一个数组,如果内容不在数组中。当我手动这样做时,它完全正常,试图将'eJobs'添加到数组中(见下面的“var item ='eJobs'),它已经包含了'eJobs':

var divisionarray = ['eJobs']  
  for (var i = 0; i < cells_users.length-1; ++i) {
    var row_users = cells_users[i];
    if (row_users[0] == user_ldap) {  
      
      var podarray = row_users[1].split(', ')
      for (j = 0; j < podarray.length; j++) { 
        for (var k = 0; k < cells_edit.length; ++k) {
          var row_edit = cells_edit[k]
          if (podarray[j] === row_edit[0]) {
            var item = 'eJobs' 
            if (!(divisionarray.indexOf(item) >= 0)) {
              divisionarray.push(item)
              }
          }
        }
      } 
      Logger.log(divisionarray)

正如预期的那样,日志文件显示[17-10-08 19:11:04:111 BST] [eJobs],说明代码有效并且'eJobs'尚未添加到阵列中,因为它已经在数组。

现在,当我将var item ='eJobs'更改为范围值

var item = sheet_pods_edit.getRange(startRow+k, startColumn+1).getValue();

代码不再起作用,因为日志文件显示:

[17-10-08 19:14:03:770 BST] [eJobs, eJobs, BestJobs, Vivre Deco, ...

注意我有数千个单元格,所以我添加了很多重复项。我错过了什么?请注意,定义范围的单元格确实只是一个单词的字符串(例如'eJobs')。

1 个答案:

答案 0 :(得分:1)

代码正在运行,日志文件指示问题是什么..

[eJobs, eJobs, BestJobs, Vivre Deco, 

在第二个eJobs中,eJobs之前有一个空格,因此第一个值和第二个值不匹配。

在没有查看您的数据的情况下,只需使用一个单词&#39;我会说在文本字符串上使用.replace(" ", "")应该可行,这将找到第一个&#34; &#34;在字符串中删除它。即&#34; eJobs&#34;会成为&#34; eJobs&#34;。

2

这行代码是否仅用于测试?你永远不应该在脚本中使用这样的方法。这将是非常低效的

var item = sheet_pods_edit.getRange(startRow+k, startColumn+1).getValue();

而是使用.getValues()获取整个范围,然后迭代它。

3

您是否有理由在===中使用if (podarray[j] === row_edit[0]),除非您需要检查类型,请始终使用==