vue项目使用luckyexcel插件预览excel表格

news/2024/7/21 6:42:11 标签: vue.js, excel, 前端

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

第一步 引入luckysheet的相关依赖(本地文件或者在线cdn引入)

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

<!-- 这是引入本地文件 -->
<link rel='stylesheet' href='static/plugins/css/pluginsCss.css' />
<link rel='stylesheet' href='static/plugins/plugins.css' />
<link rel='stylesheet' href='static/css/luckysheet.css' />
<link rel='stylesheet' href='static/assets/iconfont/iconfont.css' />
<script src="static/plugins/js/plugin.js"></script>
<script src="static/luckysheet.umd.js"></script>
<!-- 这是引入在线地址 -->
<link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/plugins/css/pluginsCss.css' />
<link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/plugins/plugins.css' />
<link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/css/luckysheet.css' />
<link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/assets/iconfont/iconfont.css' />
<script src="https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/plugins/js/plugin.js"></script>
<script src="https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/luckysheet.umd.js"></script>

excel_22">第二步:安装luckyexcel

npm install luckyexcel --save

excel_28">第三步: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: {
	// 加载文件内容
  initExcel(type) {
	axios({
        method: 'post',
        url: process.env.VUE_APP_BASEURL + apiUrl, //这是接口地址
        data: data,
        responseType: 'blob'
      }).then(response => {
        // 如果是导出/下载 则触发downLoadXls方法
        if (type == 'export') {
          downLoadXls(response)
        } else {
          // 否则是预览,则触发displayResult方法
          that.displayResult(response.data)
        }
        function downLoadXls (response) {
          const content = response.data
          const blob = new Blob([content])
          const fileName = excelName + '.xlsx' //这是设置表格的文件名
          if ('download' in document.createElement('a')) {
            // 非IE下载
            const elink = document.createElement('a')
            elink.download = fileName
            elink.style.display = 'none'
            elink.href = URL.createObjectURL(blob)
            document.body.appendChild(elink)
            elink.click()
            URL.revokeObjectURL(elink.href) // 释放URL 对象
            document.body.removeChild(elink)
          } else {
            // IE10+下载
            navigator.msSaveBlob(blob, fileName)
          }
        }
      })
    },
    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){
              // 如果抛出任何错误,则处理错误
          }
      )
    }
}

http://www.niftyadmin.cn/n/1452012.html

相关文章

Centos下Apache使用Symlink访问外部目录出现403

在Aapche 的document root 下创建软链到其他目录时, 无法从浏览器访问, 返回403错误. 主要检查两点: 1. 软链目标目录的每一级, 都要对所有人开放执行权限, 即对各级目录 chmod 711 2. 检查selinux的状态 /usr/sbin/getenforce, 如果是enforcing, 执行 setenforce 0 关闭selinu…

技术文章 | 一篇文章学会spring boot(包括jms和hessian的集成)

本文来源于阿里云-云栖社区&#xff0c;原文点击这里。 之前在学习spring cloud微服务的时候&#xff0c;由于spring cloud的基础是spring boot&#xff0c;因此曾简单地了解过spring boot&#xff0c;但也只是简单的了解过而已。 而现在&#xff0c;需要把struts2项目改为spr…

修改app绕过模拟器检测_雷电模拟器4 增强版来啦!

相信很多同学的电脑都有一个安卓模拟器&#xff0c;不管是开发也好&#xff0c;还是玩游戏也好&#xff0c;安卓模拟器给我们带来了极大的便利。国产安卓模拟器&#xff0c;主要是以游戏安卓模拟器为主&#xff0c;专门优化安卓游戏在电脑上的体验&#xff0c;他们都有一个共同…

理解ActiveX控件的一些背景知识(转)

理解ActiveX控件的一些背景知识&#xff1a; 在真正开始创建ActiveX 控件之前&#xff0c;需考虑三个问题。第一个当然是ActiveX控件是什么&#xff0c;这个问题引起了不少混乱&#xff0c;所以对它下个定义是很重要的。请记住这是本书的定义&#xff0c;一旦你开始成为迎合Act…

TortoiseSVN中Branching和Merging实践

使用svn几年了&#xff0c;一直对分支和合并敬而远之&#xff0c;一来是因为分支的管理不该我操心&#xff0c;二来即使涉及到分支的管理&#xff0c;也不敢贸然使用合并功能&#xff0c;生怕合并出了问题对团队造成不良影响&#xff0c;最主要的原因是&#xff0c;自己对分支的…

出栈序列的可能性判定

问题说明 PAT1051&#xff1a;给定 stack 的容量&#xff0c;给定数据的入栈顺序&#xff1a;从 1 开始的正整数序列&#xff0c;在允许随机的出栈操作的情况下&#xff0c;要求判断某出栈序列是否可能。 比如&#xff0c;告知 stack 容量为 5&#xff0c;入栈序列的最大值为 7…

代码干货 | jdk1.6环境下struts2改spring boot方案

本文来源于阿里云-云栖社区&#xff0c;原文点击这里。 公司目前上线的两个项目都是比较老的&#xff0c;java版本是jdk1.6&#xff0c;mvc框架使用的是strus2。 随着不久前struts2官方公布新的安全漏洞&#xff0c;我们也不得不做出相应的整改措施&#xff0c;除了之前博文中…

各排序算法总结(简单选择,冒泡,快速,希尔排序,堆排序)

1&#xff09;冒泡排序bubble_sort 1.原理 假设对a&#xff3b;N&#xff3d;进行排序 依次比较相邻两个数&#xff0c;小数放前&#xff0c;大数放前。 &#xff0a;1 从头开始进行第一轮比较&#xff0c;则得到最后一个位置是所有…