vue3+TS+univer实现在线表格

一、univer简介

univer的前身是lunckysheet,Univer 提供了一个全面的企业级文档与数据协同的解决方案,支持电子表格文本文档演示幻灯片三大核心文档类型。通过灵活的 API 和插件机制,开发者可以在 Univer 的基础上进行个性化功能的定制和扩展,以适应不同用户在不同场景下的特定需求。

lunckysheet:Luckysheet 已不再维护,推荐使用 Univer 替代 | Luckysheet文档

univer:Introduction – Univer

二、安装与引入

注意:确保使用的版本为 npm@7 及以上、 pnpm@8 及以上,如果你正在使用 pnpm@6 ~ pnpm@7,可以尝试配置 auto-install-peers=true 2来解决依赖安装问题

下面我会以npm为例:

1、安装核心插件以及基本的插件 如果需要其他的功能可以详细研究其他的插件的引入与使用哦
npm install @univerjs/core @univerjs/design @univerjs/docs @univerjs/docs-ui @univerjs/engine-formula @univerjs/engine-render @univerjs/sheets @univerjs/sheets-formula @univerjs/sheets-ui @univerjs/ui
2、你需要在项目中引入 Univer 的样式文件,以及一些必要的插件(样式文件的引入顺序很重要,确保你在依次引入 @univerjs/design@univerjs/ui 的 CSS 样式后再引入其他插件的样式文件。)
import "@univerjs/design/lib/index.css";
import "@univerjs/ui/lib/index.css";
import "@univerjs/docs-ui/lib/index.css";
import "@univerjs/sheets-ui/lib/index.css";
import "@univerjs/sheets-formula/lib/index.css";
 
import { Univer } from "@univerjs/core";
import { defaultTheme } from "@univerjs/design";
 
import { UniverFormulaEnginePlugin } from "@univerjs/engine-formula";
import { UniverRenderEnginePlugin } from "@univerjs/engine-render";
 
import { UniverUIPlugin } from "@univerjs/ui";
 
import { UniverDocsPlugin } from "@univerjs/docs";
import { UniverDocsUIPlugin } from "@univerjs/docs-ui";
 
import { UniverSheetsPlugin } from "@univerjs/sheets";
import { UniverSheetsFormulaPlugin } from "@univerjs/sheets-formula";
import { UniverSheetsUIPlugin } from "@univerjs/sheets-ui";
3、创建一个 Univer 实例,并注册这些插件: 
const univer = new Univer({
  theme: defaultTheme,
});
 
univer.registerPlugin(UniverRenderEnginePlugin);
univer.registerPlugin(UniverFormulaEnginePlugin);
 
univer.registerPlugin(UniverUIPlugin, {
  container: 'app',
});
 
univer.registerPlugin(UniverDocsPlugin, {
  hasScroll: false,
});
univer.registerPlugin(UniverDocsUIPlugin);
 
univer.registerPlugin(UniverSheetsPlugin);
univer.registerPlugin(UniverSheetsUIPlugin);
univer.registerPlugin(UniverSheetsFormulaPlugin);
 
univer.createUnit(UniverInstanceType.UNIVER_SHEET, {}); // {}可以是你得数据 初始化的时看你的需要是否需要加载数据
三、加载和保存数据
1、加载数据

通过调用 Univer 的 createUniverSheet 方法,可以创建一个新的 Workbook 实例。方法的第一个参数是一个对象,包含了 Workbook 的数据,应该符合 IWorkbookData 接口

import { IWorkbookData, UniverInstanceType } from "@univerjs/core";
 
const data: IWorkbookData = {};
const workbook = univer.createUnit(UniverInstanceType.UNIVER_SHEET, {});
2、保存数据

通过调用当前 Workbook 的 getSnapshot 方法,可以得到 IWorkbookData 对象,包含了表格内部的数据。

@univerjs/facade 提供的 API 是对 Univer 实例的封装,因此你需要在创建了 Univer 实例之后,再用 FUniver 包裹这个实例:

import { FUniver } from "@univerjs/facade";
 
const univerAPI = FUniver.newAPI(univer);

然后你就可以通过调用 univerAPI 的方法来使用 Univer 了

const savedData = univerAPI.getActiveWorkbook().getSnapshot();
四、vue3中的使用
<template>
  <button @click="getSheetData()">获取数据</button>
  <!-- 表格 -->
  <div ref="container" class="univer-container" />
</template>

