2015-09-24 34 views
0

我的腳本中有一個函數,用於修剪電子表格列中的數據。這在手動調用時可以很好地工作,但在通過定時觸發器運行時總是失敗。在我看來,就像一個錯誤,但我想我應該先問這裏,因爲可能有一些我錯過了。這是我的代碼。當通過觸發器運行時,SpreadsheetApp getRange失敗

function trimColumnValues(columnIndex) { 
    try { 
    columnIndex = columnIndex || 2; 
    var config = PropertiesService.getScriptProperties() 
          .getProperties(); 
    var firstDataRow = parseInt(config.FIRST_DATA_ROW); 
    var sheet = SpreadsheetApp.openById('valid_spreadsheet_id') 
           .getSheetByName(config.MAIN_SHEET_NAME); 
    var lastRow = sheet.getLastRow(); 
    var noColumns = lastRow - firstDataRow; 
    var range = sheet.getRange(firstDataRow + 1, columnIndex, noColumns); 
    var data = range.getValues(); 
    for (var i in data) { 
     data[i][0] = data[i][0].toString().replace(/^\s+|\s+$/g,""); 
    } 
    range.setValues(data); 
    } catch(e) { 
    MailApp.sendEmail("[email protected]", "Error in script", 
     "Error: " + e.message + ". Line: " + e.lineNumber); 
    } 
} 

我收到我的電子郵件中的錯誤是:

Error: Cannot convert [object Object] to (class).. Line: 28

第28行:var range = sheet.getRange(firstDataRow + 1, columnIndex, noColumns);

+1

無關,但從來沒有對數組(谷歌它)爲(var我在數據) –

+0

感謝您的評論。我現在更清楚了。 – jad

回答

1

我已經後每個變量增加了一個Logger.log()線,並與電子郵件日誌錯誤。原來columnIndex是type:object,value:[object Object]。 我改變了代碼如下:

function trimSKUs(index) {//columnIndex 
    try { 
    var columnIndex = (typeof index !== "number") ? 2 : index; 

這工作得很好,手動和定時通過觸發。

編輯: 出於好奇,我測試了日誌調用該對象的JSON字符串值的舊線和過這個值:

{"year":2015,"month":9,"day-of-month":24,"day-of-week":4,"week-of-year":39,"hour":19,"minute":43,"second":13,"timezone":"UTC","authMode":{},"triggerUid":1787123430}

顯然,觸發對象作爲參數傳遞給時間觸發功能。

相關問題