Vue在线预览Excel和Docx格式文件实现方式

 更新时间:2025年12月17日 09:49:19   作者:过路云野  
Vue-Office是一个适用于Vue2和Vue3的Office文件格式在线预览插件,支持Word、Excel、PDF和PowerPoint等多种文件格式,它提供了简单集成、良好用户体验和性能优化等功能,适用于非Vue框架

前提:本次示例基于Vue2.x,所用插件为Vue-Office。

一、Vue-Office 插件简介

Vue-Office 是一个一站式解决方案,支持多种 Office 文件格式的在线预览,包括:

  • Word(.docx)
  • Excel(.xlsx、.xls)
  • PDF
  • PowerPoint(.pptx)

它适用于 Vue 2 和 Vue 3,同时兼容非 Vue 框架(如 React),为开发者提供了简单、高效的文档预览功能。

二、功能特点

1. 简单集成:

无需为不同文件类型寻找多个库,Vue-Office 提供了统一的预览功能,只需提供文档的 URL(网络地址)即可完成预览,降低开发成本。

2. 良好的用户体验

针对每种文件类型选择了最佳的预览方案,确保加载速度、渲染效果和交互操作流畅。

3. 性能优化:

针对数据量较大的文档进行了优化,确保在高负载情况下也能保持稳定的预览效果。

4. 支持多种文件格式:

除了常见的 Word、Excel 和 PDF,还支持 PowerPoint 文件。

三、应用示例

1.安装Vue-Office相关组件

 npm install @vue-office/excel
 npm install @vue-office/docx

2.vue使用

以下以Excel和Word格式文件为例:

<template>
    <div ref="officeViewerRef" v-if="officeDialog" class="officeDemo">
        <vue-office-excel
            v-if="xlsxDialog"
            :src="url"
            style="height: 100vh;"
            @rendered="renderedHandler"
            @error="errorHandler"
        />
        <vue-office-docx
            v-if="docxDialog"
            :src="url"
            style="height: 100vh;"
            @rendered="renderedHandler"
            @error="errorHandler"
        />
    </div>
</template>

<script>
    import VueOfficeExcel from '@vue-office/excel'
    import '@vue-office/excel/lib/index.css'
    import VueOfficeDocx from '@vue-office/docx'
    import '@vue-office/docx/lib/index.css'

    export default {
        name: "office-viewer",
        components: {
          VueOfficeExcel,VueOfficeDocx,
        },
        data(){
            return {
                officeLoading: '',
                xlsxDialog:false,
                docxDialog:false,
                url:'',
                fjType:'',
                isEnd:false,
                officeDialog:true,
            }
        },
        watch: {
            isEnd() {
                this.officeDialog = false;
                this.$nextTick(()=>{
                    this.officeDialog = true;
                })
            },
        },
        mounted(){
            this.loadFile();
        },
        methods: {
            loadFile(){
                const url ='实际文件地址';
                if(url.indexOf(".doc") > -1){
                    this.fjType = 'word';
                }else{
                    this.fjType = 'excel';
                }
                this.url = url;
                this.officeLoading = this.$loading({
                    lock: true,
                    target:this.$refs.officeViewerRef.$el,
                    text: '正在加载,请稍后....',
                    spinner: 'el-icon-loading',
                    background: 'rgba(0, 0, 0, 0.7)'
                });
                if(this.fjType == 'excel'){
                    this.xlsxDialog = true;
                }else if(this.fjType == 'word'){
                    this.docxDialog = true;
                }

            },
            renderedHandler() {
                // this.$message.success("渲染完成!");
                this.officeLoading && this.officeLoading.close();
                if(this.fjType == 'excel'){
                    this.isEnd = true;
                }
            },
            errorHandler() {
                this.$message.error("渲染失败!");
                this.officeLoading && this.officeLoading.close();
            },
        }
    }
</script>

<style lang="scss">
.officeDemo{
  background-color: #808080;
  height: 100%;
  padding: 30px 0;
  .vue-office-docx,.vue-office-excel{
    height: calc(100% - 60px)!important;
  }
  .vue-office-excel{
    width: calc(100% - 60px);
    margin-left: 30px;
  }
  .docx-wrapper{
    padding-top: 0!important;
    padding-bottom: 0!important;
  }
  .docx{
    border-radius: 3px;
  }
  .docx:last-child{
    margin-bottom: 0!important;
  }
  .x-spreadsheet{
    padding-top: 5px;
    box-sizing: border-box;
    border-radius: 5px;
  }
}
</style>

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vue + echarts实现中国省份地图点击联动

    vue + echarts实现中国省份地图点击联动

    这篇文章主要介绍了vue + echarts实现中国地图省份点击联动,需要的朋友可以参考下
    2022-04-04
  • Axios学习笔记之使用方法教程

    Axios学习笔记之使用方法教程

    axios是用来做数据交互的插件,最近正在学习axios,所以想着整理成笔记方便大家和自己参考学习,下面这篇文章主要跟大家介绍了关于Axios使用方法的相关资料,需要的朋友们下面来一起看看吧。
    2017-07-07
  • vue LogicFlow更多配置选项示例详解

    vue LogicFlow更多配置选项示例详解

    这篇文章主要为大家介绍了vue LogicFlow更多配置选项详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • 通过vue写一个瀑布流插件代码实例

    通过vue写一个瀑布流插件代码实例

    这篇文章主要介绍了通过vue写一个瀑布流插件代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • Vue创建项目后没有webpack.config.js(vue.config.js)文件的解决

    Vue创建项目后没有webpack.config.js(vue.config.js)文件的解决

    这篇文章主要介绍了Vue创建项目后没有webpack.config.js(vue.config.js)文件的解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • vue上传图片到oss的方法示例(图片带有删除功能)

    vue上传图片到oss的方法示例(图片带有删除功能)

    这篇文章主要介绍了vue上传图片到oss的方法示例(图片带有删除功能),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • Vue3中进行页面局部刷新组件刷新的操作方法

    Vue3中进行页面局部刷新组件刷新的操作方法

    这篇文章主要介绍了Vue3中进行页面局部刷新组件刷新的操作方法,本文结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-12-12
  • Vue组件中常见的props默认值陷阱问题

    Vue组件中常见的props默认值陷阱问题

    这篇文章主要介绍了避免Vue组件中常见的props默认值陷阱,本文通过问题展示及解决方案给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • Vue项目启动白屏问题的几种解决办法

    Vue项目启动白屏问题的几种解决办法

    这篇文章主要给大家介绍了关于Vue项目启动白屏问题的几种解决办法,Vue项目打包后出现白屏的可能原因有很多,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • Vue CLI 命令行打包配置自定义参数方式

    Vue CLI 命令行打包配置自定义参数方式

    这篇文章主要介绍了Vue CLI 命令行打包配置自定义参数方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04

最新评论