Google-apps脚本:在getValues中删除包含字符串的行

时间:2013-04-15 08:37:39

标签: google-apps-script

我使用的函数检查列的长度并在每个单元格中插入unique-id。

var sh = SpreadsheetApp.getActiveSheet();
var dataincol = sh.getRange(1,8,sh.getMaxRows(),1).getValues(); //getRange row, column, numRows, numColumns
//thanks to Serge insas

我的问题是getValues()也接受字符串,我不想要的,我不知道如何从我的Range过滤字符串。 dataincol应该只使用空闲单元格,忽略字符串并继续增加数字。

在这里你可以看到完整的功能:

function fillRowNumber(){
  var col = 1 ; // this for column A ! change to your needs
  var sh = SpreadsheetApp.getActiveSheet();
  var dataincol = sh.getRange(1,col,sh.getMaxRows(),1).getValues();
  var maxval =0
  for(n=0;n<dataincol.length;++n){
    if(Number(dataincol[n][0])>maxval){ maxval=Number(dataincol[n][0])}
    }
  for(n=1;n<sh.getLastRow();++n){
    if(dataincol[n-1][0] == ''){ dataincol[n-1][0]=maxval+1;++maxval}
    }
  sh.getRange(1,col,sh.getMaxRows(),1).setValues(dataincol);
}

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

我经常使用的两个数字验证是​​:parseInt(val) == val这是一个值检查,val.toString().match(/[0-9\-\.]/i) > -1)是字符串检查。

在下面的代码中,我使用了数组函数而不是{}循环的double。对于循环也是如此,我只是更喜欢EC5中的数组函数。

首先在列中构建一个数值的数组(保留索引,以防你想在线下用于其他任何东西 - 替代方法是过滤掉非数字值)

第二个修改dataincol以填充增加maxval的空格。

function fillRowNumber(){
  var col = 1;
  var sh = SpreadsheetApp.getActiveSheet();
  var dataincol = sh.getRange(1, col, sh.getMaxRows(), 1).getValues();
  var maxval = 0;

  var map = dataincol.map(function(row) { 
    // fill an array with numbers where numbers exist in data otherwise 0
    return (parseInt(row[0],10) == row[0]) ? row[0] * (row[0].toString().match(/[0-9\-\.]/i) > -1) : 0;
  });

  maxval = Math.max.apply(Math, map); // Mathmatical maximum

  dataincol = dataincol.map(function(row, index) { 
    if (row[0] == '') {
      maxval += 1; // increment maximum value
      // if blank cell then add new maximum value
      return (row[0] == '') ? [maxval] : [row[0]]; // if you add [&& index < sh.getLastRow()] to the conditional it restricts it to the original range of used cells not the maximum
    } else {
      // leave cell intact
      return [row[0]];
    }
  });

  sh.getRange(1, col, sh.getMaxRows(), 1).setValues(dataincol);
}

我不清楚你是想继续为整张表添加最大值,还是只在最初输入数据的范围内。请尝试代码注释line 18

中的备注