2016-01-22 96 views
1

我有一個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! 運行由名字從電子表格單元格scripn的方法是:

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

你可以做的是這樣的:

  • 在一個小區,創建你的所有函數名
  • 創建的in-cell drop down listonEdit()功能來處理價值變化。
  • 在您的事件處理程序中,檢查range是否爲具有下拉列表的單元格。
  • 檢查值並執行相應的功能。

輕鬆調用功能,而無需使用switch

定義函數:

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

按名稱調用函數(例如):

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

謝謝你的回答,但我不知道我的理解是否正確:我如何用「狀態」變量的名稱調用腳本?我嘗試寫狀態而不是abc,但沒有發生任何情況,名稱狀態下的funktion不起作用。請參閱更新,我做錯了什麼? – Davagaz

+0

已找到答案!非常感謝,@丹尼爾!在更新中回答 – Davagaz

相關問題