轉(zhuǎn)帖|使用教程|編輯:鮑佳佳|2021-01-26 11:27:18.890|閱讀 294 次
概述:通過前文的學習,我們已經(jīng)用 Vite 搭建出了Vue 3 的項目原型。今天,我們將基于這個原型,集成 SpreadJS 電子表格組件和在線編輯器組件,使其具備 Excel公式計算、在線導入導出 Excel 文檔、數(shù)據(jù)透視表和可視化分析能力,實現(xiàn)在線表格編輯系統(tǒng)的雛形。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
通過前文的學習,我們已經(jīng)用 Vite 搭建出了Vue 3 的項目原型。今天,我們將基于這個原型,集成 SpreadJS 電子表格組件和在線編輯器組件,使其具備 Excel公式計算、在線導入導出 Excel 文檔、數(shù)據(jù)透視表和可視化分析能力,實現(xiàn)在線表格編輯系統(tǒng)的雛形。
設(shè)計思路
SpreadJS 組件介紹
是一款基于 HTML5 的原生JavaScript組件,兼容 450 種以上的 Excel 公式,提供高度類似 Excel 的功能,主要用于開發(fā) Web Excel 組件,實現(xiàn)多人協(xié)同編輯、高性能模板設(shè)計和數(shù)據(jù)填報等功能模塊,組件架構(gòu)符合UMD規(guī)范,可以以原生的方式嵌入各類應用,并與前后端技術(shù)框架相結(jié)合。
目前,SpreadJS已針對Vue 2做了組件封裝,暫時還未對Vue 3提供組件封裝,不過我們可以通過自己封裝SpreadJS組件和表格編輯器的方式,將其集成在Vue 3項目中。
將 SpreadJS 與Vue 3 集成
1. 安裝模塊
修改package.json 文件,添加我們需要的模塊,運行命令 npm install 來安裝所有依賴項目。
"dependencies": { "@fortawesome/fontawesome-free": "^5.14.0", "@grapecity/spread-excelio": "^14.0.1", "@grapecity/spread-sheets": "^14.0.1", "@grapecity/spread-sheets-barcode": "^14.0.1", "@grapecity/spread-sheets-charts": "^14.0.1", "@grapecity/spread-sheets-designer": "^14.0.1", "@grapecity/spread-sheets-designer-resources-cn": "^14.0.1", "@grapecity/spread-sheets-designer-vue": "^14.0.1", "@grapecity/spread-sheets-languagepackages": "^14.0.1", "@grapecity/spread-sheets-pdf": "^14.0.1", "@grapecity/spread-sheets-pivot-addon": "^14.0.1", "@grapecity/spread-sheets-print": "^14.0.1", "@grapecity/spread-sheets-resources-zh": "^14.0.1", "@grapecity/spread-sheets-shapes": "^14.0.1", "@grapecity/spread-sheets-vue": "^14.0.1", "axios": "^0.21.0", "vue": "^3.0.2", "vue-router": "^4.0.0-rc.5" },
2. 配置路由
在src文件夾下添加3個文件。
配置路由:
import { createRouter, createWebHistory } from "vue-router"; const routes = [ { path: "/", name: "Designer", component: () => import("../views/Designer.vue"), }, { path: "/spreadSheet", name: "SpreadSheet", component: () => import("../views/SpreadSheet.vue"), } ]; export const router = createRouter ({ history: createWebHistory(), routes:routes });
3. 在main.js中引入:
import { createApp } from 'vue' import { router } from './router/index' import App from './App.vue' import './index.css' const app = createApp(App) app.use(router); app.mount('#app')
4. 修改App.vue:
在main.js文件中,將 Vue Router 文件添加到項目中(在Vue 2 中,導入它使用的是 Vue.use(router) ,但在Vue 3中添加方式發(fā)生了變化)。如下面的截圖所示,Vue 3是使用createApp方法來實際創(chuàng)建項目的,在掛載應用程序前,需要通過 app.use(router) 來添加到項目中。
<template> <div id="app"> <div> <router-link to="/">Designer</router-link> | <router-link to="/spreadSheet">SpreadSheet</router-link> </div> <router-view/> </div> </template> <script> export default { name: 'App', components: { }, setup() { } } </script>
看到這里大家應該會發(fā)現(xiàn),Vite中的路由配置以及 main.js 引入的方式較Vue 2有所不同,為了讓其更好的支持Typescript,Vue Router的Vue 3版本要求我們必須導入新方法才能使代碼正常工作,其中最重要的是createRouter 和 createWebHistory。
5. 集成designer組件
配置完路由之后,就可以開始集成designer組件了。首先,在components文件夾下添加2個文件:
接著,在 Designer.vue 中集成SpreadJS 表格編輯器,代碼如下圖所示:
<template> <div> <div ref="ssDesigner" style="height:700px;width:100%;text-align: left;"> </div> </div> </template> <script> import { onMounted, ref} from "vue"; import "../../node_modules/@grapecity/spread-sheets/styles/gc.spread.sheets.excel2013white.css"; import "../../node_modules/@grapecity/spread-sheets-designer/styles/gc.spread.sheets.designer.min.css"; import "@grapecity/spread-sheets-designer-resources-cn"; import "@grapecity/spread-sheets-designer"; import GC from '@grapecity/spread-sheets' import ExcelIO from '@grapecity/spread-excelio' export default { name: 'Designer', props: { }, setup(props, {emit}) { const ssDesigner = ref(null); onMounted(() => { var designer = new GC.Spread.Sheets.Designer.Designer(ssDesigner.value); emit("designerInitialized", designer); } ); return { ssDesigner }; } } </script>
第三步,在views/Designer.vue中引入該組件及相關(guān)依賴。
import Designer from '../components/Designer.vue' import {ref} from "vue" import axios from "axios" import GC from '@grapecity/spread-sheets' import ExcelIO from '@grapecity/spread-excelio'
第四步,在模板中使用該組件標簽。
<template> <div> <Designer v-on:designerInitialized="designerInitialized"> </Designer> </div> </template>
最后,在setup函數(shù)中初始化編輯器。
let designer = undefined; let designerInitialized=(wb)=> { designer = wb; let spread = designer.getWorkbook(); }
完成上述步驟,頁面就可以顯示編輯器UI了。
如何自定義編輯器的工具欄?
完成了上述步驟,我們已經(jīng)成功的將 SpreadJS編輯器集成到項目中,接下來演示如何在工具欄中新建 “加載”和“更新”兩個按鈕。
由于 SpreadJS 在線表格編輯器采用了全新可配置設(shè)計,在任何區(qū)域都可采取json config 的配置方式。通過修改默認的GC.Spread.Sheets.Designer.DefaultConfig,便可以達到自定制功能。
1. 定制 Ribbon 選項卡
在瀏覽器Console中輸入GC.Spread.Sheets.Designer.DefaultConfig可查看默認ribbon選項卡配置。參考默認配置,可以自定義操作選項卡。
let DefaultConfig = GC.Spread.Sheets.Designer.DefaultConfig; let customerRibbon = { id: "operate", ext: "操作", buttonGroups: [ ], };
2、自定義按鈕
在定義按鈕之前,需要先定義按鈕點擊時的命令Commands,并將命令注冊到config的commandMap屬性上。
let ribbonFileCommands = { "loadTemplateCommand": { iconClass: "ribbon-button-download", text: "加載", //bigButton: true, commandName: "loadTemplate", execute: load }, "updateTemplateCommand": { iconClass: "ribbon-button-upload", text: "更新", //bigButton: true, commandName: "updateTemplate", execute: update } }
上面的示例代碼注冊了 loadTemplateCommand和 updateTemplateCommand 兩個命令。
iconClass示例代碼:
.ribbon-button-download { background-image: url(圖片地址,可以是base64 svg)};
有了命令就可以添加對應button 的config了:
let customerRibbon = { id: "operate", text: "操作", buttonGroups: [ { label: "文件操作", thumbnailClass: "ribbon-thumbnail-spreadsettings", commandGroup: { children: [ { direction: "vertical", commands: ["loadTemplateCommand", "updateTemplateCommand"], } ], }, }, ], };
在designer的config中加入自定義的命令和按鈕:
DefaultConfig.ribbon.push(customerRibbon); DefaultConfig.commandMap = {}; Object.assign(DefaultConfig.commandMap, ribbonFileCommands);
最后,不要忘了補充Load方法和update方法中的代碼。
Load方法和update方法的作用Load方法用于執(zhí)行excel文件的加載。在接收到后臺傳遞的json數(shù)據(jù)后,使用fromJSON方法加載該文件,代碼如下圖:
let load = (e)=>{ let spread = designer.getWorkbook(); let formData = new FormData(); formData.append("fileName", "path"); axios.post('spread/loadTemplate', formData, { responseType: "json", }).then((response) => { if(response) { alert("加載成功"); templateJSON = response.data; spread.fromJSON(templateJSON); } }).catch((response) => { alert("錯誤"); }) }
Update方法用于執(zhí)行文件的更新。在編輯器對加載的文件做出操作,如修改背景色、添加文本時,使用toJSON方法將當前spread保存為json數(shù)據(jù)傳遞給后臺存儲,代碼如下:
let update = (e)=>{ let spread = designer.getWorkbook(); let spreadJSON = JSON.stringify(spread.toJSON()); let formData = new FormData(); formData.append("jsonString", spreadJSON); formData.append("fileName", "fileName"); axios.post('spread/updateTemplate', formData).then((response) => { if(response) { alert("更新成功"); } }).catch((response) => { alert("錯誤"); }) }
完成上述操作,新建的按鈕就可以正常工作了。如下圖示例,點擊工具欄加載按鈕,文件已在 SpreadJS 表格編輯器成功加載。
以上就是Vue 3 組件開發(fā):搭建基于SpreadJS的表格編輯系統(tǒng)(組件集成篇)的全部內(nèi)容,通過集成 SpreadJS 電子表格組件和在線編輯器組件,我們搭建的項目原型已經(jīng)具備了在線表格編輯系統(tǒng)的雛形。
在下一章功能拓展篇中,我們將演示如何為這個系統(tǒng)雛形增加更多電子表格功能,并提供整個工程源碼供參考。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: