2017-08-01 108 views
1

我在一張表中有一些表格,我需要製作腳本來每天發送一封電子郵件。它今天搜索的腳本日期,將它匹配到我的表中並返回列號,然後我在第一列(A)上查找Total,一旦找到它,返回行號。一旦我有行號和列號,返回當天的總價值。我沒有使用JavaScript進行高級編程,我仍在爲數組掙扎(仍在學習)。到目前爲止,我所用的腳本工作得很好,只要我在該表上只有一個表格,但在表格上將會有超過50個表格,每個表格最後都會有一個Total。公式我會找到總計,但會返回所有總計(行號)作爲字符串。我需要的是獲得第一個總數(行號)。我希望這一切都有道理。返回的行號是匹配錯誤

我重視的圖像,使一個想法,我的劇本我到目前爲止有:

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; 

    Logger.log(nr); // will return two values (41 - first total and 
    104 second total ... if you add more Total it will return all rows 
    numbers that contain word Total 

} 
} 

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

table

這只是第一個表,但將在這一個和每個更一個會有Total。

謝謝!

親切的問候!

+0

你可以提供一張帶有50個表格的工作表的示例工作表,或者更好的鏈接到實際工作表嗎?什麼是唯一標識其他人的每張桌子的? – mongoose36

+0

我可以提供2個表格的測試文件。該模式對於所有50來說都是相同的。https://drive.google.com/open?id=1Of2qpfaz8Z8sAhblVP1ebllHR3WT7b3kEehli6xqe0U。 .... –

+0

謝謝安德烈!是否有可能獲得表格的編輯權限。 – mongoose36

回答

2

您應該在循環之外聲明nr,因爲您將使用該值。

var nr = 0; 

既然你正在閱讀的數組,你應該使用數組的長度爲你循環

for (var i=0; i<values.length; i++){ 
    if (values[i][0]=='Total'){ 
    nr = i; 
    Logger.log(nr); 
    break; // this will stop at the first match 
    } 
} 

一旦你得到你總爲字符串,可以將其轉換爲數字致電以下功能。

var string = values[a][b]; 
var num = Number(string); 
+0

謝謝!這是完美的作品:) –

+0

快速的問題......如果我想第二個值或第三個值怎麼辦?我的意思是僅用於行(總計)。謝謝! –