在開發 AppSheet 應用程式時,我們時常需要處理文字字串,並從中提取或生成新的資訊。今天我們要解決一個常見且實用的情境:如何自動化建立有連續數字區間的任務。
前言:情境與挑戰
假設我們正在建立一個學習進度追蹤 App,用來記錄背誦單字或閱讀章節的進度。每一筆紀錄可能像這樣:
高中7000單字表 第2級填空測驗 101-120
高中7000單字表 第2級填空測驗 121-140
當我們完成「101-120」這個區間的學習後,希望可以一鍵新增下一筆任務,並且 App 自動幫我們產生「121-140」這個新的區間,省去手動計算與輸入的麻煩。
過去我們可能會想使用 MID() 函數來抓取數字,但當數字位數不同時(例如從 81-100 到 101-120),MID() 的參數設定會變得很複雜且沒有彈性。因此,我們需要一個更強大的組合:SPLIT() 與 INDEX()。
核心功能:SPLIT() 與 INDEX() 函數介紹
SPLIT(text, separator)
功能:這個函數可以將一個文字字串,根據你指定的「分隔符號」,切割成一個清單(List)。
範例:SPLIT("161-180", "-") 會回傳一個包含兩個元素的清單:{"161", "180"}。
INDEX(list, position)
功能:這個函數可以從一個清單中,取出指定「位置」的元素。位置從 1 開始計算。
範例:承上例,INDEX(SPLIT("161-180", "-"), 1) 會回傳清單中的第 1 個元素,也就是文字 "161"。INDEX(..., 2) 則會回傳 "180"。
公式詳解:如何組合函數達成目標
我們的目標是建立一個「複製並新增下一區間」的動作 (Action)。這個動作的核心是使用 LINKTOFORM() 函數來開啟一個新增資料的表單,並預先填入我們計算好的新數值。
假設我們的區間是 20 個數字一組(例如 101-120,121-140),以下是完整的公式:
LINKTOFORM(
"Work_Form",
"ProjectID", [ProjectID],
"WorkNote", CONCATENATE(
NUMBER(INDEX(SPLIT([WorkNote], "-"), 1)) + 20,
"-",
DECIMAL(INDEX(SPLIT([WorkNote], "-"), 2)) + 20
)
)
讓我們一步步拆解這個公式,特別是 WorkNote 欄位的生成邏輯:
SPLIT([WorkNote], "-"):
取得目前這筆資料的 WorkNote 欄位值(例如 "161-180"),並用 - 切割成清單 {"161", "180"}。
INDEX(..., 1) 和 INDEX(..., 2):
分別取出清單中的第一個值 "161"(起始數字)和第二個值 "180"(結束數字)。
NUMBER(...) + 20 和 DECIMAL(...) + 20:
INDEX 取出的值是文字格式,無法直接進行數學運算。我們必須使用 NUMBER() 或 DECIMAL() 將其轉換為數字格式。
將轉換後的起始數字與結束數字各自加上我們的區間值 20。
161 + 20 得到 181。
180 + 20 得到 200。
CONCATENATE(...):
最後,使用 CONCATENATE() 函數將新的起始數字 181、分隔符號 "-"、以及新的結束數字 200 重新組合成新的文字字串 "181-200"。
LINKTOFORM(...):
這個函數會開啟名為 Work_Form 的表單。
"ProjectID", [ProjectID]: 將目前任務的 ProjectID 複製過去。
"WorkNote", ...: 將我們剛剛用 CONCATENATE 產生出的新區間 "181-200" 填入到新表單的 WorkNote 欄位中。
AppSheet 實作步驟
前往 Behavior > Actions 頁面。
點擊 + New Action 新增一個動作。
Action name: 命名為一個易於辨識的名稱,例如「複製新增(區間20)」。
For a record of this table: 選擇你的任務資料表(影片中為 Work)。
Do this: 選擇 App: go to another view within this app。
Target: 在這裡貼上我們上面詳解的 LINKTOFORM() 公式。
Appearance: 你可以設定這個按鈕的圖示 (Action icon) 與顯示名稱 (Display name)。
Behavior (選用): 你可以設定顯示條件 (Only if this condition is true),例如設定只有在任務完成後 (ISNOTBLANK([EndTime])) 才顯示這個複製按鈕,避免重複新增。
設定完成後儲存,你就會在 App 的詳細檢視頁面看到這個新的動作按鈕了。
成果展示
當我們點擊一筆 161-180 的任務,並按下「複製新增(區間20)」按鈕時:
AppSheet 會立刻開啟一個新的任務表單,並自動將 WorkNote 欄位填上 181-200,完美達成我們的目標!
總結
透過 SPLIT、INDEX、NUMBER 與 CONCATENATE 這些函數的靈活組合,我們成功地在 AppSheet 中實現了自動化數字區間遞增的功能。這不僅大幅提升了操作效率,也減少了手動輸入可能發生的錯誤。這個技巧可以廣泛應用於任何需要處理和生成連續編號或區間的場景,是 AppSheet 開發者必學的實用技能之一。