vue 预览excel文件的又一伟大实践 —— vue-office

实际上,预览excel这个功能,我之前已经写过一个文章了。如下,使用的是 luckysheet/luckyExcel 实现的。

vue 实现在线预览Excel-LuckyExcel/LuckySheet实现方案_excel在线预览的方案-CSDN博客

但是最近客户使用发现一个bug,就是某几个单元格没有对齐。这种偶发性的故障着实不好排查。因为不知道是哪里的问题,所以你也不能修改显示的数据和单元格。

所以,我就另起炉灶了。

经过github一顿猛搜,找到了又一解决方案——vue-office。(因为github网速不给力,我给出gitee的仓库地址)。

vue-office: 支持word(.docx)、excel(.xlsx)、pdf等各类型office文件预览的vue组件集合,提供一站式office文件预览方案,支持vue2和3

进入实操模式。

第一,安装

//excel文档预览组件
npm install @vue-office/excel vue-demi

一顿操作猛如虎,npm run dev 走起,咔咔直接报错。因为公司项目问题,我用的vue版本还是2.6.所以直接报出这个错误:

@vue/composition-api/dist/vue-composition-api.mjs in ./node_modules/vue-demi/lib/index.mjsnot found

没找到这个包,我也很听劝。那就继续安装:

npm i --save @vue/composition-api@1.3.0

在npm run dev,没问题了。

第二,请求数据,开始渲染

// 下边是伪代码  千万不要直接复制// 渲染组件
<template><vue-office-excel :src="excel" @rendered="rendered"/>
</template><script>
//引入VueOfficeExcel组件
import VueOfficeExcel from '@vue-office/excel'
//引入相关样式
import '@vue-office/excel/lib/index.css'// 引入接口import getExcelData from '..........'export default {components:{VueOfficeExcel},data(){return {excel: 'http://static.shanhuxueyuan.com/demo/excel.xlsx'//设置文档地址}},methods:{rendered(){console.log("渲染完成")},/**在这里开始请求数据*/fetchExcelData () {getExcelData ().then(res => {this.excel= res})},/******* getExcelData 注意 这个接口的responseType要设置为'arraybuffer',不设置可以渲染不出来********/}
}
</script>

一般的需求到此就结束了。不出意外的话,就可以预览Excel了。是不是很简单呢?

第三,自定义样式

但是,如果你发现你的样式有一些不尽人意,那么就需要一些高阶用法了。

可是,这官方文档|
xlsx文件预览 | vue-office

对于自定义样式,可是只字不提啊。你说怎么办?看源码呗。

蒙蔽看源码的过程省略一万字。

在源码中找到这几个关键的东西:

幸运的是,他是基于 X-Spreadsheet

 不幸的是,他并没有使用  X-Spreadsheet styles的配置项目。

 

 这一下,真的是头皮发麻啊。

在回归官方文档,仔细看看,发现了这个hook

行吧,打印出来看看这些数据吧。

"transformData": function (workbookData){console.log(workbookData);return workbookData;    }

再次展开 rows的cell,发现

style里边竟然是数字,这是什么鬼。联想一下下边的styles数组。大胆猜测下,这估计就是引用styles数组的索引值吧。

再看styles数组

果然这里边啥都有,那么根据vue-office的源码开始整吧。

