从电子表格单元格

时间:2016-01-22 09:09:05

标签: google-apps-script google-sheets

我有一个包含许多行的sppreadsheet,在每一行中 - 例如在第二列中具有状态的单元格:a010111101001和大约30多个状态。在脚本中,我的功能与状态单元格相同。我想要的只是一个函数,它根据活动状态单元调用所有其他函数。现在我只有函数,从活动cel获取脚本的名称,如果你能帮助我,我将非常感激。这是我的代码:

function nameoffunc() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('123')
  var row = ss.getActiveCell().getRow();
  var status = ss.getRange(row, 2).getValue();
  //value from status - is the name of function
  //I search way to do something like this:
  //run.scrpt(status);
}

更新: 在状态变量 - 值“a00110000000000000”

function a00110000000000000(){
  var ss1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('123')
  var result = ss1.getRange("C35");
  result.setValue(22)
}

function nameoffunc() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('123')
  var row = ss.getActiveCell().getRow();
  var status = ss.getRange(row, 2).getValue();
  var a = {
    "u2": function(){return status;},
    "as": function(){return "eft";}
          };
Logger.log(a["u2"]());
}

更新:谢谢@daniel! 从电子表格单元格中按名称运行脚本的方法是:

function nameoffunc() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('123')
  var row = ss.getActiveCell().getRow();
  var status = ss.getRange(row, 2).getValue();
  var a = {
    "a00110000000000000": function(){
  var ss1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('123')
  var result = ss1.getRange("C35");
  result.setValue(22)
    },
    "as": function(){return "eft";}
  };
Logger.log(a[status]());
}

1 个答案:

答案 0 :(得分:1)

你可以做的是:

  • 在一个单元格中,创建所有函数名称的in-cell drop down list
  • 创建onEdit()函数来处理值更改。
  • 在您的事件处理程序中,检查range是否为包含下拉列表的单元格。
  • 检查值并执行相应的功能。

无需使用switch即可轻松调用功能:

定义功能:

  var a = {
    "u2": function(){return "abc";},
    "u1": function(){return "eft";}
  };

按名称调用函数(示例):

Logger.log(a["u2"]());