谷歌应用程序脚本:来自单元格本身的setNote()

时间:2018-02-01 00:08:33

标签: google-apps-script google-sheets custom-function

我想从单元格设置注释 - 注释应设置为相同的单元格。

我试过这个功能

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)`......或类似的东西。

1 个答案:

答案 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&note=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); } } 次呼叫的数量也有限制。

相关问题