hideColumes()列数参数基于引用的列索引Google Apps Script Google Sheets



我正在尝试在谷歌工作表中执行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);}
}
}

最新更新