0

我使用一个函数来检查列的长度并在每个单元格中插入唯一 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);
}

感谢您的任何帮助

4

1 回答 1

1

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

在下面的代码中,我使用了数组函数,而不是双 for{} 循环。For 循环也可以,我只是更喜欢 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

于 2013-04-15T09:45:47.117 回答