2

我正在爲這個劇本奮鬥。我需要搜索今天的日期,一旦匹配它返回列號(完成!)。我需要一個腳本來做同樣的行號。我的腳本工作正常,如果我只保留一張表,但我有更多的表,如果我使用values.length -1將返回表中的最後一行。另外,每個表格可能沒有固定的行號,因此需要動態。搜索價值和返回行號

這是劇本我到目前爲止有:

function getTodaysTotal() { 
    function toDateFormat(date) { 
try {return date.setHours(0,0,0,0);} 
catch(e) {return;} 
} 

var values = SpreadsheetApp 
    .openById("id") 
    .getSheetByName("Q3 - W27 - 39") 
    .getDataRange() 
    .getValues(); 


var today = toDateFormat(new Date()); 
var todaysColumn = values[5].map(toDateFormat).map(Number).indexOf(+today); 
var output = values[values.length - 1][todaysColumn]; 
var emailDate = Utilities.formatDate(new Date(today),"GMT+1", "dd/MM/yyyy"); 

這就是我的表的畫面拍攝。

table

希望它是有意義的。我有列號,我需要找到包含Total的行號。

謝謝!

親切的問候

回答

0

你必須遍歷一個可能是最快的數據數組。

看看下面的腳本,並在你現有的實現。

不知道這是隻有一列,你正在尋找,但例如列C:

for (i in values){ 
if (values[i][2]=='Total'){ 
Logger.log(i); 
var nr = i 
    } 
} 

變種NR現在包含我,因爲它發現在C列中單詞「總計」行號(在[i]之後的#2)。

然後,您可以在第一個右括號之後的任何內容中使用該變量。

+0

我不斷收到此錯誤:TypeError:無法從undefined讀取屬性「32」。 (第25行,「Utils」文件) –

+0

某些變量當前未在腳本中定義。我在上面提到的腳本必須嵌入到包含所使用變量的完整腳本中。使用調試和記錄器。代碼中的第25行是什麼?分享您的工作表和完整的代碼。 –

+0

我在底部添加了完整的腳本...... –

0

我將此添加到我的腳本中,但輸出時出現undefined。如果我使用記錄器日誌,我會得到正確的值,但我也會得到一個空值(未定義)。所以我只需要第一個值。

function getTodaysTotal() { 
function toDateFormat(date) { 
try {return date.setHours(0,0,0,0);} 
catch(e) {return;} 
    } 

var values = SpreadsheetApp 
    .openById("id") 
    .getSheetByName("Q3 - W27 - 39") 
    .getDataRange() 
    .getValues(); 

for (i in values){ 
if (values[i][0]=='Total'){ 
var nr = i; 
var newNr = parseInt(nr); 

//  Logger.log(nr); 


var today = toDateFormat(new Date()); 
var todaysColumn = 
values[5].map(toDateFormat).map(Number).indexOf(+today); 
var output = values[newNr][todaysColumn]; 
Logger.log(output); 
var emailDate = Utilities.formatDate(new Date(today),"GMT+1", "dd/MM/yyyy"); 
// Logger.log(todaysColumn); 
// Logger.log(output); 
// return values[values.length - 1][todaysColumn]; 
} 
} 




if (output == undefined) { 
GmailApp.sendEmail("[email protected]", "test data", "Today, " +emailDate +" we had no calls made or no values are inputed."); 
} 
else if (output == "") { 
GmailApp.sendEmail("[email protected]", "test data", "Today, " +emailDate +" we had no calls made or no values are inputed."); 
} 
else { 

GmailApp.sendEmail("[email protected]", "test data", "Today, " +emailDate +" we had " +output + " calls made."); 

} 
} 
+0

不幸的是,我不能現在在我的地方訪問谷歌驅動器。看起來,如果你得到正確的值和一個空值,你的變量todaysColumn可能是空的。將您的記錄器更改爲變量todaysColumn,以瞭解其價值。在將它映射到(toDateFormat)後,您似乎無法映射到數字。你想要兩個的原因是什麼? –