transformData: (workbookData) => {workbookData[0].styles = workbookData[0].styles.map(item => {// 修改文字大小item.font.size = 18;// 颜色item.color = '#888'// 修改背景颜色item.bgColor = '#f40';// 修改borderitem.border = {top: ['thin', '#fff']}.......}

然后,下班吧,肉都凉了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/573027.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPF —— DockPanel、ProgressBar 控件详解

ProgressBar 控件详解 1Progress bar简介 ProgressBar&#xff1a;进度条控件。 WPF带有一个方便的控件用于显示进度&#xff0c;称ProgressBar。它的工作原理就是设置最小值和最大值然后通过递增一个值&#xff0c;这样就可以直观的显示当前进度情况。 2 Progress bar常用的…

web——xml,xxe

xml的格式 &#xff0c;我们可以通过这个读取文件 改成这个 这样就可以知道&#xff0c;文件里的信息&#xff0c;但这是有回显的&#xff0c;因为&#xff0c;有prinetf 带外测试 将数据包改成这个 就发现漏洞存在 这是有回显的情况 数据包这么写 然后在自己的服务器…

如何用Flask中的Blueprints构建大型Web应用

本文分享自华为云社区《构建大型Web应用Flask中的Blueprints指南》&#xff0c;作者&#xff1a; 柠檬味拥抱。 什么是Blueprints&#xff1f; 什么是Blueprints&#xff1f; Blueprints是Flask中的一种模式&#xff0c;用于将应用程序分解为可重用的模块。每个蓝图实际上是…

elementui日期时间选择框自定义组件

1.需求场景 业务中需要&#xff0c;日期选择框方便客户对日期的选择&#xff08;比如近5天&#xff0c;本周&#xff0c;本月&#xff0c;本年等等&#xff09;&#xff0c;并按小时展示。 2.组件代码MyDateTimeChange.vue <template><el-date-pickerv-model"…

【LVGL-键盘部件,实体按键控制】

LVGL-二维码库 ■ LVGL-键盘部件■ 示例一&#xff1a;键盘弹窗提示■ 示例二&#xff1a;设置键盘模式■ 综合示例&#xff1a; ■ LVGL-实体按键控制■ 简介 ■ LVGL-键盘部件 ■ 示例一&#xff1a;键盘弹窗提示 lv_keyboard_set_popovers(kb,true);■ 示例二&#xff1a;设…

Vue脚手架

Vue脚手架 学习目标&#xff1a; 理解Node.js基本使用方法理解包资源管理器NPM的使用理解webpack的作用理解 vue-cli 脚手架 (重点)Element-UI 组件库 1.vue的格式&#xff1a;new Vue({//作用的视图el:"id选择器",//vue中的数据/*data:{key:value,key:value,...}…

GPT提示词分享 —— 口播脚本

可用于撰写视频、直播、播客、分镜头和其他口语内容的脚本。 提示词&#x1f447; 请以人的口吻&#xff0c;采用缩略语、成语、过渡短语、感叹词、悬垂修饰语和口语化语言&#xff0c;避免重复短语和不自然的句子结构&#xff0c;撰写一篇关于 [主题] 的文章。 GPT3.5&#…

【网安小白成长之路】2.PHP与MySQL交互

&#x1f42e;博主syst1m 带你 acquire knowledge&#xff01; ✨博客首页——syst1m的博客&#x1f498; &#x1f51e; 《网安小白成长之路(我要变成大佬&#x1f60e;&#xff01;&#xff01;)》真实小白学习历程&#xff0c;手把手带你一起从入门到入狱&#x1f6ad; &…

JVM(五)——类加载阶段

一、类加载阶段 一个类型从被加载到虚拟机内存中开始&#xff0c;到卸载出内存为止&#xff0c;它的整个生命周期将会经历加载 &#xff08;Loading&#xff09;、验证&#xff08;Verification&#xff09;、准备&#xff08;Preparation&#xff09;、解析&#xff08;Resol…

循环神经网络之序列模型

自回归模型 自回归模型&#xff1a; 只与x 有关 &#xff0c;对自己执行回归隐变量自回归&#xff1a;与X 和过去观测总结h 都有关 案例 %matplotlib inline import torch from torch import nn from d2l import torch as d2lT 1000 # 总共产生1000个点 time torch.aran…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之七 简单水彩画效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之七 简单水彩画效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之七 简单水彩画效果 一、简单介绍 二、简单图像浮雕效果实现原理 三、简单水彩画效果案例实现简单步骤 四、注意事项…

【搜索引擎2】实现API方式调用ElasticSearch8接口

1、理解ElasticSearch各名词含义 ElasticSearch对比Mysql Mysql数据库Elastic SearchDatabase7.X版本前有Type&#xff0c;对比数据库中的表&#xff0c;新版取消了TableIndexRowDocumentColumnmapping Elasticsearch是使用Java开发的&#xff0c;8.1版本的ES需要JDK17及以上…