通过触发器

时间:2015-09-24 11:14:24

标签: google-apps-script

我的脚本中有一个功能可以修剪电子表格列中的数据。手动调用时,此功能完全正常,但在通过定时触发器运行时始终失败。在我看来,这似乎是一个错误,但我想我应该首先在这里问,因为我可能会遗漏一些东西。这是我的代码。

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("my@email.com", "Error in script", 
      "Error: " + e.message + ". Line: " + e.lineNumber);
  }
}

我在电子邮件中收到的错误是:

  

错误:无法将[object Object]转换为(class).. Line:28

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

1 个答案:

答案 0 :(得分:1)

我在每个变量之后添加了一条Logger.log()行,并通过电子邮件发送了错误的日志。事实证明,columnIndex的类型为:object,value:[object Object]。 我将代码更改为:

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

这样可以正常,手动和定时触发。

编辑: 出于好奇,我使用对象的JSON字符串值测试旧行并具有此值:

  

{"一年":2015,"一个月":9,"&#34月某一天的;:24,"星期几,及#34:4,"&#34年周的-;:39,"小时":19,"分钟":43,"第二&#34 ;:13,"时区":" UTC"" authMode":{}," triggerUid":1787123430}

显然,触发器对象作为参数传递给时间触发的函数。