2015-09-24 33 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}

显然,触发对象作为参数传递给时间触发功能。

相关问题