2014-12-04 47 views
0

作爲相當新手,當涉及到編碼時,我遇到了這個問題與我的代碼: 我使用谷歌應用腳​​本[編輯:更正谷歌應用引擎到谷歌應用腳​​本]去通過一系列時間戳和過濾器來查找與當前月份相同的郵票。因此,我加載電子表格,相應的表格並從所有行中獲取數據作爲對象。如果在for循環引用中增加變量

在下一步中,我會遍歷對象的所有元素,並檢查它們是否包含當前日期。

/* Initial data */ 

    var email = "[email protected]"; 
    var spreadsheet = SpreadsheetApp.openById("1bN7PTOa6PwryVvcGxzDxuNVkeZMRwYKAGFnQvxJ_0nU"); 
    var tasklist = spreadsheet.getSheets()[0].getDataRange(); 
    var tasks = tasklist.getValues(); 
    var tasksnum = tasklist.getNumRows(); 

    Logger.log(tasks[7][2]); //Console returns "01.12.2014" 
    Logger.log(tasks[7][2].indexOf(month)); //Console returns "12.2014" 

/* Filter tasks by month */ 

    for (var i = 1; i < 9; i++) { 
    if (tasks[i][2].indexOf(month) >= 0) { 
     Logger.log(tasks[i]); 
    } 
    else { 
     return; 
    } 
    } 

讓我瘋狂的是以下幾點:如上所述,for循環不起作用。但如果我這樣改變它

if (tasks[7][2].indexOf(month) >= o) { 

它的作品就像一個魅力。這就是我沒有得到的。我應該增加到9,所以應該是七點。至少在那時,條件應該是真的,循環應該返回一個日誌。

我錯過了什麼?

謝謝大家提前。

ps:如果我只是跟着如何實現該功能的錯誤路徑,請讓我知道。 ps2:我認爲我的問題標題有點神祕。如果你有更好的想法,我很樂意改變它。

+0

順便說一下,您並未在此處使用Google App Engine,或者至少不是以與您的問題相關的方式使用Google App Engine。 Google Apps腳本在Google雲端硬盤上運行,Google App Engine是完全獨立的產品,可運行以Python,Java,PHP或GO開發的應用程序,而不是Google Apps腳本。名字有點混亂。如果您在Apps Script上尋求幫助,請不要使用Google App Engine這個詞,否則您會得到令人誤解的結果。 – 2014-12-04 13:29:13

+0

謝謝你的提示。我改變了我的帖子以清除它。 :-) – nehalem 2014-12-04 14:59:30

回答

0

的原因,你的原碼不起作用是由於你的其他塊return語句。返回立即退出函數,所以你的循環永遠不會超過IF的第一個「假」。

刪除「返回」(或其他塊),你的代碼應該工作。

+0

謝謝,這的確有訣竅。我仍然處於一個非常基礎的層面,但是甚至可以找到幫助解決微不足道的錯誤。 – nehalem 2014-12-04 15:00:33

+0

很高興能有所幫助。通常在編程中我們會做出假設,導致我們朝錯誤的方向發展,在這種情況下,您假設循環全部運行了9次,實際上並非如此。對於被他們的代碼行爲困惑的人來說,我的頭號技巧是「檢查你的假設!」。在這種情況下,如果你已經放了一臺記錄器。日誌(ⅰ);緊接在for循環之後,你會看到它沒有達到7,這可能會引導你走向返回語句。快樂的編碼! – 2014-12-04 16:55:51

0

我不確定month變量應該是什麼,但我建議構建一個字符串以匹配日期格式,並進行字符串比較而不是您嘗試的indexOf()策略。此代碼測試,做到了這一點:

function test() { 
    /* Initial data */ 

    var spreadsheet = SpreadsheetApp.openById(""); 
    var tasklist = spreadsheet.getSheets()[0].getDataRange(); 
    var tasks = tasklist.getValues(); 
    var tasksnum = tasklist.getNumRows(); 

    /* Filter tasks by month */ 
    var today = Utilities.formatDate(
    new Date(), 
    spreadsheet.getSpreadsheetTimeZone(), 
    "dd.MM.yyyy" 
); 

    for(var i=1; i<9; i++){ 
    if (tasks[i][2] == today){ 
     Logger.log(tasks[i]); 
    } 
    } 
} 
+0

嗨,這看起來確實是一個更優雅的解決方案。非常感謝。 :-) 但我的問題是,表中的所有時間戳都是不同的(例如:02.12.2014 17:07:32; 02.12.2014 17:07:32; 02.12.2014 17:07:32 )。我想過濾它們的共同特徵,即月份和年份(12.2014)。或者是否可以重新格式化表格中的純文本字符串以符合MM.YYYY的格式? – nehalem 2014-12-04 15:03:45

+0

這可以用正則表達式來完成。如果您創建新問題,我可以幫助向您展示如何使用它。 – John 2014-12-04 17:40:58