【问题标题】:A script in Google spreadsheet works from the script control windows but not from a trigger in the sheet?Google 电子表格中的脚本可从脚本控制窗口工作,但不能从工作表中的触发器工作?
【发布时间】:2016-04-06 07:41:23
【问题描述】:

我为突出显示 Google 表格中的单词而构建的这段小代码存在问题。
当我从脚本控制窗口启动此代码时,它运行良好,但当我尝试从工作表中的单元格触发脚本时,它不起作用。
我是这个谷歌电子表格的所有者。 这是代码:

function Surligner(nom) {

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet() ;
  var mois = sheet.getRange("A4").getValue().getMonth() ;
  var listeNbrJours = new Array(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31) ;

  // nom = sheet.getRange("M1").getValue() ;

  sheet.getRange(4, 5, listeNbrJours[mois],9).setBorder(true, true, true, true, true, true, "black", null ) ;
  sheet.getRange(4, 5, listeNbrJours[mois],9).setFontColor("black") ;

  for (var i=4 ; i<listeNbrJours[mois]+3 ; i++)
  {
    for (var j=5 ; j<14 ; j++) 
    {
      if (sheet.getRange(i,j).getValue().match(nom) ) 
      { 
        sheet.getRange(i,j).setBorder(true, true, true, true, true, true, "red", null ) ;
        sheet.getRange(i,j).setFontColor("red") ;
      }
    }
  }
}

我从带有=SURLIGNER(M1) 的工作表中触发脚本,其中M1 是包含要突出显示的名称的单元格。
消息错误是:

你不能调用 setBorder(第 9 行)

【问题讨论】:

    标签: google-apps-script


    【解决方案1】:

    显然你不能使用自定义函数来运行set*函数

    引用 Custom Functions in Google Sheets docs

    电子表格只读(可以使用大多数 get*() 方法,但不能使用 set*())。

    这意味着从工作表调用函数将不起作用。

    一种可能的解决方法是使用它

    nom = sheet.getRange("M1").getValue() ; // I think you thought about it too
    

    然后使用onEdit 事件触发器运行Surligner 它(尽管由于昂贵的Range.getValue 方法可能会产生问题。

    【讨论】:

      猜你喜欢
      • 2016-11-29
      • 1970-01-01
      • 2020-06-11
      • 1970-01-01
      • 2021-06-13
      • 2020-02-28
      • 2015-02-28
      • 1970-01-01
      • 2020-06-28
      相关资源
      最近更新 更多