根据日期范围对 Google 隐藏列的脚本进行故障排除
Troubleshoot Google Script for Hiding Columns based on date range
更正
我有一个 google sheet 每周数据 table(一年的价值)。
在 sheet 的顶部,我有 "to" 和 "from" 日期字段。
我试图通过隐藏与 "to"/"from" 范围之外的日期相关的所有列来限制用户的视图。
我研究了如何做到这一点,但显然无法正确制作脚本。
UPDATE I have now corrected this but my script will only hide the
first column no matter what dates I have in the "to"/"from" cells.
Script exactly as below.
谢谢。
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getSheetByName('NEW - HOURS');
var startColumn = 5;
var values = s.getRange('E7:BD7').getValues();
var start = s.getRange('B4').getValue();
var end = s.getRange('B5').getValue();
var column, len, date, hideCount = 0, showCount = 0;
for (column = values.length - 1; column >= 0; --column) {
date = values[column][0];
if ( typeof date != 'object' || !(date >= start && date < end) ) {
if (showCount) {
s.showColumns(column + startColumn + 1, showCount);
showCount = 0;
}
hideCount++;
} else {
if (hideCount) {
s.hideColumns(column + startColumn + 1, hideCount);
hideCount = 0;
}
showCount++;
}
}
if (showCount) s.showColumns(column + startColumn + 1, showCount);
if (hideCount) s.hideColumns(column + startColumn + 1, hideCount);
}
注意行列表示法
请注意,范围是一个二维数组,其中外部数组对应行,嵌套数组对应列,可以从方法中提取 getRange(row, column).
因此,values
矩阵定义为 values[row][column]
,values.length
将为您提供行数 - 对于列数,请使用 values[0].length
.
综上所述,你需要改变
for (column = values.length - 1; column >= 0; --column) {
date = values[column][0];
...
到
for (column = values[0].length - 1; column >= 0; --column) {
date = values[0][column];
...
ADDITIONAL UPDATE:
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getSheetByName('NEW - HOURS');
var startColumn = 5;
var values = s.getRange('E7:7').getValues();
更正
我有一个 google sheet 每周数据 table(一年的价值)。
在 sheet 的顶部,我有 "to" 和 "from" 日期字段。
我试图通过隐藏与 "to"/"from" 范围之外的日期相关的所有列来限制用户的视图。
我研究了如何做到这一点,但显然无法正确制作脚本。
UPDATE I have now corrected this but my script will only hide the first column no matter what dates I have in the "to"/"from" cells. Script exactly as below.
谢谢。
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getSheetByName('NEW - HOURS');
var startColumn = 5;
var values = s.getRange('E7:BD7').getValues();
var start = s.getRange('B4').getValue();
var end = s.getRange('B5').getValue();
var column, len, date, hideCount = 0, showCount = 0;
for (column = values.length - 1; column >= 0; --column) {
date = values[column][0];
if ( typeof date != 'object' || !(date >= start && date < end) ) {
if (showCount) {
s.showColumns(column + startColumn + 1, showCount);
showCount = 0;
}
hideCount++;
} else {
if (hideCount) {
s.hideColumns(column + startColumn + 1, hideCount);
hideCount = 0;
}
showCount++;
}
}
if (showCount) s.showColumns(column + startColumn + 1, showCount);
if (hideCount) s.hideColumns(column + startColumn + 1, hideCount);
}
注意行列表示法
请注意,范围是一个二维数组,其中外部数组对应行,嵌套数组对应列,可以从方法中提取 getRange(row, column).
因此,values
矩阵定义为 values[row][column]
,values.length
将为您提供行数 - 对于列数,请使用 values[0].length
.
综上所述,你需要改变
for (column = values.length - 1; column >= 0; --column) {
date = values[column][0];
...
到
for (column = values[0].length - 1; column >= 0; --column) {
date = values[0][column];
...
ADDITIONAL UPDATE:
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getSheetByName('NEW - HOURS');
var startColumn = 5;
var values = s.getRange('E7:7').getValues();