值有换行符时在字符串中搜索数组

时间:2018-08-06 13:12:51

标签: javascript google-apps-script

我有一个HTML用户表单选择和输入字段,我需要在Google表格的字符串中搜索其输入。

enter image description here

这是单元格的样子。

enter image description here

我有以下函数,可以很好地搜索单元格并返回过滤时不希望与.setHiddenValues()一起使用的数组中的值。

function getHiddenValueArray(colValueArr,visibleValueArr){
  //colValueArr = SpreadsheetApp.getActive().getSheetByName('Monthly_Detail').getRange(2,64,359,1).getValues();    
  //visibleValueArr = ['last1']; //In this case user will only input 1 name
  //strictLevel = 'lenient'

  //will find a match within a cell
    var flatUniqArr = colValueArr.map(function(e){return e[0].toString();})
    .filter(function(e,i,a){
      return (a.indexOf(e) == i && !(visibleValueArr.some(function(f){
        return e.search(new RegExp(f,'i'))+1;
      })));
    });
    Logger.log(colValueArr); 
    Logger.log(flatUniqArr); 
    return flatUniqArr;
  }

我相信此功能不起作用的原因是因为单元格数据中有3个换行符和一个尾随的换行符。

这是我的问题:

  • 我还是一个初学者,RegEx对我还是很陌生。在那儿 一种使用正则表达式绕过前导和尾随换行符的方法,因此 该功能的其余部分将起作用?我已手动删除了一些内容,并对这些单元格进行了过滤。
  • 如何让其搜索“会员类型:第一个”或“会员类型:最后一个”?

如果可以的话,我可以在其中加入三分之一,并为会员类型添加一个额外的变量。

说明:

  • 我知道我可以手动或以编程方式删除这些新行,但是每天都会刷新此数据。我想先找到字符串搜索功能。

评论注释:

  • 日志显示该功能正确排除了那些与我最终希望对该列进行过滤的内容匹配的功能。这使我相信问题出在.setHiddenValues包含换行符,否则Google表格无法过滤包含换行符的单元格。
  • 要测试上述内容,我循环使用flatUniqArrflatUniqArr[i]= flatUniqArr[i].replace(/(\r\n|\n|\r)/gm,"");删除了换行符。日志显示此消除了换行符。但是,仍然没有去。这将其范围缩小到Google表格无法过滤包含换行符的单元格。

1 个答案:

答案 0 :(得分:0)

问题:

事实证明,尽管.setHiddenValues()将接受带有在其中包含换行符的字符串的数组,但是Google表格不会允许将这些字符串应用于列过滤。

解决方案:

从具有换行符的单元格中删除换行符。就我而言,它位于一列中,因此我使用了for循环来trim()的每个值。我使用trim的原因是问题只在于换行符。如果对其他人有帮助,则代码如下:

var teamArr = new Array()
var teamArr = sht.getRange(teamCS + '2:' + teamCS + lastRow).getValues().map(function (row) { return row.map(function (val) { return val.toString().trim(); }); });

sht.getRange(teamCS + '2:' + teamCS + lastRow).setValues(teamArr);

已更新为每条评论tehhowch的更快实施。