Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 删除星号前包含3个或更少字符的行_Javascript_Google Apps Script_Google Sheets - Fatal编程技术网

Javascript 删除星号前包含3个或更少字符的行

Javascript 删除星号前包含3个或更少字符的行,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我在谷歌电子表格中有一个脚本,可以删除所有包含4个或更多数字的行。我想对其进行修改,以同时删除星号*前面包含3个或更少字符(数字或其他)的所有行 以下是当前形式的脚本: function removeRows() { var sheet = SpreadsheetApp.getActiveSheet(); var rows = sheet.getDataRange(); var numRows = rows.getNumRows(); var values = rows.getV

我在谷歌电子表格中有一个脚本,可以删除所有包含4个或更多数字的行。我想对其进行修改,以同时删除星号*前面包含3个或更少字符(数字或其他)的所有行

以下是当前形式的脚本:

function removeRows() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var rows = sheet.getDataRange();
  var numRows = rows.getNumRows();
  var values = rows.getValues();
  var rowsDeleted = 0;
  var val = sheet.getRange(2, 1, lr-1, 2).getValues();
  var lr = sheet.getLastRow()

  for (var i = 0; i <= numRows - 1; i++) {
    var row = values[i];
    var str = row[0].replace(/\D/g, '')//extract the numbers
    var len = str.length // determine lenght of number string
    if(len >=4 ){ //if 4 or more numbers delete
      sheet.deleteRow((parseInt(i)+1) - rowsDeleted);
      rowsDeleted++;
    }
  }

  for (var i = 0; i <= val.length-1; i++) {
    var str=val[i][0].split(/[*]/)//split at *
    var numStr = str[0].replace(/\D/g, '');
    var len = numStr.length // determine length of string of first split

    if(len <=3 ){ //if 3 or less, delete
      sheet.deleteRow((parseInt(i)+1) - rowsDeleted);
      rowsDeleted++;
    }
  }  
}
函数{
var sheet=SpreadsheetApp.getActiveSheet();
var rows=sheet.getDataRange();
var numRows=rows.getNumRows();
var values=rows.getValues();
var rowsDeleted=0;
var val=sheet.getRange(2,1,lr-1,2).getValues();
var lr=sheet.getLastRow()
对于(VARI=0;i=4){//如果删除4个或更多数字
sheet.deleteRow((parseInt(i)+1)-删除行);
行删除++;
}
}

对于代码片段中的(var i=0;i),在分割行的值之后,您不会提取数字。 试试这个:-

for (var i = 0; i <= val.length-1; i++) {
var str=val[i][0].split(/[*]/)//split at *
var numStr = str[0].replace(/\D/g, '');
var len=numStr.length // determine length of string of first split

if(len <=3 ){ //if 3 or less, delete
  sheet.deleteRow((parseInt(i)+1) - rowsDeleted);
  rowsDeleted++;
}

用于(var i=0;i而不是在
*
字符处拆分单元格,您可以简单地测试单元格内容中是否存在该字符。如果存在
*
,则返回的整数将为0或更多。值4或更多表示搜索字符前面有4个或更多字符,而值为0-3表示前面有0-3个字符

此代码段假定工作表数据位于名为
val
的数组中(正如您在上面发布的代码中所做的那样)

var colIndex=0;//应检查范围中的哪一列的*。
对于(变量i=0;i=0){
/*
*星号前有3个或更少的字符。
*在此块中添加代码以使用i、val、val[i]或val[i][colIndex]
*对于这个特定的案例。
*/
}否则{
/*
*单元格中没有星号,或者前面有4个以上的字符。
*向该块添加代码(如果不需要任何操作,则完全删除else块)
*对不符合指定星号条件的行/单元格执行此操作。
*/
}
}

到目前为止,您尝试了什么?抱歉,我不知道如何正确设置格式。我将修改上面的帖子。不要粘贴在这里,编辑您的问题。@ncoder,刚刚编辑了问题。好的,那么您面临的问题是什么?您也应该在问题中添加此内容。谢谢,@ncoder。这不太有效。我已经更新了我的问题这是完整的脚本。谢谢你。我得到'ReferenceError:'val'“没有定义。”您的回答是。我应该将“val”定义为什么?实际上,“val”的定义与我上面问题中粘贴的代码中所述的相同。但是,这里的脚本不会删除包含3个或更少字符的行,尽管我的脚本会继续删除包含4个或更多数字的行。@EdDev您的问题要求帮助删除包含3个或更多字符的行。”在星号前面有个字符。这里你的评论只是说“3个或更少的字符”。这是哪一个?为不精确表示歉意。正确的要求是“星号前面有3个或更少的字符*。嗨,@tehhowch,有什么想法吗?
var colIndex = 0; // Which column in the range should be checked for an *.
for(var i = 0; i < val.length; ++i) {
  var charBefore = String(val[i][colIndex]).indexOf("*");
  if(charBefore < 4 && charBefore >= 0) {
    /*
     * There are 3 or fewer characters preceding the asterisk.
     * Add code in this block to work with i, val, val[i], or val[i][colIndex]
     * for this specific case.
     */
  } else {
    /*
     * There was no asterisk in the cell, or it was preceded by 4+ characters.
     * Add code to this block (or remove the else block entirely, if nothing is to
     * be done with rows / cells that did not meet the specified asterisk criteria.
     */
  }
}