tuk*_*irs 1 google-sheets google-apps-script custom-function
我想从一个单元格设置注释——注释应该设置为同一个单元格。
我试过这个功能
function setNote(note){
var note = note;
var cell = SpreadsheetApp.getActiveSheet().getActiveCell();
if(note == ""){
cell.clearNote();
}else{
cell.setNote(note);
}
}
Run Code Online (Sandbox Code Playgroud)
但出现错误You do not have permission to call setNote (line 8),这很明显,因为我无法编辑任何带有“单元格函数”的单元格(在单元格中输入/键入的函数,而不是 GAS/JavaScript 函数本身)。
有没有办法从单元格本身设置注释(使用“单元格函数”)?
我希望能够从单元格内设置单元格值(我已经可以)和注释(我还不能),例如 '=if(d4=4, e4, "") & setNote(b4 )` ......或类似的东西。
小智 5
实际上,没有。内置电子表格函数不会创建注释。创建笔记的两种方法是:手动和使用 Apps 脚本。自定义函数可以调用 Apps 脚本,但没有任何set*方法的授权。
也就是说,有一个疯狂的解决方法可能不值得付出努力。自定义函数可以使用UrlFetchApp以下方式发出 GET 请求:
function myFunction() {
return UrlFetchApp.fetch("http://example.com").getContentText();
}
Run Code Online (Sandbox Code Playgroud)
作品。您可以将您的 Apps 脚本部署为 Web 应用程序,授权它以您的身份运行(因此需要您的授权),但互联网上的每个人都可以访问,即使是匿名的。将那个 Web 应用程序的 URL 放在上面的自定义函数中。传递注释的文本和要添加它的单元格。为了增加安全性,请将一些令牌作为 URL 参数传递,Web 应用程序将使用该参数来检查调用它的人是您。所以 URL 将以
?cell=B12¬e=Hello%20World&token=mysecretpassword
Run Code Online (Sandbox Code Playgroud)
由于网络应用程序被授权以您的身份行事,它将能够打开电子表格并进行更改:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
为了使其更广泛地有用,电子表格 ID 和工作表名称也可以作为 URL 参数发送。
在这种方法的潜在问题中,例如执行缓慢,fetch一天内可以进行的调用数量也有限制(20000/天)。
| 归档时间: |
|
| 查看次数: |
2939 次 |
| 最近记录: |