找不到脚本功能

时间:2019-01-04 05:33:28

标签: google-apps-script google-sheets

我创建了一个标题,该标题的单元格在将“ xx”添加到单元格时会更改颜色。在评估学生时,我不想输入每个单元格,而是希望通过单击该单元格将xx添加到该单元格中。那是我开始四处搜寻并开始研究脚本的时候。我向每个单元格添加了2张图纸,因此我可以单击一个图像添加“ xx”,然后单击另一幅图像删除“ xx”(如果我更改了其评估等级)。我今天与他们一起玩耍,并在第一个单元中找到了成功,但是我尝试为其分配脚本的每个其他单元都说找不到该脚本。 当我从脚本文件中“运行”脚本时,该脚本会显示在我的工作表上,但是当我单击所需的单元格时就不会显示。

这是我的代码第一部分的一部分(我有15行具有不同的标题-口头交流,权限等):

预定义标题的顶行

Top row of rubric pre-click

点击量后的顶行

[Top row of rubric post-click2]

function verbalcommunication4() {
ss=SpreadsheetApp.getActiveSpreadsheet()
s=ss.getActiveSheet()
var currVal=s.getRange("D5").getValue()
var plusVal= currVal +" xx"
s.getRange("D5") .setValue(plusVal)
}
function verbalcommunication4clear() {
ss=SpreadsheetApp.getActiveSpreadsheet()
s=ss.getActiveSheet()
var currVal=s.getRange("D5").getValue()
var text =s.getRange("D5").getValue().replace(" xx","");
  s.getRange("D5").setValue(text);
}
function verbalcommunication3() {
ss=SpreadsheetApp.getActiveSpreadsheet()
s=ss.getActiveSheet()
var currVal=s.getRange("E5").getValue()
var plusVal= currVal +" xx"
s.getRange("E5") .setValue(plusVal)
}
function verbalcommunication3clear() {
ss=SpreadsheetApp.getActiveSpreadsheet()
s=ss.getActiveSheet()
var currVal=s.getRange("E5").getValue()
var text =s.getRange("E5").getValue().replace(" xx","");
  s.getRange("E5").setValue(text);
}
function verbalcommunication2() {
ss=SpreadsheetApp.getActiveSpreadsheet()
s=ss.getActiveSheet()
var currVal=s.getRange("F5").getValue()
var plusVal= currVal +" xx"
s.getRange("F5") .setValue(plusVal)
}
function verbalcommunication2clear() {
ss=SpreadsheetApp.getActiveSpreadsheet()
s=ss.getActiveSheet()
var currVal=s.getRange("F5").getValue()
var text =s.getRange("F5").getValue().replace(" xx","");
  s.getRange("F5").setValue(text);
}
function verbalcommunication1() {
ss=SpreadsheetApp.getActiveSpreadsheet()
s=ss.getActiveSheet()
var currVal=s.getRange("G5").getValue()
var plusVal= currVal +" xx"
s.getRange("G5") .setValue(plusVal)
}
function verbalcommunication1clear() {
ss=SpreadsheetApp.getActiveSpreadsheet()
s=ss.getActiveSheet()
var currVal=s.getRange("G5").getValue()
var text =s.getRange("G5").getValue().replace(" xx","");
  s.getRange("G5").setValue(text);
}

口头交流4和口头交流4很好。我尝试附加到其他单元格中的图形的所有其他脚本都没有错误附加,但是当我单击对象以运行脚本时,出现错误消息“找不到脚本功能'脚本名称'”。 就像我说的那样,当我从脚本项目页面运行脚本时,会出现所需的结果(在适当的单元格中为xx),而不是在单击所需的单元格图形时不会显示。

从项目页面“运行”脚本后的第一行

Top row after script is "run" from project page

单击单元格E5的图形后的第一行

Top row after cell E5's drawing is clicked

我对此并不陌生,因此不胜感激。 谢谢!

2 个答案:

答案 0 :(得分:0)

您的代码正在使用全局变量而不是局部变量,并且在所有可能包含它们的代码行上均未使用句子终止符(分号)。

虽然不是强制性地以其他方式进行操作,但这可能会导致一些意外结果,尤其是在我们不太确定Google Apps脚本和JavaScript的工作方式时。

注意:为了便于阅读,在每个变量赋值运算符(例如=)之前和之后添加空格。

替换每个

 ss=SpreadsheetApp.getActiveSpreadsheet()

作者

 var ss = SpreadsheetApp.getActiveSpreadsheet();

以此类推。

此外,删除空格并在其上添加结束分号

s.getRange("E5") .setValue(plusVal)

结果语句应如下所示:

s.getRange("E5").setValue(plusVal);

对其他类似的语句执行相同的操作。

参考

答案 1 :(得分:0)

您将必须设置条件格式,并且此脚本将所有按钮都放在侧栏上,因为它更容易实现。您可以使用样式来获得想要的东西。

我使用了函数vc和函数vcc以及一些较小的中间函数,这样我就不必全部写出来。但是除了通过var的局部变量外,它们基本上与您具有的功能相同。

function vc(a1) {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet()
  var cv=sh.getRange(a1).getValue();
  var pv= cv +" xx";
  sh.getRange(a1).setValue(pv);
  SpreadsheetApp.flush();  
}

function vcc(a1) {
  var ss=SpreadsheetApp.getActiveSpreadsheet();
  var sh=ss.getActiveSheet();
  var cv=sh.getRange(a1).getValue();
  var txt =sh.getRange(a1).getValue().replace(" xx","");
  sh.getRange(a1).setValue(txt);
  SpreadsheetApp.flush();
}

function vcD5(){
  vc('D5');
}
function vccD5(){
  vcc('D5');
}
function vcE5(){
  vc('E5');
}
function vccE5(){
  vcc('E5');
}
function vcF5(){
  vc('F5');
}
function vccF5(){
  vcc('F5');
}
function vcG5(){
  vc('G5');
}
function vccG5(){
  vcc('G5');
}

此功能将使用所有按钮创建侧边栏。

function createSideBar(){
  var vA=['D5','E5','F5','G5']
  var vB=['green','yellow','red','blue']
  var s='<style>input[type="button"]{padding:2px;margin:2px;width:100px;height:35px;}</style>';
  for(var i=0;i<4;i++){
    s+=Utilities.formatString('<div style="border:2px solid %s;"><br /><input type="button" value="%s" onClick="google.script.run.vc%s();" />',vB[i],vA[i],vA[i]);   
    s+=Utilities.formatString('<input type="button" value="%sc" onClick="google.script.run.vcc%s();" /></div>',vA[i],vA[i]);   
  }
  s+='<br /><input type="button" value="Close" onClick="google.script.host.close()" />';
  var userInterface=HtmlService.createHtmlOutput(s);
  SpreadsheetApp.getUi().showSidebar(userInterface);
}