Vue2+Univer 环境搭建

node js 版本 16.32+

参考文档:

Vue2+Univer实现可编辑Excel_vue univer-CSDN博客

https://univer.ai/guides/sheet/getting-started/quickstart

实现步骤:

1、包里面直接写这些

复制代码
"@riophae/vue-treeselect": "0.4.0",
    "@univerjs/core": "0.2.4",
    "@univerjs/design": "0.2.4",
    "@univerjs/docs": "0.2.4",
    "@univerjs/docs-ui": "0.2.4",
    "@univerjs/engine-formula": "0.2.4",
    "@univerjs/engine-render": "0.2.4",
    "@univerjs/facade": "^0.2.4",
    "@univerjs/network": "0.2.4",
    "@univerjs/rpc": "0.2.4",
    "@univerjs/sheets": "0.2.4",
    "@univerjs/sheets-formula": "0.2.4",
    "@univerjs/sheets-numfmt": "0.2.4",
    "@univerjs/sheets-ui": "0.2.4",
    "@univerjs/ui": "0.2.4",

这个的数据来源官网的这里,拷贝过来

StackBlitz

package里面的这个依赖也是

复制代码
  "devDependencies": {
    "@univerjs/webpack-plugin": "0.4.3",

然后vue.config里面加个:new UniverPlugin()

复制代码
  configureWebpack: {
    name: name,
    resolve: {
      alias: {
        '@': resolve('src')
      }
    },
    plugins: [
      // http://doc.ruoyi.vip/ruoyi-vue/other/faq.html#使用gzip解压缩静态文件
      new CompressionPlugin({
        cache: false,                                  // 不启用文件缓存
        test: /\.(js|css|html|jpe?g|png|gif|svg)?$/i,  // 压缩文件格式
        filename: '[path][base].gz[query]',            // 压缩后的文件名
        algorithm: 'gzip',                             // 使用gzip压缩
        minRatio: 0.8,                                 // 压缩比例,小于 80% 的文件不会被压缩
        deleteOriginalAssets: false                    // 压缩后删除原文件
      }),new UniverPlugin()
    ],
  },

新建一个universheet页面

复制代码
<template>
  <div ref="container"
       class="univer-container"></div>
</template>

<script>
import { Univer, UniverInstanceType, LocaleType } from '@univerjs/core'
import { defaultTheme } from '@univerjs/design'
import { UniverDocsPlugin } from '@univerjs/docs'
import { UniverDocsUIPlugin } from '@univerjs/docs-ui'
import { UniverFormulaEnginePlugin } from '@univerjs/engine-formula'
import { UniverRenderEnginePlugin } from '@univerjs/engine-render'
import { UniverSheetsPlugin } from '@univerjs/sheets'
import { UniverSheetsFormulaPlugin } from '@univerjs/sheets-formula'
import { UniverSheetsUIPlugin } from '@univerjs/sheets-ui'
import { UniverUIPlugin } from '@univerjs/ui'
import { FUniver  } from '@univerjs/facade'
import { zhCN, enUS } from 'univer:locales'
import '@univerjs/sheets-ui/lib/index.css'
export default {
  name: 'UniverSheet',
  props: {
    data: {
      value: Object,
      default: () => ({})
    }
  },
  watch: {
    data: {
      handler(val) {
        this.destroyUniver()
        this.init(val)
      },
      immediate: true
    }
  },
  data() {
    return {
      univer: null,
      workbook: null,
      univerAPI: null
    }
  },
  mounted() {
    this.init(this.data)
  },
  methods: {
    init(data = {}) {
      const univer = new Univer({
        theme: defaultTheme,
        locale: LocaleType.ZH_CN,
        locales: {
          [LocaleType.ZH_CN]: zhCN,
          [LocaleType.EN_US]: enUS
        }
      })
      this.univer = univer
      univer.registerPlugin(UniverRenderEnginePlugin)
      univer.registerPlugin(UniverFormulaEnginePlugin)
      univer.registerPlugin(UniverUIPlugin, {
        container: this.$refs.container
      })

      univer.registerPlugin(UniverDocsPlugin, {
        hasScroll: false
      })
      univer.registerPlugin(UniverDocsUIPlugin)
      univer.registerPlugin(UniverSheetsPlugin)
      univer.registerPlugin(UniverSheetsUIPlugin)
      univer.registerPlugin(UniverSheetsFormulaPlugin)

      this.workbook = univer.createUnit(UniverInstanceType.UNIVER_SHEET, data)

      this.univerAPI = FUniver.newAPI(univer)
    },
    destroyUniver() {
      this.univer?.dispose()
      this.univer = null
      this.workbook = null
    },
    getData() {
      if (!this.workbook) {
        throw new Error('未初始化')
      }
      return this.workbook.save()
    }
  }
}
</script>
<style scoped>
.univer-container {
  width: 100%;
  height: 100%;
  overflow: hidden;
}
:global(.univer-menubar) {
  display: none;
}
</style>

然后再来个页面引用他

复制代码
<template>
   <div style="height: 800px;width: 100%;">
   <button @click="getData">获取数据</button>
   <UniverSheet id="sheet"
                ref="univerRef"
                :data="data" />
 </div>
</template>

<script>

import UniverSheet from './UniverSheet.vue'
export default {
  name: "Index",
  components:{UniverSheet},
  data(){
    return{
      select:[],
      data: {},
      loginUser: ''
    }
  },
  mounted(){

  },
  methods:{
    getData() {
      const result = this.$refs.univerRef?.getData()
      console.log(JSON.stringify(result, null, 2))
    },

  }
}
</script>

<style lang="less" scoped>


}
</style>

启动

相关推荐
张萌杰14 小时前
深度学习的基础知识(常见名词解释)
人工智能·深度学习·机器学习·1024程序员节
开开心心就好1 天前
免费无广告卸载工具,轻便安全适配全用户
linux·运维·服务器·网络·安全·启发式算法·1024程序员节
开开心心就好2 天前
图片格式转换工具,右键菜单一键转换简化
linux·运维·服务器·python·django·pdf·1024程序员节
徐子童5 天前
网络协议---TCP协议
网络·网络协议·tcp/ip·面试题·1024程序员节
扫地的小何尚6 天前
NVIDIA RTX PC开源AI工具升级:加速LLM和扩散模型的性能革命
人工智能·python·算法·开源·nvidia·1024程序员节
数据皮皮侠AI7 天前
上市公司股票名称相似度(1990-2025)
大数据·人工智能·笔记·区块链·能源·1024程序员节
开开心心就好8 天前
系统清理工具清理缓存日志,启动卸载管理
linux·运维·服务器·神经网络·cnn·pdf·1024程序员节
Evan东少10 天前
[踩坑]笔记本Ubuntu20.04+NvidiaRTX5060驱动+cuda+Pytorch+ROS/Python实现人脸追踪(环境准备)
1024程序员节
不爱编程的小陈11 天前
C/C++每日面试题
面试·职场和发展·1024程序员节
开开心心就好12 天前
右键菜单管理工具,添加程序自定义名称位置
linux·运维·服务器·ci/cd·docker·pdf·1024程序员节