上一次說到了getRange
與 getDataRange
但是這只是「取得資料的位置與範圍」
如果要「讀取」或是「寫入」就要使用今天講的 get 與 set
getValue
與 getValues
從名字上就可以看出一個是單數,另一個在講複數個值
當取得Range 範圍後就可以使用這個方法
假設資料表格如下
index | 欄A | 欄B | 欄C |
---|---|---|---|
1 | 1 | 2 | 3 |
2 | 3 | 5 | |
3 | 4 |
var ss = SpreadSheetApp.getActiveSheet(); \\ 使用當前試算表(spread sheet)啟動中的分頁(sheet)
var range1 = ss.getRange('A2'); \\ 取得 A2 儲存格
var range2 = ss.getRange('A1:C3'); \\ 取得 A1~C3 的矩形範圍
Logger.log(range1.getValue()); \\ 結果:''
Logger.log(range1.getValues()); \\ 結果:[['']]
Logger.log(range2.getValue()); \\ 結果:1
Logger.log(range2.getValues()); \\ 結果:[[1,2,3],['',3,5],[4,'','']]
可以看到 getValues
會回傳一個二階列表
以先寫列再寫行的方式回傳值
而直接使用 getValue
時,則是直接回傳該值
若對一個矩形範圍使用getValue
,回傳左上角的值
如果有合併儲存格
則最左上角的值視為被合併的內容
其餘為空值
先了解getValues
有助於了解如何使用setValues
由於getValues
回傳二階列表
故在寫入時也應使用二階列表
ss.getRange('A2').setValue(3) // A2 的儲存格中寫入3
ss.getRange('A1:C1').setValues([[1,2,3]]) // A1 寫入 1, B1 寫入 2, C1 寫入3
ss.getRange('B2:B4').setValues([[1],[2],[3]]) // B2 寫入 1, B3 寫入 2, B4 寫入3
如果自己在嘗試使用setValues
時報錯
通常都是因為列表問題和範圍問題
列表問題是指,可能沒有寫成二階列表
範圍問題是指
可能以欄為單位寫入,應寫成[[v1], [v2], [v3], ...]
卻輸入成 [[v1, v2, v3, ...]]
或是數量不符,如:'A1:C5'應輸入5列3欄的列表,卻寫成6列或4欄 導致
有了getRange
、getValues
與 setValues
後
就可以讀取題庫取得題目(getRange, getValues)
並選擇題目呈現頁面寫入題目(getRange, setValues)
這樣就可以完成題庫的選題
下一次再來說說如何隨機挑題吧~