【发布时间】:2020-10-02 06:28:43
【问题描述】:
简单地说,我正在编写一个脚本,它将检查每隔一列包含的值的数量,特别是该列中第 3 行和第 53 行之间的值的数量。如果搜索中的所有单元格都是空白的,我想隐藏该列及其左侧的列。同样,如果搜索找到具有一个或多个值的隐藏列,我想取消隐藏该列以及它之前的列。
我一直在研究如何去做。我正在使用 for 循环来获取每隔一列的整数值。然后我使用这些值来设置我的范围并使用 .getValues 和 .length 来计算范围内的值的数量。现在,我从未从头开始创建 if/else 语句,但我的想法是将 .length 的输出与数字 0 进行比较,如果长度等于 0,则隐藏列,但如果有其他情况,则取消隐藏列。
这是我写的脚本。
function Hide() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Coach");
var maxRow = sheet.getMaxRows();
var maxCol = sheet.getMaxColumns();
var startCol = 5;
var startRow = 3;
var endRow = 53;
for (col = startCol; col <= maxCol-4; col = +2) {
var range = sheet.getRange(startRow,col,endRow-startRow+1,1);
var l = range.getValues().length;
if (l == 0) {
sheet.hideColumns(col);
sheet.hideColumns(col-1);
}
else {
sheet.showColumns(col);
sheet.showColumns(col-1);
}
}
}
我的脚本有三个问题:
- 脚本只会取消隐藏列。
- 该脚本仅影响我的搜索条件中的第一个范围。
- 脚本会运行,但永远不会结束。
关于第一个问题,getValues 似乎列出了范围内的所有单元格值,包括空白单元格。因此, .length 有效地计算范围内的所有单元格,而不仅仅是空白单元格。此外,搜索条件中的每个单元格都由一个公式填充,因此这也可能是第一个问题的一部分。不过,我不确定如何正确计算非空白值的数量。
我相信其他两个问题与我如何设置 if/else 语句有关。我以前从未从头开始创建过,但我读过如果创建不正确,if 语句会大大减慢脚本的运行时间。
我将非常感谢任何人能给我的任何帮助。谢谢!
【问题讨论】:
-
每个帖子只关注 1 个问题。
标签: google-apps-script google-sheets