vue 前端预览 Excel 表

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

一、安装依赖包官网

npm i luckyexcel

template 模板

<!-- 用于渲染表格的容器 -->
<div id="luckysheet" style='width:100vw;height:100vh'></div>

二、加载

异步加载及
import LuckyExcel from 'luckyexcel';

/* 下列代码加载 cdn 文件,你也可以在 public 文件夹在 html 中引入 */
// 封装加载 src 文件方法
function asynLoad(src, isCss = false) {
  return new Promise(res => {
    let el;
    if (isCss) {
      el = document.createElement('link');
      el.rel = 'stylesheet';
      el.href = src;
    } else {
      el = document.createElement('script');
      el.src = src;
    }
    document.documentElement.appendChild(el);
    el.onload = el.onreadystatechange = function() {
      if (
        !this.readyState ||
        this.readyState == 'loaded' ||
        this.readyState == 'complete'
      ) {
        res(true);
      }
      this.onload = this.onreadystatechange = null;
    };
  });
}

/* Vue 中加载 cdn 文件 */
export default{
  created() {
    this.loadPlugins();
  },
  methods: {
    loadPlugins() {
      const baseURL = '//cdn.jsdelivr.net/npm/luckysheet@latest/dist';
      this.loading = true;
      this.tip = '正在加载依赖插件,请耐心等待...';
      Promise.all([
        asynLoad(`${baseURL}/plugins/css/pluginsCss.css`, true),
        asynLoad(`${baseURL}/plugins/plugins.css`, true),
        asynLoad(`${baseURL}/css/luckysheet.css`, true),
        asynLoad(`${baseURL}/assets/iconfont/iconfont.css`, true),
        asynLoad(`${baseURL}/plugins/js/plugin.js`),
        asynLoad(`${baseURL}/luckysheet.umd.js`)
      ])
        .then(() => {
          luckysheet = (window as any).luckysheet;
          this.getOriginFile(); // 获取远端文件
        })
        .catch(res => {
          this.loading = false;
          this.errStatus = 1;
          this.errorTitle = '插件加载失败,请刷新后重试!';
        })
    }
  },
}


cdn 加载 index.html 文件

<link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet/dist/plugins/css/pluginsCss.css' />
<link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet/dist/plugins/plugins.css' />
<link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet/dist/css/luckysheet.css' />
<link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet/dist/assets/iconfont/iconfont.css' />
<script src="https://cdn.jsdelivr.net/npm/luckysheet/dist/plugins/js/plugin.js"></script>
<script src="https://cdn.jsdelivr.net/npm/luckysheet/dist/luckysheet.umd.js"></script>

三、页面使用

/* Vue 中加载 cdn 文件 */
export default{
  methods: {
   // 获取远程文件
	getOriginFile() {
	  this.tip = '正在下载文件...';
	  this.loading = true
	  axios({
	    url: this.fileURL,
	    responseType: 'blob'
	  }).then(({ data }) => {
	    const blob = new Blob([data]);
	    const file = new File([blob], this.fileName);
	    this.init(file); // 开始渲染
	  }).catch(e => {
	    this.errorTitle = '文件解析失败,请下载后使用 Excel 打开或点击重试!'
	    this.errStatus = 2;
	  }).finally(() => {
	    this.loading = false;
	  })
	}
	
	// 渲染方法,接受文件对象,如果是本地文件直接传入文件即可
	init(file: File) {
	  luckysheet.destroy(); // 先销毁当前容器
	  LuckyExcel.transformExcelToLucky(file, exportJson => {
	    if (exportJson.sheets === null || !exportJson.sheets.length) {
	      this.$message.error('无法读取excel文件的内容,当前不支持xls文件!');
	      return;
	    }
	    luckysheet.create({
	      container: 'luckysheet',
	      showinfobar: false,
	      lang: 'zh',
	      data: exportJson.sheets,
	      title: exportJson.info.name,
	      userInfo: exportJson.info.name.creator
	    });
	  });
	}
  },
}

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

相关文章

02 OpenCV 加载修改保存图片

文章目录 算子代码演示 算子 cvtColor 函数 void cv::cvtColor(cv::InputArray src, // 输入序列cv::OutputArray dst, // 输出序列int code, // 颜色映射码int dstCn 0 // 输出的通道数 (0automatic));imread 读取图片 Mat imread( const String& filename, int flags I…

Java ElasticSearch面试题

Java ES-ElasticSearch面试题 前言1、ElasticSearch是什么&#xff1f;2. 说说你们公司ES的集群架构&#xff0c;索引数据大小&#xff0c;分片有多少 &#xff1f;3. ES的倒排索引是什么&#xff1f;4. ES是如何实现 master 选举的?5. 描述一下 ES索引文档的过程&#xff1a;…

Codeforces Round 782 (Div. 2) E. AND-MEX Walk(思维+并查集)

原题链接&#xff1a;E. AND-MEX Walk 题目大意&#xff1a; 给出一张 n n n 个点 m m m 条边的无向图&#xff0c;边带有边权。 我们定义一条路径的价值为&#xff1a; 假设我们经过了 k k k 个点&#xff08;点和边都可重复经过&#xff09;&#xff0c;且按顺序经过的边…

UCSF DOCK 分子对接详细案例(01)- rigid, fixed anchor, flexible dock

欢迎浏览我的CSND博客&#xff01; Blockbuater_drug …点击进入 文章目录 前言一、操作环境二、研究背景三、受体-配体结构文件准备3.1准备文件夹DOCK_workdir, 下载晶体结构3.1.1 来自湿实验的受体配体共晶结构&#xff1a;3.1.2 来自深度学习和语言模型推理预测的蛋白结构&a…

【多线程】CAS详解

目录 &#x1f334;什么是 CAS&#x1f338;CAS 伪代码 &#x1f38d;CAS 是怎么实现的&#x1f340;CAS 有哪些应⽤&#x1f338;实现原子类&#x1f338;实现自旋锁 &#x1f333;CAS 的 ABA 问题&#x1f338;**什么是 ABA 问题**&#xff1f;&#x1f338;ABA 问题引来的 B…

JVM 第四部分—垃圾回收概念 和 算法 1

垃圾回收概述 什么是垃圾&#xff1f; 垃圾指的是运行程序中没有任何指针指向的对象&#xff0c;这个对象就是需要被回收的垃圾垃圾回收不是Java的伴生产物&#xff0c;早在1960年&#xff0c;第一门使用动态内存分配和垃圾回收的Lisp语言就诞生了 为什么需要GC&#xff1f; 1…

selenium for java 基本使用

selenium 使用 maven <!-- seleium --><properties><selenium.version>4.18.1</selenium.version></properties><dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId>…

Bun 单元测试实践

当前要测试 index.js 文件中 requestProductList 方法&#xff0c;requestProductList 方法中引入了 utils.js 文件中的 getProductList 方法&#xff0c;getProductList 方法返回异步网络请求的数据。 index.js import { getProductList } from ./utils;/*** 获取产品列表* …