![](/img/trans.png)
[英]Generate Reference Number to Google Sheets automatically using Google Apps Script
[英]hideColumns() number of columns parameter based on referenced column index Google Apps Script Google Sheets
我正在嘗試在 Google 表格中執行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
,我認為在您的情況下,可以將其置於 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.
}
嘗試這個:
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);}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.