本文說明如何讓使用者直接從 Excel 複製儲存格範圍,貼入 Genero 應用程式的 INPUT ARRAY 欄位中,以快速匯入資料。
應用情境
商業使用者常需要將 Excel 中的資料(例如預算數字或預測數值)匯入應用程式。與其另外開發專用的匯入程式,不如直接利用現有的 INPUT ARRAY 資料輸入畫面,讓使用者以複製貼上方式完成作業。
歷史背景
在使用 Genero Desktop Client(GDC)與 Native 介面時,剪貼簿的資料可以透過鍵盤緩衝區讀取,系統會自動在欄位間定位(Tab)。此功能需要幾個條件同時滿足:游標在正確欄位、欄位數量相符、資料型別相容,且不觸發阻礙貼上操作的驗證事件。
現有限制
隨著轉換至 GBC(Genero Browser Client)與 Universal Rendering,原本讀取剪貼簿並視為鍵盤緩衝區輸入的能力已不復存在。
現代解決方案
本文參照 GitHub 上的範例庫(ex_paste_from_excel),示範一個使用反射(reflection)機制的通用函式,用以將剪貼簿資料填入陣列。主要技術要素包括:
- 取得剪貼簿內容:使用
ui.Interface.frontCall("standard","cbget",[], str)讀取剪貼簿 - 解析資料:以
base.StringTokenizer按行分隔符(ASCII 10 / LF)與欄分隔符(ASCII 9 / TAB)切割剪貼簿文字 - 欄位數驗證:確認剪貼簿中的欄數與陣列結構相符
- 反射填值:使用反射方法
reflect_cell.set(reflect.Value.copyOf(cell))寫入陣列值
呼叫方式
主要函式的呼叫模式如下:
CALL paste_from_excel.paste(reflect.Value.valueOf(arr)) RETURNING ok, error_text
2024 年更新說明
Genero Browser Client 5.00.08 版已恢復原生剪貼簿貼上功能,對於使用新版本的開發者而言,上述的手動處理方式可能已不再必要。
原文:https://4js.com/ask-reuben/ig-178/
· 有任何 Genero 技術問題或翻譯疑問,歡迎來信
support@t100.app