google-apps-script - 如何在 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 我可能会将它用于不同的过滤器,所以我不是在寻找解决方法。例如,如果您查看我的示例电子表格,我不希望应用脚本指定“背景颜色 = 白色”等)
解决方案
您可以遍历所有行并在复制之前查询它是否隐藏
样本
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()
推荐阅读
- python - 如何在 python 中优化正则表达式搜索?
- discord.js - TypeError:无法读取 Object.execute 处未定义的属性“缓存” - 需要修复
- django - 无法使用 get_context 获取博客列表以正常工作
- linux - Linux 依赖错误(无法安装 Stella)
- powershell - powershell 逻辑没有次打印的值然后动作
- visual-c++ - 删除 .pdb 会导致在 16.9.6 中的静态库项目中重新编译
- xquery - MakLogic:replication journal-archive pending-lag(0)
- python - 如何追加列表中的所有项目?
- reactjs - 如何在源更改时重新加载音频组件
- swiftui - 从屏幕外动画视图(底部)