【问题标题】:How to delete entire column if cell value is empty in google sheets如果谷歌表格中的单元格值为空,如何删除整列
【发布时间】:2021-01-23 16:23:48
【问题描述】:

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

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);
         
      }
  }
}

【问题讨论】:

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


    【解决方案1】:

    问题:

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

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

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

      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)。例如,如果J 列中内容的最后一行是15,但A 列中的内容是30,则sheettest.getLastRow() 将返回30,假设它包含最后一行内容的整个表。

    【讨论】:

    • 感谢您的解释,但是这个 sn-p 没有达到我的要求,它只删除了第 10 列。但是我需要删除在提到的行中的特定单元格中包含空值的每一列。请指教。
    • @TharakaWijerama 抱歉你说how to delete entire column 你没有说columns 并且在你的代码中你指定了列10。我会尽快更新我的答案。
    • @TharakaWijerama 请检查我更新的解决方案。请注意,我使用getDataRange,它从最后一行的内容到最后一列的内容。如果要获取整张表的范围,请将getDataRange() 替换为getRange(1,1,sh.getLastRow(),sh.getLastColumn())
    • @TharakaWijerama 回答对你有用吗?
    • 抱歉延迟回复.. 它工作正常,如我所料。
    猜你喜欢
    • 1970-01-01
    • 2022-11-24
    • 1970-01-01
    • 2023-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多