这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助

前言

在前端开发中,有时候一些业务场景中,我们有需求要去实现excel的预览和打印功能,本文在vue3中如何实现Excel文件的预览和打印。

预览excel

关于实现excel文档在线预览的做法,一种方式是通过讲文档里的数据处理成html,一种是将文档处理成图片进行预览。

首先我们先讲一下实现html这种方式预览的。Excel预览用的是xlsx这个库。

xlsx

xlsx是一个优秀的表格处理库,是一款适用于浏览器和nodejs的开源电子表格解析库

安装

这里值得注意的是,vue2和vue3的引用写法不一样

// vue2 引用 xlsx
import xlsx from 'xlsx'
// vue3 引用 xlsx
import * as XLSX from 'xlsx'

使用

FileReader读取文件流

先使用FileReader对象提供的一种读取File对象内容的方法,将文件流用readAsBinaryString方法根据二进制字符串的形式返回,再通过reader.onload操作读取文件流的二进制字符串形式

// 实例化 FileReader 对象
const reader = new FileReader()
// file为文件流
reader.readAsBinaryString(file) reader.onload = function () {
const binaryStringData = reader.result
console.log(binaryStringData)
}

代码

vue3上传excel并在线预览

那么vue3中如何预览Excel文件呢,这里现用一个ant-design-vue的上传组件上传一个excel文件,如下:

(1)创建组件

添加ant-design-vue upload上传组件,用于上传文件用来预览excel并转化其为html的组件。包含一个文件上传的按钮和预览区域,如下图:

使用XLSX.utils.sheet_to_html方法将工作表(workSheet)转化成html表格的字符串表示,然后显示在前端页面,按照表格的行列结构进行排序,从而实现在线预览的效果, 如下:

这里值得注意的是添加table的样式:

效果

打印excel

安装

yarn add vue3-print-nb

我们使用vue3-print-nb打印excel表格,在点击打印按钮时触发打印事件。

问: 如何使用vue3-print-nb库打印

答: 使用v-print指令

vue3全局引入print

import { createApp } from 'vue'
import App from './App.vue' import print from 'vue3-print-nb' const app = createApp(App)
app.use(print).mount('#app')

代码

这种打印情况,除非是整页window.print()打印,打印单个表格的话,我们上传完excel表,把数据渲染到表格中再进行打印,像这样:

XLSX.utils.sheet_to_json用于将excel表格中的工作表(sheet)转换成JSON格式的函数.

这里我们通过转换出来的json赋值给table,如下:

template

script

效果

总结

excel文件预览,借用了xlsx库来读取excel文件流,通过XLSX.utils.sheet_to_html来实现在线文件的预览。

eccel文件打印,借用了vue3-print-nb库来进行用户点击打印按钮时,打印某个区域范围的内容,通过XLSX.utils.sheet_to_json解析文件流转化成JSON数据,再通过v-print指令进行绑定区域打印。

本文转载于:

https://juejin.cn/post/7292975471448670248

如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。

