只想创建简单的填充物以在其他功能中使用它:
function fillLine(row, column, length, bgcolor)
{
var sheet = SpreadsheetApp.getActiveSheet();
sheet.getRange(1+row, 1+column, 1, length).setBackground(bgcolor)
}
但得到:“找不到方法getRange(数字,数字,数字,(类))”。
是否可以创建一个?
添加了23.10.2014 23:32 GMT + 2
我试图自己运行功能。检查了运行菜单中的选项“fillLine”。当我将其更改为我的主要功能“onOpen”时,一切正常。对于else函数,即使没有参数,我也可以运行它们,但不能用于此函数。也许有人可以解释一下?
答案 0 :(得分:3)
您在调试器中使用NO参数运行此操作。如果你想这样做,你需要确保在使用参数之前定义了适当的默认值,否则解释器将开始猜测。
如果参数为空,这将为您解决问题:
function fillLine(row, column, length, bgcolor)
{
row = row || 0;
column = column || 0;
length = length || 1;
bgcolor = bgcolor || "red";
var sheet = SpreadsheetApp.getActiveSheet();
sheet.getRange(1+row, 1+column, 1, length).setBackground(bgcolor)
}
或者,您可以使用这样的测试函数,并从调试器中调用 it :
function test_fillLine() {
fillLine(0, 0, 1, 'red');
}
还有其他方法,有些在Is there a better way to do optional function parameters in Javascript?
中描述那是怎么回事?
未明确键入Javascript参数。因此,解释器必须在运行时检查传递的对象以确定它们的类型。
在此示例中,未传递任何参数,所有参数都设置为undefined
值,并且未定义'未定义'类型。
当调用函数时,解释器需要确定有时几个签名适用于哪一个。 (Sheet.getRange
有4种变体。)为此,它必须解决所提供参数的数量和类型。
所以,我们走了......
1+row
,1+column
被标识为数字,因为文字" 1"是一个数字。1
显然是一个数字length
是一个未定义的对象,没有任何其他对象提供提示,解释器认为它是普通的class
。因此,解释器决定需要找到带有签名getRange
的{{1}}对象的sheet
方法。它没有找到,并抛出你看到的异常。
答案 1 :(得分:1)
我成功使用了偏移。
var sheet = SpreadsheetApp.getActiveSheet()
//var range = sheet.getRange(row, column, height, width)
var range = sheet.getRange('A1').offset(row - 1, column - 1, height, width)
因此,在您的情况下,可能会运行以下代码。
function fillLine(row, column, length, bgcolor) {
var sheet = SpreadsheetApp.getActiveSheet()
//var range = sheet.getRange(row, column, 1, length)
var range = sheet.getRange('A1').offset(row - 1, column - 1, 1, length)
range.setBackground(bgcolor)
}
就我而言,我需要添加权限才能使用setBackground。 当我以@Mogsdad said运行测试脚本时,脚本编辑器中会出现一个添加权限的弹出菜单。
function test_fillLine() {
fillLine(1, 1, 2, 'red');
}
https://developers.google.com/apps-script/guides/services/authorization
答案 2 :(得分:0)
你必须浏览 activeSpreadsheet ,其中 activeSheet 是“嵌入”的,i。即
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
intead of
var sheet = SpreadsheetApp.getActiveSheet();