首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Google-apps脚本:删除getValues中包含字符串的行

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

Stack Overflow用户
提问于 2013-04-15 16:37:39
回答 1查看 803关注 0票数 0

我使用一个函数来检查列的长度,并在每个单元格中插入唯一id。

代码语言:javascript
复制
var sh = SpreadsheetApp.getActiveSheet();
var dataincol = sh.getRange(1,8,sh.getMaxRows(),1).getValues(); //getRange row, column, numRows, numColumns
//thanks to Serge insas

我的问题是getValues()也接受字符串,这是我不想要的,而且我不知道如何从我的范围中过滤字符串。数据列应该只接受空闲的单元格,忽略字符串,并随着数字的增加而继续。

在这里你可以看到完整的函数:

代码语言:javascript
复制
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);
}

感谢您的帮助

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-15 17:45:47

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

在下面的代码中,我使用的不是double for{}循环,而是数组函数。For循环同样有效,我只是更喜欢EC5中的数组函数。

首先,在列中构建一个只包含数值的数组(保留索引,以防您想要将其用于其他任何东西--另一种方法是过滤掉非数值)

第二个修正dataincol,用递增的maxval填充空格。

代码语言:javascript
复制
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中提到的替代方法

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16010921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档