6

我创建了以下简单函数:

function test(r,c) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  sheet.getRange(r,c).setBackground("red");
  return 1;
}

在电子表格中,我写“=test(row(),column())

这会导致错误并显示以下消息:错误:您无权调用 setBackground(第 3 行)。

如果我在脚本中创建另一个函数调用,如下所示:

function test_the_test(){
  test(5,4); 
}

为什么我不能从电子表格单元格调用测试函数?

先感谢您

4

3 回答 3

7

正如文档中明确解释的那样,自定义函数返回值,但它们不能在它们所在的单元格之外设置值。在大多数情况下,单元格 A1 中的自定义函数无法修改单元格 A5。 这当然也适用于其他方法,例如 setBackground 等。

于 2014-06-26T09:57:34.507 回答
3

不可能从单元格中调用任何设置内容的东西,但可以从按钮中调用它。

其实很容易。绝对不能更改其他单元格内容是不正确的。

诀窍是不要从单元格调用函数,而是将其安装到绘图/图像中。

  1. 点击插入->绘图
  2. 绘制图像并保存(您应该在电子表格中看到您的图像)
  3. 用鼠标右键单击它 - 在右上角,有一个小三角形打开选项
  4. 单击分配脚本并键入不带括号的脚本名称(例如“test”而不是“test()”)并确认
  5. 单击按钮。将出现一个要求访问电子表格的权限的弹出窗口。
  6. 确认一下,如果出现刷新问题,只需手动刷新(F5)
  7. 现在你可以点击按钮,你可以编辑任何你喜欢的单元格

此代码在安装到按钮时工作正常。

function test() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  sheet.getRange(3,5).setBackground("red");
}
于 2015-09-08T21:59:58.037 回答
0

当前版本的 Google 表格(2022 年 1 月)使用 Apps 脚本编辑器,允许您将脚本放入容器文件中,该文件会自动附加到您的 Google 表格中。

您可以从 Google 表格菜单的下方打开 Apps 脚本编辑器Extensions -> App Script

在默认Code.gs编辑器文件中,您可以简单地扩展一个默认事件挂钩,例如onEdit()并放入逻辑以将您的操作过滤到一组特定的情况。下面是一个使用这个钩子的简单例子:

function onEdit(e) {
  if( ! e ){
    return;
  }
  var currentSheet = e.source.getActiveSheet();
  var currentRange = e.range;
  // only want action to occur when a single cell changes
  if( currentRange.getNumRows() === 1 && currentRange.getNumColumns() === 1 ){
    var currentColumn = currentRange.getLastColumn();
    var currentRow = currentRange.getLastRow();
    // only want action to occur for a column on a certain sheet
    var myTargetSheet = "Sheet 1";
    var myTargetColumn = 1;
    if( currentSheet.getName() == myTargetSheet && currentColumn == myTargetColumn ){
      // set background color for the selected row based on a lookup
      var cellValue = currentRange.getCell(1,1).getValue();
      var assignedColor = myCustomSearch( cellValue );
      currentSheet.getRange( "A" + currentRow + ":E" + currentRow ).setBackgroundColor( assignedColor );
    }
  }
}

function myCustomSearch( searchTerm ){
  var assignedColor = "#ffffff";
  var lookupSheet = SpreadsheetApp.getActive().getSheetByName("Sheet 2");
  var lookupRange = lookupSheet.getRange("H1:H20"); // where the search terms live
  var numColumns = lookupRange.getNumColumns();
  var numRows = lookupRange.getNumRows();
  var lookupList = lookupRange.getValues();
  for( var myColumn=0; myColumn < numColumns; myColumn++ ){
    for( var myRow=0; myRow < numRows; myRow++ ){
      if( lookupList[myRow][myColumn] == searchTerm ){
        assignedColor = lookupSheet.getRange("H"+(myRow+1)).getBackgroundColor();
        break;
      }
    }
  }
  return assignedColor;
}

于 2022-01-07T19:38:30.077 回答