我正在尝试在谷歌工作表中执行hideColumns()
。起始列始终是固定的(列B(,但要隐藏的列数是可变的,具体取决于日期函数。标题行中的每个单元格都有一个日期,我想隐藏所有日期在今天日期之前的列。所以我做了一个查找,找到了带有今天日期的列的索引号,我想简单地引用该索引减去1,得出要隐藏的列数。
如果我为列数(例如3(硬编码一个值,下面的方法会起作用,但如果我引用i
,甚至试图将i
重新定义为变量,则它不会起作用
function onOpen(e) {
// Get column index of yesterday's date
var spreadsheet = SpreadsheetApp.getActive();
var sheet = spreadsheet.getSheetByName('Daily Tracker');
var lastColumn = sheet.getLastColumn();
var data = sheet.getRange(1,2,1,lastColumn).getDisplayValues().flat(); //create an array of data from row 1
for (var i = 0; i <= data.length; i++) {
var dateToday = Utilities.formatDate(new Date(), "EST", "MM/dd/yyyy")
if (data[i] == dateToday)
{
return i;
break;
}
var hiddenColumnCount = i - 1;
// Number of columns to hide = index - 1 (e.g. 10/14/2020 = index of 8. I need to hide columns 10/6/2020 through 10/13/2020, which = 7 columns so i - 1)
// Hide all columns from column B through column with yesterday's date
sheet.hideColumns(2,hiddenColumnCount);
}
}
我不知道i
是否无法被引用,因为它可能是一个字符串而不是数字,因为我从上面压平了数组。但我尝试使用parseInt()
转换为数字,但不确定它是否有效或是否正确。我还尝试在for语句上方定义var hiddenColumnCount = 0
,然后我尝试键入hiddenColumnCount = i - 1
而不是return i
,但这也不起作用我是编程新手,试着自己查找所有内容,但我遇到了的障碍
我相信你的目标如下。
- 在
Each cell in the header row has a date, and I want to hide all columns with a date before today's date.
和I want to simply reference that index minus 1 to come up with the number of columns to hide.
中,在您的情况下,当可以找到今天的日期时,您希望隐藏列"B";列的左侧显示日期
修改点:
- 在您的情况下,似乎可以检索到今天日期的列号。我认为这可以用来实现你的目标
- 当
data
的数组循环时,请将for循环的条件从for (var i = 0; i <= data.length; i++) {
修改为for (var i = 0; i < data.length; i++) {
。当使用i <= data.length
时,最后一个循环是数组外的索引 - 在脚本中,当找到今天的日期时,脚本就完成了
- 当使用
hideColumns
时,我认为在您的情况下,可以将其放入out-of-for循环
当以上几点反映到您的脚本中时,它变成如下。
修改的脚本:
function onOpen(e) {
// Get column index of yesterday's date
var spreadsheet = SpreadsheetApp.getActive();
var sheet = spreadsheet.getSheetByName('Daily Tracker');
var lastColumn = sheet.getLastColumn();
var data = sheet.getRange(1,2,1,lastColumn).getDisplayValues().flat(); //create an array of data from row 1
// I modified below script.
var columnNumber = 0;
for (var i = 0; i < data.length; i++) {
var dateToday = Utilities.formatDate(new Date(), "EST", "MM/dd/yyyy");
if (data[i] == dateToday) {
columnNumber = i + 2;
}
}
sheet.hideColumns(2, columnNumber - 2);
// Here, columnNumber is the column number of the found date.
}
注:
- 在这个修改中,它假设日期是从"日期"列开始的升序;B";。请小心。当上面修改的脚本不是你期望的结果时,我认为可能需要确认电子表格的情况
参考:
- hideColumns(columnIndex,numColumns(
试试这个:
function onOpen(e) {
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('Daily Tracker');
var data = sheet.getRange(1,2,1,sh.getLastColumn()).getDisplayValues().flat();
for(var i = 0; i <= data.length; i++) {
if (data[i]==Utilities.formatDate(new Date(), "EST", "MM/dd/yyyy")){break;}else{sh.hideColumn(i+2);}
}
}