2015-11-25 207 views
0

我正在爲構建動態下拉列表的Google Spreadsheets構建腳本。這是用JavaScript編寫的,但這是我工作過的第一批之一,需要一些邏輯幫助。使用Javascript在Google表單中創建動態下拉列表

代碼工作,但現在我想要的是有列B和C列依賴於A列中選擇的類別

下面的腳本有三個層次:主要類別,子組(這是取決於主要類別)和子分組(依賴於子分組)。

所以在我的情況下,我標記視頻內容的多個屬性。所以主要類別可能是「音頻」,我想標記它在同一個子組中的兩個項目。

基本上我怎樣才能使列B和C只依賴於列A中的選擇使用下面的腳本?

我敢肯定我在這裏需要調整的東西:aColumn + 1);

function depDrop_(range, sourceRange){ 
var rule = SpreadsheetApp.newDataValidation().requireValueInRange(sourceRange, true).build(); 
range.setDataValidation(rule); 
} 
function onEdit(){ 
var aCell = SpreadsheetApp.getActiveSheet().getActiveCell(); 
var aColumn = aCell.getColumn(); 
if (aColumn == 1 && SpreadsheetApp.getActiveSheet()){ 
var range = SpreadsheetApp.getActiveSheet().getRange(aCell.getRow(), aColumn + 1); 
var sourceRange = SpreadsheetApp.getActiveSpreadsheet().getRangeByName(aCell.getValue()); 
depDrop_(range, sourceRange); 
} 
else if (aColumn == 2 && SpreadsheetApp.getActiveSheet()){ 
var range = SpreadsheetApp.getActiveSheet().getRange(aCell.getRow(), aColumn + 1); 
var sourceRange = SpreadsheetApp.getActiveSpreadsheet().getRangeByName(aCell.getValue()); 
depDrop_(range, sourceRange); 
} 
} 
+0

@pnuts - 好點 - 我正在使用谷歌電子表格,並認爲某些具有高級Excel體驗的人可能會遇到類似的問題,並決定編寫一個腳本。 –

+0

請閱讀http://stackoverflow.com/help/tagging和相關的標籤維基。 – pnuts

回答

0

下面是一些代碼,可能會有幫助。我沒有測試過,但看看我做了什麼;弄清楚代碼中的邏輯和改進;運行它,看看會發生什麼。如果您發現錯誤或意想不到的結果,請告訴我。

function onEdit(e) { //Use the event - e 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); //get spreadsheet - ss 
    var sh = ss.getActiveSheet(); //get sheet - sh 

    var cellRng = e.range; //Range of cell that was edited 

    var rowEdited = cellRng.getRow(); 
    var columnEdited = cellRng.getColumn(); 
    var range; //define a variable for a range, and leave it undefined 

    if (columnEdited === 1) {//If column one was edited, change the data validation in the next column 
    //Run the function to update the validation twice, once for column B, once for column C 
    range = sh.getRange(rowEdited, columnEdited + 1); //Update Column B 
    depDrop_(range, cellRng); 

    range = sh.getRange(rowEdited, columnEdited + 2); //Update column C 
    depDrop_(range, cellRng); 
    }; 

    //If column 1 was not edited, then do nothing 
}; 
+0

它還活着!感謝您簡化 –

+0

如果這解決了您的問題,請標記爲正確答案。 –