<script setup lang="ts">
import '@univerjs/design/lib/index.css'
import '@univerjs/ui/lib/index.css'
import '@univerjs/docs-ui/lib/index.css'
import '@univerjs/sheets-ui/lib/index.css'
import '@univerjs/sheets-formula/lib/index.css'

import { Univer, UniverInstanceType, Workbook, LocaleType, Tools } 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 { onBeforeUnmount, onMounted, ref } from 'vue'
import { FUniver } from '@univerjs/facade'
// import '@univerjs/find-replace/lib/index.css';

// import { UniverFindReplacePlugin } from '@univerjs/find-replace';
// import { UniverSheetsFindReplacePlugin } from '@univerjs/sheets-find-replace';

import DesignZhCN from '@univerjs/design/lib/locale/zh-CN'
import UIZhCN from '@univerjs/ui/lib/locale/zh-CN'
import DocsUIZhCN from '@univerjs/docs-ui/lib/locale/zh-CN'
import SheetsZhCN from '@univerjs/sheets/lib/locale/zh-CN'
import SheetsUIZhCN from '@univerjs/sheets-ui/lib/locale/zh-CN'

const { data } = defineProps({
  // workbook data
  data: {
    type: Object,
    default: () => ({})
  }
})

const univerRef = ref<Univer | null>(null)
const container = ref<HTMLElement | null>(null)

onMounted(() => {
  initSheet(data)
})

const initSheet = (data = {}) => {
  const univer = new Univer({
    theme: defaultTheme,
    locale: LocaleType.ZH_CN,
    locales: {
      [LocaleType.ZH_CN]: Tools.deepMerge(SheetsZhCN, DocsUIZhCN, SheetsUIZhCN, UIZhCN, DesignZhCN)
    }
  })
  univerRef.value = univer

  // core plugins
  univer.registerPlugin(UniverRenderEnginePlugin)
  univer.registerPlugin(UniverFormulaEnginePlugin)
  univer.registerPlugin(UniverUIPlugin, {
    container: container.value!
  })

  // doc plugins
  univer.registerPlugin(UniverDocsPlugin, {
    hasScroll: false
  })
  univer.registerPlugin(UniverDocsUIPlugin)

  // sheet plugins
  univer.registerPlugin(UniverSheetsPlugin)
  univer.registerPlugin(UniverSheetsUIPlugin)
  univer.registerPlugin(UniverSheetsFormulaPlugin)

  // create workbook instance
 univer.createUnit(UniverInstanceType.UNIVER_SHEET, {})
}

const getSheetData = () => {
  const univerAPI = FUniver.newAPI(univerRef.value)
  const savedData = univerAPI.getActiveWorkbook().getSnapshot()
  console.log('savedData', savedData)
}
</script>

<style scoped></style>

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于 Vue 3 + TypeScript + Vite 项目,你可以使用 Vue 的官方插件 `vue-axios` 或者 `vue-resource` 来实现网络通信。下面以 `vue-axios` 为例,给出步骤: 1. 安装依赖: ```shell npm install axios vue-axios ``` 2. 在项目的入口文件(一般是 `main.ts`)中引入和使用插件: ```typescript import { createApp } from 'vue' import axios from 'axios' import VueAxios from 'vue-axios' import App from './App.vue' const app = createApp(App) app.use(VueAxios, axios) app.mount('#app') ``` 3. 在需要发送网络请求的组件中使用: ```vue <template> <div> <button @click="fetchData">发送请求</button> <ul> <li v-for="item in dataList" :key="item.id">{{ item.text }}</li> </ul> </div> </template> <script lang="ts"> import { defineComponent } from 'vue' import { AxiosInstance } from 'axios' export default defineComponent({ data() { return { dataList: [] } }, methods: { fetchData() { // 发送 GET 请求示例 this.axios .get('/api/data') .then((response) => { this.dataList = response.data }) .catch((error) => { console.error(error) }) } }, mounted() { // 在 mounted 钩子中,this.axios 可以直接使用 this.fetchData() } }) </script> ``` 在上述示例中,我们通过 `VueAxios` 插件将 `axios` 实例注入到了 Vue 的实例中,在组件中可以通过 `this.axios` 直接使用。你可以根据接口文档的要求来选择合适的请求方法(例如 `get`、`post`、`put` 等),然后处理返回的结果。 当然,如果你对其他网络请求库或者自己封装的网络请求工具库更感兴趣,也可以在 Vue 3 + TypeScript + Vite 项目中自行选择使用。以上仅供参考。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值