[Google 試算表] 製作下拉式連動選單解決台灣地址

2017-02-18

自從我寫了幾篇Google 的試算表後,真的有人來問我問題,這次問的問題比較麻煩,他想要建立連動的下拉式選單,基於這案例因為我也很好奇,所以我決定來試試看,基本上我也沒這麼厲害,我是參考這一篇網路影片做出來的,https://www.youtube.com/watch?v=rW9T4XZy-7U (DYNAMIC DEPENDENT DROP DOWN LISTS IN GOOGLE SPREADSHEETS) ,如果我文章說不清楚的,就麻煩直接看這影片吧,他其中提供的code 是有用的…
image

1. 首先你得先建立資料我先建第一層選單,這時候你把所有的一級縣市像是台北市,新北市..等都放進去並且定義命名範圍為CITY ,當然你可以另外見一張工作表這樣也比較乾淨
image

2.建立各縣市的資料,並且跟你裡面的資料有所對應,譬如你的資料中有一個是新北市,那你就得建立一個範圍叫做新北市像是這樣
image

3. 這樣都建立好範圍跟命名好了,接下來就是必須要寫點程式,當然這程式不是我寫的,是上述我提到的那影片裡面提供的https://www.youtube.com/watch?v=rW9T4XZy-7U (DYNAMIC DEPENDENT DROP DOWN LISTS IN GOOGLE SPREADSHEETS)
選擇工具 > 指令碼編輯器
image

貼上這段Code 並且存檔 :

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);
}


}

image

如果他跟你要授權記得給他,然後存檔

4.接下來就是對第一層連動的選單也就是選縣市的地方,加入資料驗證並且範圍選擇CITY
image

5.接下來大功告成,這樣他旁邊的欄位就是變成他對應的範圍清單,有沒有很簡單,試著做做看吧 :)


當麻許的超技八 2014 | Donma Hsu Design.