我正在尝试为google docs电子表格中的单元格设置一些值。
function exampleFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var range1 = sheet.getRange("A1");
var value1 = range1.getValue();
value1+=1;
range1.setValue(2);
return value1;
}
如果我试图影响具有此功能的单元格,则会出现此错误:
您没有setValue所需的权限。 (第10行,档案 “DDD”)
你知道我怎么能做到这一点吗?我实际上希望受影响的单元格获取单元格A1的值并增加A1 +1的值。
谢谢
答案 0 :(得分:22)
来自文档:
自定义函数返回值,但它们不能在它们所在的单元格之外设置值。在大多数情况下,单元格A1中的自定义函数无法修改单元格A5。但是,如果自定义函数返回一个double数组,结果将溢出包含该函数的单元格,并填充包含自定义函数的单元格下方和右侧的单元格。您可以使用包含return [[1,2],[3,4]];。
的自定义函数对此进行测试答案 1 :(得分:3)
看起来您正在使用上述功能作为自定义功能,换句话说,它通过Google表格UI上的单元格公式调用,方式如下:
=exampleFunction()
Custom functions in Google Sheets有一些限制,例如它们无法用于调用需要权限的Google Apps脚本服务。解决方法是使用另一个方法来调用函数:
也可以从dialogs and sidebars,Google Apps Script Web apps和使用Google Apps Script execution API
调用它们答案 2 :(得分:1)
终于找到了设置公式的方法...
这与我们程序员的想法略有不同。
您可以在宏中使用 SetFormula,但不能在 CustomFunction 中使用。
只需从 Tools->Macros->Record Macro
创建一个简单的宏,然后打开脚本编辑器并将宏的代码更改为您的代码...
这是我的宏代码:
function SetFormula() {
var spreadsheet = SpreadsheetApp.getActive();
var formulaValue = spreadsheet.getRange('formulaText').getValue().toString();
spreadsheet.getRange('total').setFormula(formulaValue);
return formulaValue;
};
然后为了自动运行您的宏(您可以从 Tools->Macros->YOUR-MACRO-NAME
手动运行),只需创建一个触发器如下:
答案 3 :(得分:0)
自定义功能确实具有如上所述的权限限制。它们可以与自定义菜单一起运行,也可以插入图像并为其分配自定义脚本以像按钮一样使用它。
使用Trigger是完成此示例的另一种方法,这使其自动完成。
应用脚本(例如set_J = range(nStops, 1) # nStop is the number of cities and set_J is the related set.
trips = LpVariable.dicts(name="trips", indexs=set_I, lowBound=0, upBound=1, cat=LpInteger) # trips is the decision variable
prob = LpProblem("TSP_MIP", LpMinimize) # Model definition
prob += lpSum(dist[i]*trips[i] for i in set_I) # Objective function
prob += lpSum(trips[i] for i in set_I) == nStops, "" # Constraint 1
# Constraint 2:
for j in set_J:
prob += lpSum(trips[whichIdxs[i, j]] for i in set_I) == 2, ""
prob.solve()
)中的简单触发器可以正常工作,而不会遇到将自定义函数放入单元格的权限问题。此触发器比原始帖子中的触发器要新。在下面的简单示例中,单元格A1将变为带有偶数整数的白色,变为带有其他任何值的红色。当然,扳机发射的速度可能会有所不同。它并不总是像人们期望的那样瞬时。
onSelectionChange(e)