将根据特定条件调整(添加或删除)行的 Google 表格脚本

Posted

技术标签:

【中文标题】将根据特定条件调整(添加或删除)行的 Google 表格脚本【英文标题】:Google Sheets Script that will adjust (add or remove) rows based on certain conditions 【发布时间】:2020-10-29 11:21:35 【问题描述】:

我正在处理从另一个工作表中提取数据的 Google 工作表表格。我正在使用的表使用 UNIQUE FILTER 函数,因此我只能根据某些条件显示列表。某些条件需要更多列表,因此需要更多行,而某些条件需要更少,因此需要更少行。我想根据这些来调整我表上的行数。

我想出了这个脚本来删除空白行,问题是它只在最后一行有值之后删除空白行。它不会删除具有值的行之间的空白行。

function removeEmptyRows() 
    var ss = SpreadsheetApp.getActive();
    var allsheets = ss.getSheets();
    for (var s in allsheets) 
        var sheet = allsheets[s]
        var maxRows = sheet.getMaxRows();
        var lastRow = sheet.getLastRow();
        if (maxRows - lastRow != 0) 
            sheet.deleteRows(lastRow + 1, maxRows - lastRow);
        
    

我似乎也无法编写一个脚本,当条件导致更多数据和行要求时自动追加新行。

TLDR;

    需要一个能够自动删除空行的脚本 需要一个能够自动添加行和复制顶部行公式的脚本

这是我为更好地理解我的意思而创建的示例表:https://docs.google.com/spreadsheets/d/1VU8PsCGcomh3xf3BMI2TUNbnE8UI1RmRpPg4tdrG9Ow/edit?usp=sharing

【问题讨论】:

【参考方案1】:

要删除中间的空行,您需要查询所有行,或者它们是空的

一种方法是获取data range 每一行的第一个单元格(A 列),并定义如果A 为空,则将整行视为空。

示例:

function removeEmptyRows() 
  var ss = SpreadsheetApp.getActive();
  var allsheets = ss.getSheets();
  for (var s in allsheets) 
    var sheet = allsheets[s];
    var data = sheet.getDataRange().getValues();
    for(var i = data.length; i > 0; i--)
      var maxRows = sheet.getMaxRows();
      var lastRow = sheet.getLastRow();
      if (maxRows - lastRow != 0) 
        sheet.deleteRows(lastRow + 1, maxRows - lastRow);
      
      var maxRows = sheet.getMaxRows();
      var lastRow = sheet.getLastRow();
      if (data[i-1][0] == "") 
        sheet.deleteRow(i);
      
    
  

您需要判断它是否适合您。 也许在您的情况下,A 列中的单元格可能为空,但这些行在其他列中有条目。在这种情况下,您需要确定哪个是关键列来确定整行为空 - 或测试每一行的所有列 - 这会使您的代码变慢。

【讨论】:

以上是关于将根据特定条件调整(添加或删除)行的 Google 表格脚本的主要内容,如果未能解决你的问题,请参考以下文章

根据特定条件添加http或https

根据缩放 Google 地图 v3 调整标记大小

如何根据特定条件将逐行数据转换为逐列数据

如何根据特定条件锁定代码块?

添加一行的 Google 表格脚本

是否有可能使用 .insetGrouped 样式删除表格视图中特定部分或行的插图?