首页 > 解决方案 > 如何在 Google 应用脚本/Google 表格中仅展平可见(未过滤)单元格?

问题描述

目前,我有一个基本的电子表格:https://docs.google.com/spreadsheets/d/1nlLdD48PfqrhyQzmJrhx_Tlw73C194YUqKeRkXoCOLg/edit?usp=sharing,我制作了一个脚本,可以将电子表格中的公式值展平:

  function freezeValues() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Sheet1');  // or whatever name
  var range = sheet.getRange("A2:C");    // assuming data appears in A2-C 
  range.copyTo(range, {contentsOnly: true});
}

我当前脚本的问题是它会展平所有公式,即使该行被过滤器隐藏,有没有办法可以编辑我的脚本,以便它只会展平可见单元格?

我发现这个操作适用于谷歌应用脚​​本isRowHiddenByFilter,但我不确定如何将它放入我当前的脚本中。

PS 我可能会将它用于不同的过滤器,所以我不是在寻找解决方法。例如,如果您查看我的示例电子表格,我不希望应用脚本指定“背景颜色 = 白色”等)

标签: google-apps-scriptgoogle-sheets

解决方案


您可以遍历所有行并在复制之前查询它是否隐藏

样本

function freezeValues() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Sheet1');  // or whatever name
  var firstRow = 2;
  var firstColumn = 1;
  var lastColumn = 3;
  var range = sheet.getRange(firstRow, firstColumn, sheet.getLastRow() - firstRow + 1, lastColumn - firstColumn +1);    // assuming data appears in A2-C 
  var rowHeight = range.getHeight();
  for (var i = 0; i < rowHeight; i++){
    if(!sheet.isRowHiddenByFilter((firstRow+i))){
      var row = sheet.getRange((firstRow+i), firstColumn, 1, lastColumn - firstColumn +1);
      row.setValues(row.getValues());
    }
  }
}

此示例一一复制非隐藏行,因此使用方法setValues()而不是copyTo()


推荐阅读