【问题标题】:Google Sheets - Delete rows with characters谷歌表格 - 删除带有字符的行
【发布时间】:2021-09-19 16:45:49
【问题描述】:

我正在使用同时具有数字和文本值的工作表。我想做的是删除所有带有文本值的行,只保留带有数值的行。 在这张图片中,A 列代表我目前拥有的,B 列代表我想要实现的目标。我有一个可用于删除单个值的示例代码,但我怎样才能使这项工作适用于所有字符,而不仅仅是特定单词?

function deleteEmptyRows(){ 
  var sh = SpreadsheetApp.getActiveSheet();
  var data = sh.getDataRange().getValues();
  var targetData = new Array();
  for(n=0;n<data.length;++n){
    if(data[n].join().replace(/,/g,'')!=''){ targetData.push(data[n])};
    Logger.log(data[n].join().replace(/,/g,''))
  }
  sh.getDataRange().clear();
  sh.getRange(1,1,targetData.length,targetData[0].length).setValues(targetData);
}

此外,不需要这个解决方案才能发挥作用。我正在寻找最好的解决方案。这只是我找到的一个例子。

【问题讨论】:

  • 您可以使用/[A-Za-z]/.test(string) 检查是否有字母,然后放下该行或继续下一行。
  • 谢谢。试过但不知道如何将它包含到代码中,所以我收到以下错误:ReferenceError: string is not defined

标签: javascript regex google-apps-script google-sheets


【解决方案1】:

对于您的示例,它可能如下所示:

function deleteEmptyRows(){ 
  var sh = SpreadsheetApp.getActiveSheet();
  var data = sh.getDataRange().getValues();
  var targetData = new Array();
  for(var n = 0; n < data.length; n++){
    var cell = data[n][0].toString().replace(/-/g,'') // remove dashes
    if (!isNaN(cell)) targetData.push(data[n]); // if the content looks like a number
  }
  sh.getDataRange().clear();
  sh.getRange(1,1,targetData.length,targetData[0].length).setValues(targetData);
}

【讨论】:

    【解决方案2】:

    您说它不需要是使用脚本的解决方案?那么也许您可以将QUERY()matches() 子句一起使用?

    =QUERY(A1:A,"where A matches '\d+(?:-\d+)?'",0)
    

    我不确定当前正则表达式的使用,但它会正确匹配您当前显示的示例数据,其中:

    • \d+ - 1 位以上。
    • (?:-\d+)? - 一个可选的非捕获组,其中一个连字符后跟 1 个以上的数字。

    【讨论】:

    • 对不起,我的意思是它不需要完全是这个解决方案,但它应该是一个使用脚本的解决方案。不过还是谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    • 1970-01-01
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多