代码之家  ›  专栏  ›  技术社区  ›  DanCue

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

  •  1
  • DanCue  · 技术社区  · 6 年前

    我有一个HTML用户表单选择和输入字段,我需要在google sheets的字符串中搜索它们的输入。

    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个换行符和1个尾随换行符。

    以下是我的问题:

    • 我还是个初学者,RegEx对我来说还是很陌生的。有 一种使用regex绕过前导和尾随换行符的方法 功能的其余部分会起作用吗?我已经手动删除了一些,并且可以对这些单元格进行过滤。
    • 如何让它搜索成员类型:first或成员类型:last?

    如果需要的话,我可以使用第三个if,其中包含一个额外的成员类型变量。

    澄清:

    • 我知道我可以手动或编程删除这些新行,但这些数据每天都会刷新。我想先看看字符串搜索函数是否可行。

    备注:

    • 日志显示,该函数正确地排除了那些与我最终要筛选的列匹配的函数。这让我相信问题在于 .setHiddenValues 使用换行符或google工作表无法对具有换行符的单元格进行筛选。
    • 为了测试上面的内容,我从 flatUniqArr 使用 flatUniqArr[i]= flatUniqArr[i].replace(/(\r\n|\n|\r)/gm,""); 在一个循环中。日志显示这消除了新行。但是,仍然没有去。这就把范围缩小到了google表单无法过滤有换行符的单元格。
    1 回复  |  直到 6 年前
        1
  •  0
  •   DanCue    6 年前

    问题是:

    结果是尽管 .setHiddenValues() 将接受包含新行的字符串的数组,google sheets将不允许在列的筛选中应用这些字符串。

    解决方案:

    从包含换行符的单元格中删除换行符。在我的例子中,它在一个列中,所以我使用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更快的实现。