当前位置: 首页 > news >正文

vue3.0中实现excel文件的预览

最近开发了一个需求,要求实现预览图片、pdf、excel、word、txt等格式的文件;
每种格式的文件想要实现预览的效果需要使用对应的插件,如果要实现excel格式文件的预览,要用到哪种插件呢?

答案:xlsx.full.min.js

xlsx.full.min.js是由SheetJS出品的js-xlsx是一款非常方便的只需要纯JS即可读取和导出excel的工具库,功能强大,支持格式众多,支持xls、xlsx、ods(一种OpenOffice专有表格文件格式)等十几种格式。

那到底是怎么使用的呢?

  1. 获取excel内容;
  2. 加载到html中;
  3. 设置表格的样式;

整个代码如下,然后我们逐步进行分析。

<!--* excel文件预览组件封装
-->
<template><div class="pageExcel"><div class="excelRegion"><div class="excelSheet"><spanv-for="(item, index) in sheetList":key="index"v-html="item.sheetName":class="item.isSelected ? 'active' : ''"@click="switchSheet(index)"></span></div><divclass="excelTable"v-for="(item, index) in sheetList":key="index"v-html="item.content"v-show="item.isSelected"></div></div></div>
</template><script setup>
import LoadScript from "./utils/loadScript";
import allRequestAPI from "./api/request.js";
import { onMounted, ref } from "vue";
import { getString } from './utils/util.js'
let id = getString('id')
let excelToken = getString('token')
let sheetList = ref([]);onMounted(() => {getExcel();
});// 获取excel
function getExcel() {sheetList.value = [];LoadScrpt.load([`public/xlsx.full.min.js`]).then(() => {getExcelFileContent();});
}// 获取excel的内容
function getExcelFileContent() {allRequestAPI.getExcelFileStream(id{excelToken: excelToken},"arraybuffer").then((res) => {// 处理编码let ary = "";// 记住一点,res.data是文件流,所以这样写,如果返回的res是文件流,那么就写new Uint8Array(res)let bytes = new Uint8Array(res.data);let length = bytes.byteLength;for (let i = 0; i < length; i++) {ary += String.fromCharCode(bytes[i]);}// 读取excel内容   binary二进制let wb = XLSX.read(ary, { type: "binary" });// sheet列表let sheetFileList = wb.SheetNames;sheetFileList.forEach((item, index) => {let ws = wb.Sheets[item];let fileContent = "";try {// 把excel文件流转化为html字符串,以便于v-html使用fileContent = XLSX.utils.sheet_to_html(ws);} catch (error) {}sheetList.value.push({name: item,isSelected: index == 0,content: fileContent,});});console.log(sheetFileList);console.log("表格内容");console.log(sheetList);}).catch((error) => {console.log(error);});
}// 切换excel的sheet
function switchSheet(i) {sheetList.value.forEach((item, index) => {item.isSelected = index == i;});
}
</script><style scoped lang="less">
.excelRegion {flex: 1;overflow-x: scroll;align-items: center;padding: 12px;background-color: #f8f8f8;.excelSheet {display: flex;white-space: nowrap;padding-bottom: 15px;span {display: block;height: 36px;line-height: 36px;padding: 0 12px;background-color: #fff;font-size: 14px;box-shadow: 0px 2px 4px 3px rgba(204, 204, 204, 0.34);&.active {background-color: #ff6d00;color: #fff;}}}:deep(.excelTable) {table {border-collapse: collapse !important;background-color: #fff;td {word-break: keep-all;white-space: nowrap;border: 1px solid #000;padding: 0px 8px;font-size: 12px;color: #666;}}}
}
</style>

Uint8Array 数组类型表示一个 8 位无符号整型数组,创建时内容被初始化为 0。创建完后,可以以对象的方式或使用数组下标索引的方式引用数组中的元素。

String.fromCharCode() 静态方法返回由指定的 UTF-16 码元序列创建的字符串。

官方github:https://github.com/SheetJS/js-xlsx

本文配套demo在线演示地址:http://demo.haoji.me/2017/02/08-js-xlsx/

这篇文章对我帮助本大,如何使用JavaScript实现纯前端读取和导出excel文件

http://www.lryc.cn/news/233147.html

相关文章:

  • 信息学奥赛一本通 1435:【例题3】曲线 | 洛谷 洛谷 P1883 函数
  • OpenCV入门2——图像视频的加载与展示一些API
  • 「校园 Pie」 系列活动正式启航,首站走进南方科技大学!
  • 【PyQt小知识 - 3】: QComboBox下拉框内容的设置和更新、默认值的设置、值和下标的获取
  • Oracle OCM考试(史上最详细的介绍,需要19c OCP的证书)
  • 广州华锐互动VRAR:VR教学楼地震模拟体验增强学生防震减灾意识
  • ?. 语法报错
  • FPGA——IP核 基础操作
  • unity unityWebRequest 通过http下载服务器资源
  • 13-1-SRGAN-图像超分-残差模块-亚像素卷积
  • Maya v2024(3D动画制作软件)
  • 深度学习之基于YoloV5苹果新鲜程度检测识别系统
  • git 构建报错
  • 【Linux专题】firewalld 过滤出接口流量
  • ElasticSearch语句中must,must_not,should组合关系,作者有验证脚本(ES为8版本,使用Kibana运行语句)
  • SpringCloud Alibaba组件入门全方面汇总(中):服务熔断降级-Sentinel
  • 算法通关村第十关|青铜|快速排序
  • python科研绘图:圆环图
  • 【Linux】C文件系统详解(一)——C文件操作
  • uniapp 实现微信小程序手机号一键登录
  • 基于 Java 解释一下硬编码和非硬编码?
  • 【机器学习7】优化算法
  • 常见的近似算法
  • 【完整详细】IntelliJ IDEA中使用Docker插件一键部署前后端分离项目
  • ubuntu20.04 安装TensorRT,解决依赖问题
  • 你知道如何科学的学习吗?-关于个人成长的思考
  • Java学习之路 —— 多线程
  • 【云原生-Kurbernetes篇】K8s的存储卷/数据卷+PV与PVC
  • 二层、三层交换机之间到底有什么区别?
  • 【论文阅读】2736. 最大和查询-2023.11.17