天天看點

如何在填報場景中使用資料綁定擷取資料源

背景

在公司的日常業務中,存在不少資料的收集提取需求,大部分公司會采取Excel來完成資料的收集和彙總,但這項工作會讓負責資訊收集的業務人員相當頭大。雖然提前做好了資料收集模闆,但最終送出上來的模闆會被修改的五花八門,資訊填寫錯誤率比較高,無法實作資訊填寫不完整不允許送出的限制。後期的資料彙總雖然可以采用手動的複制黏貼來實作,但如果想要把這些資料做結構化存儲,又需要去研發人員去開發一套解析Excel文檔的功能,将這些填報資料提取入庫,整個流程比較繁瑣且出錯率較高。

如何在填報場景中使用資料綁定擷取資料源

如果從最開始将這套資料收集的業務完全做在Web端,整體的資料收集任務下發,填報,資料彙總,資料提取完全自動化,這将會大大的提高業務人員的工作效率。本文會帶大家使用純前端表格控件解決這個問題。該控件SpreadJS具備純前端、高性能等特點,在浏覽器端實作了excel的大部分功能,使得線上編輯Excel稱為可能。使用它,我們不再需要本地安裝Office相關的服務,隻要具備一個滿足H5标準的浏覽器,即可在Web端完成之前需要在本地Excel中完成的一系列操作,我們也可以在官方部署的體驗位址上對SpreadJS進行線上體驗。

資料收集邏輯

結合SpreadJS和前後端互動邏輯,即可完成一個資料收集的功能,大家如果對源碼内容感興趣可以檢視: 名額補錄Demo

在該執行個體中,使用SpreadJS中的資料綁定設計了資料收集模闆與彙總模闆;之後開發了資料收據模闆下發的功能,将資料收集模闆推送給需要填報的相關人員。

對應人員填報後,可以使用SpreadJS中資料綁定擷取資料的相關API,擷取填寫資料。

最終再借助資料綁定,将彙總資料使用資料綁定設定在彙總模闆中。通過如上幾步,客戶的填報資料在送出時,就可以以結構化資料存儲在資料庫中,彙總時隻需要從資料庫中查詢再設定到彙總模闆即可。SpreadJS同時内置了多種資料驗證,在資料送出時,結合資料驗證,可以在模闆中包含異常資料時将請求駁回,建立一套嚴謹便捷的資料送出彙總流程。

如何在填報場景中使用資料綁定擷取資料源

項目實戰

接下來我們可以一起探索SpreadJS中資料綁定的功能究竟該如何使用。

如果不了解如何在Web端項目內建SpreadJS,可以參考文章:

建構基于React18的電子表格程式;

基于Vite+React建構線上Excel;

SpreadJS内部支援了三種資料綁定方式,分别數工作表綁定、單元格綁定與表格綁定。

(1)工作表綁定

通常一個Excel檔案會包含多張工作表,如下所示,Sheet2與Sheet3分别代表的就是一張工作表:

如何在填報場景中使用資料綁定擷取資料源

工作表級别的資料綁定即将資料與目前工作表建立映射關系,相關的代碼實作可以參考學習指南-工作表綁定,這裡列出一些核心的代碼:

let designer = new GC.Spread.Sheets.Designer.Designer("designer-container")

// 擷取designer關聯的Spread對象

let spread = designer.getWorkbook()

// 擷取目前活動的sheet

let sheet = spread.getActiveSheet()

// 模拟綁定資料,表單綁定資料源是一個json數組

function generateData(count){

`    `let data = []

`    `for(let i=0; i<count;i++){

`        `let item = {}

`        `item.id = i

`        `item.name = `姓名${i}`

`        `item.age = Math.ceil(Math.random()\*10+10)

`        `item.weight = Math.round(Math.random()\*30+20)

`        `data.push(item)

`    `}

`    `return data

}

let data = generateData(100)

// 設定目前工作表的資料源

sheet.setDataSource(data)
           

執行完成綁定邏輯之後,工作表展示如下:

如何在填報場景中使用資料綁定擷取資料源

接下來我們可以在工作表中進行一些删除行,新增行,修改資料的操作,操作完成之後,調用擷取綁定資料的API,即可擷取目前修改之後的綁定資料:

如何在填報場景中使用資料綁定擷取資料源

詳細的demo示範,可以點選這裡參考實作。

(2)單元格綁定

單元格綁定見名思意,即将單元格與某一個字段key建立映射,使用者填寫的資料可以反應在這個key值對用的value中,單元格綁定代碼的實作方式可以參考學習指南-單元格綁定,本文示範如何借助設計器實作資料綁定。首先,借助設計器,完成一個資料綁定模闆的設計,可以參考如下動畫:

通過簡單的拖動,即可完成key值與單元格之間的映射建立,接下來,就可以構造一些預設資料,設定預設的綁定資料。綁定完成之後,可以修改綁定資料,修改完成之後,通過SpreadJS資料綁定擷取資料源的API,即可拿到修改之後的數值。這裡其實就是一個填報場景的展現,例如,目前需要收集人員資訊表,每一位員工在填寫完成之後,點選送出時,就可以拿到員工資訊的一個json資料,之後前端就可以将這些資料發送給服務端,讓服務端去做存儲了。

如何在填報場景中使用資料綁定擷取資料源

SpreadJS中,支援将目前檔案導出成一個他們自己能識别的json,模闆檔案可以以json形式存儲,下次通路檔案時,隻需要執行spread.fromJSON(fileJson),就可以實作模闆檔案的儲存與加在顯示了,關于表單綁定完整的Demo示範可以點選這裡,參考詳細的實作代碼。

(3)表格綁定

很多不熟悉Excel的使用者,會直接把一個Excel工作簿或者一個工作表稱為一個表格,但其實這樣的是不正确的。Excel中表格具有特殊的含義,這一點在SpreadJS中也是一緻的。SpreadJS中表格綁定的代碼實作可以參考學習指南-表格綁定。在客戶的實際業務中,表格綁定和單元格綁定往往會同時發生,接下來會示範借助SpreadJS線上表格編輯器(設計器)如何實作一個這樣的模闆設計: