vue项目使用luckyexcel预览excel表格功能(心路历程)

 更新时间:2023年10月19日 12:08:13   作者:悦悦猪  
这篇文章主要介绍了vue项目使用luckyexcel预览excel表格,我总共尝试了2种方法预览excel,均可实现,还发现一种方法可以实现,需要后端配合,叫做KKfileview,本文给大家介绍的非常详细,需要的朋友可以参考下

场景

最近工作中在开发文档上传并能在新窗口打开预览的功能。在此记录下心路历程。

方法

我总共尝试了2种方法预览excel,均可实现。还发现一种方法可以实现,需要后端配合,叫做KKfileview。

1.使用luckyexcel插件实现xlsx的预览

2.使用file-viewer插件实现xlsx的预览

3.使用KKfileview插件实现xlsx的预览

实现

方法一:使用luckyexcel插件

温馨提示:需要用到luckysheet和luckyexcel,根据下面步骤一步一步操作会避免踩坑,比如我当时遇到了window.luckysheet is not defined控制台报红的问题。

第一步:vue项目引入luckysheet的相关依赖(这也是上面提到的如果没有引入会报红window.luckysheet找不到的问题)

public文件夹下的index.html里引入luckysheet的相关依赖,由于考虑到我所做的这个项目可能会内网部署,所以将这些依赖包放在了public文件夹下的static文件夹里新建了一个luckysheet文件夹,这些依赖包的来源是我先npm install luckysheet --save把包拉下来,然后去拷贝的。文件存放位置和引入代码如下图。当然也可以选择cdn引入的方式。

<link rel='stylesheet' href='./static/luckysheet/plugins/css/pluginsCss.css' />
<link rel='stylesheet' href='./static/luckysheet/plugins/plugins.css' />
<link rel='stylesheet' href='./static/luckysheet/css/luckysheet.css' />
<link rel='stylesheet' href='./static/luckysheet/assets/iconfont/iconfont.css' />
<script src="./static/luckysheet/plugins/js/plugin.js"></script>
<script src="./static/luckysheet/luckysheet.umd.js"></script>

第二步:安装luckyexcel

npm install luckyexcel --save

第三步:新窗口打开,所以新窗口的vue文件中引入luckyexcel并处理逻辑 html部分

这里需要注意id要写上,后面渲染要用到,还有重要的一点是style的样式要写,一开始没有写发现文件已经读取成功,但是页面上没有显示出来。

<template>
  <div>
    <div v-if="fileType === 'xlsx'" id="luckysheet" style="margin:0px;padding:0px;width:100%;height:100vh;" />
  </div>
</template>

js部分

import LuckyExcel from 'luckyexcel'; // 引入
// mounted生命周期
mounted() {
	// 从路由地址中获取fileUrl,fileType
    this.fileUrl = this.$route.query.fileUrl ? this.$route.query.fileUrl : null
    this.fileType = this.$route.query.fileType ? this.$route.query.fileType : null
    if (this.fileUrl == null) {
      this.$message({
        type: 'error',
        message: '文件地址无效,请刷新后重试'
      })
    }
	// 加载文件内容
    this.uploading(this.fileUrl)
}
// methods方法
methods: {
	// 加载文件内容
    uploading(file) {
    	// downloadFileXLS是接口,fileKey传的是文件地址,调接口获取文件流
        downloadFileXLS({fileKey: file}).then(res => {
          if(this.fileType === 'xlsx') {
          	// 预览xlsx
            this.displayResult(res)
          } else if(this.fileType === 'pptx') {
          	// 预览pptx,可忽略,该篇文章不涉及pptx的预览
            this.previewPptx(res)
          }
        })
    },
    displayResult(buffer) {
      // 得到xlsx文件流后
      LuckyExcel.transformExcelToLucky(
          buffer, 
          function(exportJson, luckysheetfile){
              // console.log(exportJson);
              // console.log(luckysheetfile);
              if (exportJson.sheets == null || exportJson.sheets.length == 0) {
                alert("文件读取失败!");
                return;
              }
              // 销毁原来的表格
              window.luckysheet.destroy();
              // 重新创建新表格
              window.luckysheet.create({
                container: 'luckysheet', // 设定DOM容器的id
                showtoolbar: false, // 是否显示工具栏
                showinfobar: false, // 是否显示顶部信息栏
                showstatisticBar: false, // 是否显示底部计数栏
                sheetBottomConfig: false, // sheet页下方的添加行按钮和回到顶部按钮配置
                allowEdit: false, // 是否允许前台编辑
                enableAddRow: false, // 是否允许增加行
                enableAddCol: false, // 是否允许增加列
                sheetFormulaBar: false, // 是否显示公式栏
                enableAddBackTop: false, //返回头部按钮
                data: exportJson.sheets, //表格内容
                title: exportJson.info.name //表格标题
              });
          },
          function(error){
              // 如果抛出任何错误,则处理错误
          }
      )
    }
}

新窗口打开预览xlsx,我是使用的如下方法跳转到要预览的页面的路由(第三步的代码就是预览页面的),带上了参数。

// 获取目标路由地址
const routeUrl = this.$router.resolve({
   name: 'OfficeView',
   query: {
     fileUrl: item.fileKey,
     fileType: item.type
   }
 })
 // 打开新标签页
 window.open(routeUrl.href, '_blank')

方法二:使用file-viewer实现excel的预览

点下面链接可以查看哦
vue项目预览excel表格(file-viewer插件)

到此这篇关于vue项目使用luckyexcel预览excel表格的文章就介绍到这了,更多相关vue 预览excel表格内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue3组合式API获取子组件属性和方法的代码实例

    vue3组合式API获取子组件属性和方法的代码实例

    这篇文章主要为大家详细介绍了vue3组合式API获取子组件属性和方法的代码实例,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-01-01
  • Vue3使用时应避免的10个错误总结

    Vue3使用时应避免的10个错误总结

    Vue 3已经稳定了相当长一段时间了。许多代码库都在生产环境中使用它,其他人最终都将不得不迁移到Vue 3。我现在有机会使用它并记录了我的错误,下面这些错误你可能想要避免
    2023-03-03
  • mpvue实现左侧导航与右侧内容的联动

    mpvue实现左侧导航与右侧内容的联动

    这篇文章主要为大家详细介绍了mpvue实现左侧导航与右侧内容的联动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • 浅析VUE防抖与节流

    浅析VUE防抖与节流

    这篇文章主要介绍了浅析VUE防抖与节流的相关资料,帮助大家更好的理解和学习vue框架,感兴趣的朋友可以了解下
    2020-11-11
  • vue 动态style 拼接宽度问题

    vue 动态style 拼接宽度问题

    这篇文章主要介绍了vue 动态style 拼接宽度问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • vite结合electron构建前端桌面应用程序

    vite结合electron构建前端桌面应用程序

    本文主要介绍了vite结合electron构建前端桌面应用程序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • Vue常用指令详解分析

    Vue常用指令详解分析

    这篇文章给大家详细分析了关于VUE的常用的相关指令内容,对此有需要的朋友们可以学习下。
    2018-08-08
  • vue-resource 拦截器(interceptor)的使用详解

    vue-resource 拦截器(interceptor)的使用详解

    本篇文章主要介绍了vue-resource 拦截器(interceptor)的使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • 深入浅析Vue不同场景下组件间的数据交流

    深入浅析Vue不同场景下组件间的数据交流

    探通过本篇文章给大家探讨不同场景下组件间的数据“交流”的Vue实现方法,感兴趣的朋友一起看看吧
    2017-08-08
  • 详解key在Vue3和Vue2的不同之处

    详解key在Vue3和Vue2的不同之处

    key属性是一个特殊的属性,用于标识每个节点的唯一性。在Vue2.x版本中的key和Vue3.x版本中的key有很大的不同,那么在这篇文章中,我们将会讨论Vue2中的key和Vue3中的key的区别
    2023-04-04

最新评论