记录--vue3实现excel文件预览和打印的更多相关文章

  1. PLSQL导入Excel文件预览不到数据行问题

    今天,从Excel导入Oracle一些数据,在导入的过程中,遇到一个问题,Excel里面有好几万条数据,但是通过PLSQL导入向导导入Excel文件之后,在PLSQL里却预览不到数据行,只能看见标题行 ...

  2. java项目中Excel文件预览

    package com.linkonworks.df.busi.utils; import java.io.File; import java.io.FileInputStream; import j ...

  3. 手把手教你用 Spring Boot搭建一个在线文件预览系统!支持ppt、doc等多种类型文件预览

    昨晚搭建环境都花了好一会时间,主要在浪费在了安装 openoffice 这个依赖环境上(Mac 需要手动安装). 然后,又一步一步功能演示,记录,调试项目,并且简单研究了一下核心代码之后才把这篇文章写 ...

  4. Word/Excel 在线预览

    前言 近日项目中做到一个功能,需要上传附件后能够在线预览.之前也没做过这类似的,于是乎就查找了相关资料,.net实现Office文件预览大概有这几种方式: ① 使用Microsoft的Office组件 ...

  5. 关于pc端 app端pdf,word xls等文件预览的功能

    第一种用H5标签<iframe>标签实现 返回的文件类型,文件流,文件流返回必须在设置 contentType对应的Mime Type, 返回文件的物理位置. 已经实测可以支持的文件类型 ...

  6. COS控制台进阶 - 文件预览和在线编辑

    导语 | COS控制台新上线了文件预览功能,用户可在控制台内直接预览.编辑文件内容. 前不久,微软发布了 vscode for web 的公告,是基于web的在线代码编辑器,无需下载安装可以直接在we ...

  7. Blazor组件自做十四 : Blazor FileViewer 文件预览 组件

    Blazor FileViewer 文件预览 组件 目前支支持 Excel(.docx) 和 Word(.xlsx) 格式 示例: https://www.blazor.zone/fileViewer ...

  8. java实现office文件预览

    不知觉就过了这个久了,继上篇java实现文件上传下载后,今天给大家分享一篇java实现的对office文件预览功能. 相信大家在平常的项目中会遇到需要对文件实现预览功能,这里不用下载节省很多事.大家请 ...

  9. Qt SD卡 文件系统挂载、文件预览

    /********************************************************************************** * Qt SD卡 文件系统挂载. ...

  10. Jquery.Treeview+Jquery UI制作Web文件预览

    效果图: 前台Html: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="D ...

随机推荐

  1. Guava EventBus的具体使用以及源码解析

    使用Guava EventBus对系统进行异步解耦改造 一.背景 最近在写的项目里,在使用定时器进行自动任务下派时,发现之前写的程序中将包括启动流程.地图更新.发送短信.效能计算等操作全部集成在同一个 ...

  2. 通过程序自动设置网卡的“internet共享”选项

    操作系统 : Windows 10_x64 [版本 10.0.19042.685] Windows下可以通过网卡共享进行上网,但是需要在网卡的属性里面进行设置,需要在视窗界面进行操作,不能实现自动化. ...

  3. 浅谈 2-SAT

    SAT 是适定性(Satisfiability)问题的简称.一般形式为 k - 适定性问题,简称 k-SAT.而当 \(k>2\) 时该问题为 NP 完全的.所以我们只研究 \(k=2\) 的情 ...

  4. JS 判断对象属性是否存在,判断是否包含某个属性,是否为自身属性

    壹 ❀ 引 看过博主JS 疫情宅在家,学习不能停,七千字长文助你彻底弄懂原型与原型链这篇文章的同学应该知道,文中有专门介绍这个问题.那么为什么我要另起一篇再说一次呢?原因有两个,一是介绍原型与原型链的 ...

  5. STC系列8位MCU在Windows下的开发

    STC系列 MCS-51 8位MCU 简介 STC的8位MCU有89/90/10/11/12/15/8(A/F/G/H)这几个大系列, 都是8051衍生的8位单片机, 每个系列的特点如下 STC89系 ...

  6. [攻防世界][Web]PHP2

    打开靶机对应的url 就一行字 Can you anthenticate to this website? 第一感觉就需要做目录文件扫描 使用御剑和dirsearch进行扫描,发现一个文件 index ...

  7. 进度条模块之tqdm

    导入模块 from tqdm import tqdm import time ''' desc 描述 ncols 进度条总长度 可修改 range(1000) 封装迭代器 ''' for i in t ...

  8. django的orm多表查询作业第五题答案

    5.每个作者出版的所有书的最高价格以及最高价格的那本书的名称. 用django的模型类写不出来的,只能用原生sql写这题 关于第五题,mysql5.7及以上版本,使用下面的答案 set sql_mod ...

  9. beego中数据库表创建

    package main import ( "fmt" "github.com/astaxie/beego/orm" _ "github.com/go ...

  10. React 组件之属性

    如果你想要实现自己的梦想,就必须先拥有勇气去追求它. 1. React Props 属性 props 主要解决两个问题:复用性问题以及可以让组件之间通信. 属性 props 正常是外部传入的,组件内部 ...