【问题标题】:Removing only blank cells (not rows) in Google Sheets仅删除 Google 表格中的空白单元格(而不是行)
【发布时间】:2020-01-07 08:27:23
【问题描述】:

能否请您协助编写一个简单的 Google 表格脚本,以便我获取如下所示的表格:

通过 1 次点击自动将其转换为此(即 - 不是删除 ROWS,而是删除并仅在空单元格上向上移动):

【问题讨论】:

    标签: google-sheets concatenation transpose array-formulas google-sheets-query


    【解决方案1】:

    使用:

    =ARRAYFORMULA({A1:C1; TRANSPOSE(SPLIT(TRANSPOSE(QUERY(A2:C,,999^99)), " "))})
    

    【讨论】:

    • 这很好 - 效果很好。唯一的问题是我需要每天都这样做 - 是否有一个宏或一些快速快捷方式可以用来在另一张纸上运行此公式,然后作为纯文本粘贴回主纸上?
    • 另外,有些行实际上有像“1x Product A”这样的空格,这导致它分成3行——“1x”、“Product”和“A”在不同的行上
    • 我也最喜欢这个,主要是因为它保留了一个单元格公式。
    • @player0 实际上,当范围单元格中存在特殊字符时,这不起作用吗? i.postimg.cc/26qf00Q5/remove-blank-cells.png 好像是把源单元格拆分成多个单元格。另外,如果我只处理一个列怎么办?
    • 你能分享一份你的工作表吗? (图片未加载)
    【解决方案2】:

    您要求的这个样品:

    function adder()
     {
       var sheet = SpreadsheetApp.getActive().getSheetByName('Sheet2');
       var lastRow = sheet.getLastRow(); 
       for (var i = 1; i < lastRow+1; i++){
         if((sheet.getRange('A'+(lastRow-i+1)).getValue()) + ""=="")
         {
           sheet.getRange('A'+(lastRow-i+1)).deleteCells(SpreadsheetApp.Dimension.ROWS);
         }
    
         //var valueB = sheet.getRange('B'+(lastRow-i+1)).getValue() + "";
         if((sheet.getRange('B'+(lastRow-i+1)).getValue())=="")
         {
           sheet.getRange('B'+(lastRow-i+1)).deleteCells(SpreadsheetApp.Dimension.ROWS);
         }
    
         //var valueC = sheet.getRange('C'+(lastRow-i+1)).getValue() + "";
         if((sheet.getRange('C'+(lastRow-i+1)).getValue())=="")
         {
           sheet.getRange('C'+(lastRow-i+1)).deleteCells(SpreadsheetApp.Dimension.ROWS);
         }
       }
     }  
    

    【讨论】:

    • 谢谢 - 但收到以下错误:TypeError:无法调用 null 的方法“getLastRow”。 (第 4 行)。
    • 这个在宏中运行,但是如果你想作为脚本运行,你必须改变活动的电子表格
    • 并且 sheet2 必须更改为您的实际工作表
    【解决方案3】:

    你可以用这个方法:

    var sheet = SpreadsheetApp.getActive();
    sheet.getRange('A12').deleteCells(SpreadsheetApp.Dimension.COLUMNS); // Cell left
    sheet.getRange('A12').deleteCells(SpreadsheetApp.Dimension.ROWS);  //cell up
    

    var sheet = SpreadsheetApp.getActive();
    var range = sheet.getRange('A12');
    range.deleteCells(SpreadsheetApp.Dimension.COLUMNS);
    range.deleteCells(SpreadsheetApp.Dimension.ROWS);
    

    您必须从最后一行开始迭代,然后从底部开始逐个检查您的列 A、B、C 或其他单元格,如果为空白,则执行 range.deleteCells(SpreadsheetApp.Dimension.ROWS);

    【讨论】:

    • 谢谢 - 原谅我的无知,但我现在如何让它运行呢?我试着把它放在一个函数中,但运行这个函数什么也没做。另外,不确定你的最后一行是什么意思? “您必须从最后一行开始迭代,然后从底部逐一检查 A、B、C 列或其他单元格,如果为空白,则执行 range.deleteCells(SpreadsheetApp.Dimension.ROWS);”
    • 我给你样品
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-27
    • 1970-01-01
    • 2015-03-22
    • 2016-12-02
    相关资源
    最近更新 更多