google 应用程序脚本:来自单元格本身的 setNote()
google apps script: setNote() from the cell itself
我想从一个单元格设置注释——注释应该设置到同一个单元格。
我试过这个功能
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)
,这很明显,因为我无法使用“单元格函数”编辑任何单元格(单元格中 input/typed 的函数而不是 GAS/JavaScript 函数本身)。
有没有办法从单元格本身设置音符(使用“单元格函数”)?
我希望能够在单元格内设置单元格值(我已经可以)和注释(我还不能),比如'= if(d4=4, e4, "") & setNote(b4)` ... 或类似的东西。
实际上,没有。内置电子表格功能不会创建注释。创建笔记的两种方法是:手动和使用 Apps 脚本。自定义函数可以调用 Apps 脚本,但无权使用任何 set*
方法。
也就是说,有一个疯狂的解决方法可能不值得付出努力。自定义函数可以使用 UrlFetchApp
发出 GET 请求:例如,
function myFunction() {
return UrlFetchApp.fetch("http://example.com").getContentText();
}
有效。您可以将您的 Apps 脚本部署为 Web 应用程序,授权它作为您的行为(因此在您的授权下),但互联网上的每个人都可以访问,甚至是匿名的。将那个 Web 应用程序的 URL 放在上面的自定义函数中。传递注释的文本和要添加注释的单元格。为了增加安全性,将一些令牌作为 URL 参数传递,Web 应用程序将使用该参数来检查调用它的是您。所以 URL 将以
结尾
?cell=B12¬e=Hello%20World&token=mysecretpassword
由于 Web 应用程序被授权代表您,它将能够打开电子表格并进行更改:
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);
}
}
为了更广泛地使用它,电子表格 ID 和 Sheet 名称也可以作为 URL 参数发送。
在这种方法的潜在问题(例如执行速度慢)中,一天内可以进行的 fetch
调用次数也有限制(20000 次/天)。
我想从一个单元格设置注释——注释应该设置到同一个单元格。
我试过这个功能
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)
,这很明显,因为我无法使用“单元格函数”编辑任何单元格(单元格中 input/typed 的函数而不是 GAS/JavaScript 函数本身)。
有没有办法从单元格本身设置音符(使用“单元格函数”)?
我希望能够在单元格内设置单元格值(我已经可以)和注释(我还不能),比如'= if(d4=4, e4, "") & setNote(b4)` ... 或类似的东西。
实际上,没有。内置电子表格功能不会创建注释。创建笔记的两种方法是:手动和使用 Apps 脚本。自定义函数可以调用 Apps 脚本,但无权使用任何 set*
方法。
也就是说,有一个疯狂的解决方法可能不值得付出努力。自定义函数可以使用 UrlFetchApp
发出 GET 请求:例如,
function myFunction() {
return UrlFetchApp.fetch("http://example.com").getContentText();
}
有效。您可以将您的 Apps 脚本部署为 Web 应用程序,授权它作为您的行为(因此在您的授权下),但互联网上的每个人都可以访问,甚至是匿名的。将那个 Web 应用程序的 URL 放在上面的自定义函数中。传递注释的文本和要添加注释的单元格。为了增加安全性,将一些令牌作为 URL 参数传递,Web 应用程序将使用该参数来检查调用它的是您。所以 URL 将以
结尾?cell=B12¬e=Hello%20World&token=mysecretpassword
由于 Web 应用程序被授权代表您,它将能够打开电子表格并进行更改:
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);
}
}
为了更广泛地使用它,电子表格 ID 和 Sheet 名称也可以作为 URL 参数发送。
在这种方法的潜在问题(例如执行速度慢)中,一天内可以进行的 fetch
调用次数也有限制(20000 次/天)。