本文說明如何讓使用者直接從 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