Lynn.Dou 发表于 2020-12-1 16:07:47

VUE 3 组件开发实战 – 在线电子表格文档编辑(三)

本帖最后由 lynn512 于 2020-12-1 16:21 编辑

      在上篇文章介绍了如何将组件版设计器集成在vue3项目及如何自定义设计器工具栏,本节课将带领大家将SpreadJS集成在vue3项目中,整体思路与上篇文章集成组件版设计器类似。
      首先在components/ SpreadSheet.vue中集成SpreadJS,代码如下所示:
<template>
<div>
    <div ref="ssHost" 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 GC from "@grapecity/spread-sheets"

export default {
name: 'SpreadSheets',
props: {
},
setup(props, {emit}) {
    const ssHost = ref(null);
    onMounted(() => {
      var workbook = new GC.Spread.Sheets.Workbook(ssHost.value);
      emit("workbookInitialized", workbook)
    });
    return {
      ssHost
    };
}
}
</script>      1、在模板中添加一个div,这个div就是spread的容器,可以通过css设置容器的宽高位置等,也就是自定义了spread的显示大小及位置。
      2、导入此组件所需要的依赖。
      3、在setup方法中新建一个spread,具体代码如上。

         在views/ SpreadSheet.vue中引入该组件及相关依赖。
import SpreadSheets from '../components/SpreadSheets.vue'
import {ref} from "vue"
import axios from "axios"
import GC from '@grapecity/spread-sheets'
import ExcelIO from '@grapecity/spread-excelio'      在模板中使用该组件标签
<template>
<div>
    <button @click="load($event)">加载</button>
    <button @click="update($event)">更新</button>
    <SpreadSheets v-on:workbookInitialized="workbookInitialized"></SpreadSheets>
</div>
</template>      然后就可以在setup函数中来初始化spread了。
let workbook = undefined;
let workbookInitialized=(wb)=>{
      workbook = wb
    }
      我们在SpreadSheet组件中添加了“加载”和“更新”按钮。与上篇designer组件设计思路一致:
      Load方法执行excel文件的加载,接收到后台传递的json数据后,即使用fromJSON方法加载该文件。

let load = (e)=>{
      let formData = new FormData();
      formData.append("fileName", "path");
      axios.post('spread/loadTemplate', formData, {
            responseType: "json",
      }).then((response) => {
            if(response) {
                alert("加载成功");
                templateJSON = response.data;
                workbook.fromJSON(templateJSON);
            }
      }).catch((response) => {
            alert("错误");
      })
    }      Update执行文件的更新。在设计器对加载的文件做些操作,如修改背景色、添加文本等,使用toJSON方法当前spread保存为json数据传递给后台存储。
let update = (e)=>{
      let spreadJSON = JSON.stringify(workbook.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("错误");
      })
    }      这时页面就可以显示spread了,这说明我们已经成功将SpreadJS集成在项目中了。
      最终效果如下图所示,切换路由可以看到spread与组件版设计器可以正常切换显示。在设计器中修改加载的Excel文件,点击工具栏更新按钮。切换至SpreadSheet组件,点击加载按钮可以看到已成功加载刚才所修改的文件。



      以上就是vue3项目集成SpreadJS与设计器的全部内容,完整代码请参考附件中的前后端demo。


页: [1]
查看完整版本: VUE 3 组件开发实战 – 在线电子表格文档编辑(三)