我想从单元格设置注释 - 注释应设置为相同的单元格。
我试过这个功能
function setNote(note){
var note = note;
var cell = SpreadsheetApp.getActiveSheet().getActiveCell();
if(note == ""){
cell.clearNote();
}else{
cell.setNote(note);
}
}
但得到了错误You do not have permission to call setNote (line 8)
,这是显而易见的,因为我无法使用“单元格函数”编辑任何单元格(在单元格中输入/输入的函数而不是GAS / JavaScript函数本身)
有没有办法从单元格本身设置注释(使用'单元格函数')?
我希望能够在单元格中设置单元格值(我已经可以)和注意(我还不能),例如'= if(d4 = 4) ,e4,“”)& setNote(b4)`......或类似的东西。
答案 0 :(得分:3)
实际上,没有。内置电子表格功能不会创建Notes。创建Notes的两种方法是:手动和使用Apps脚本。自定义函数可以调用Apps脚本,但没有任何foreach(long thisObjectId in ids)
{
// code...
}
方法的授权。
那就是说,有一个疯狂的解决方法可能不值得努力。自定义函数可以使用set*
生成GET请求:例如,
UrlFetchApp
的工作原理。您可以将Apps脚本部署为Web应用程序,授权它作为您(因此授权),但互联网上的所有人都可以访问,甚至是匿名用户。将该Web应用程序的URL放在自定义函数中,如上所示。传递注释的文本和要添加注释的单元格。为了增加安全性,请将一些令牌作为网址参数传递,网络应用将使用该参数来检查您调用它的人。因此,URL将以
结尾function myFunction() {
return UrlFetchApp.fetch("http://example.com").getContentText();
}
由于网络应用程序被授权代理您,因此可以打开电子表格并进行更改:
?cell=B12¬e=Hello%20World&token=mysecretpassword
为了使其更有用,可以将电子表格ID和工作表名称作为URL参数发送。
在这种方法的潜在问题中,例如执行缓慢,一天(20000 /天)内可以进行function doGet(e) {
var cellAddress = e.parameter.cell;
var note = e.parameter.note;
var token = e.parameter.token;
if (token == 'mysecretpassword') {
var ss = SpreadsheetApp.openById('id_here');
var sheet = ss.getSheetByName('Sheet1');
var cell = sheet.getRange(cellAddress);
cell.setNote(note);
}
}
次呼叫的数量也有限制。