首页 > 解决方案 > 如果谷歌表格中的单元格值为空,如何删除整列

问题描述

我是谷歌表格的新手,如果单元格值为空,我想删除整个列。我尝试使用下面的代码片段来做到这一点。但是什么也没有发生,也没有提示任何错误。

function DeletColumn() {
  var sheettest = SpreadsheetApp.getActive().getSheetByName("Data");
  var lr=sheettest.getLastRow()
  var columntest = sheettest.getRange(1, 10, lr).getValues().values;  
    for(var i=0; i<columntest.length ; i++){
      if (columntest[i] ==""){ 
        
      deleteColumn(i);
         
      }
  }
}

标签: javascriptgoogle-apps-scriptgoogle-sheets

解决方案


问题:

  • sheettest.getRange(1, 10, lr).getValues().values不返回值而是另一个长度为 0 的对象,因此您的[Function: values]循环甚至for在开始之前终止,这就是您没有收到任何错误的原因。删除.values,您将获得值。

  • deleteColumn(i)是一个您没有在脚本中任何地方定义的函数,因此它会抛出一个undefined错误。

  • 您不需要使用for循环来检查至少一个单元格是否为空。您可以检查单元格是否为空。您可以简单地检查是否columntest 包含至少一个空单元格:

    columntest.includes('')
    

解决方案:

function DeletColumn() {
  const sheettest = SpreadsheetApp.getActive().getSheetByName("Data");
  const colNumber = 10;
  const columntest = sheettest.getRange(1, colNumber, sheettest.getLastRow()).getValues().flat();
  if(columntest.includes('')){
    sheettest.deleteColumn(colNumber);
  }
}

数据范围内所有列的更新解决方案:

function DeletColumn() {
  const sh = SpreadsheetApp.getActive().getSheetByName("Data");
  const values = sh.getDataRange().getValues();
  Array(sh.getLastColumn()).fill().map((v,i)=>i).
  reverse().forEach(c=>{                   
        let cTemp = values.map(d => d[c]);
        if(cTemp.includes('')){
           sh.deleteColumn(c+1)
        }                 
  }); 
}

注意:

记住getLastRow()给出了整个工作表中的最后一行内容,而不是特定列 ( J) 中的内容。例如,如果最后一行的内容在 columnJ中,15但在 columnA中是30sheettest.getLastRow()则将返回30,假设它包含具有整个工作表内容的最后一行。


推荐阅读