iT邦幫忙

2021 iThome 鐵人賽

DAY 15
0
Software Development

一份考卷不夠你可以出兩份!用 google apps script 出線上考題系列 第 15

[DAY 15] getValues 與 setValues

上一次說到了getRangegetDataRange
但是這只是「取得資料的位置與範圍」
如果要「讀取」或是「寫入」就要使用今天講的 get 與 set


getValuegetValues
從名字上就可以看出一個是單數,另一個在講複數個值
當取得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欄 導致


有了getRangegetValuessetValues
就可以讀取題庫取得題目(getRange, getValues)
並選擇題目呈現頁面寫入題目(getRange, setValues)
這樣就可以完成題庫的選題

下一次再來說說如何隨機挑題吧~


上一篇
[DAY 14] getRange 與 getDataRange
下一篇
[DAY 16] 隨機挑題與寫入題目至新頁面
系列文
一份考卷不夠你可以出兩份!用 google apps script 出線上考題30

尚未有邦友留言

立即登入留言