我的脚本中有一个功能可以修剪电子表格列中的数据。手动调用时,此功能完全正常,但在通过定时触发器运行时始终失败。在我看来,这似乎是一个错误,但我想我应该首先在这里问,因为我可能会遗漏一些东西。这是我的代码。
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);
答案 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}
显然,触发器对象作为参数传递给时间触发的函数。