文件预览:使用xlsx预览excel文件

2023-11-17

文件预览系列:

mavon-editor预览Markdown文件

xlsx预览excel文件

注意事项:

多sheet页的情况需要自己手动处理

一、安装插件:xlsx

// 我目前使用的是0.17.5版本,之前有一次升级后报错
// 如果xlsx内部报错,可以尝试安装其他版本
npm i xlsx

二、使用

1、引入xlsx

import XLSX from 'xlsx';

2、获取文件流数据

注意:后台需要传递文件流过来,前台在接收时responseType需要设置为arraybuffer

            // 预览excel文件
            doloadFile () {
                const params = {
                    url: '文件地址',
                    name: 'aaaaa.xlsx',
                };
                this.$ajax.downloadFileStreamXls(params, 'arraybuffer').then(res => {
                    const data = new Uint8Array(res);
                    const workbook = XLSX.read(data, {
                        type: 'array'
                    });
                    // 删除掉没有数据的sheet
                    Object.values(workbook.Sheets).forEach((sheet, index) => {
                        if (Object.keys(sheet).indexOf('!ref') === -1) {
                            delete workbook.Sheets[workbook.SheetNames[index]];
                        }
                    });
                    this.tableToHtml(workbook);
                });
            },

3、处理获取到的数据进行展示

            // 预览excel文件
            tableToHtml (workbook) {
                console.log(workbook);
                const sheetList = workbook.SheetNames.filter(v => v.indexOf('数据源') === -1);
                this.activeName = sheetList[0];
                sheetList.forEach(sheet => {
                    const worksheet = workbook.Sheets[sheet];
                    if (worksheet) {
                        const innerHTML = XLSX.utils.sheet_to_html(worksheet);
                        this.excelSheet.push({
                            name: sheet,
                            innerHTML: innerHTML
                        });
                    } else {
                        this.excelSheet.push({
                            name: sheet,
                            innerHTML: '暂无数据',
                        });
                    }
                });
                this.DialogVisible = true;
            }

三、完整代码

<template>
    <div class="file-pre">
        <el-tabs v-model="activeName" v-if="DialogVisible" type="border-card">
            <el-tab-pane v-for="(item,index) in excelSheet" :key="index" :label="item.name" :name="item.name">
                <div class="table" v-html="item.innerHTML"></div>
            </el-tab-pane>
        </el-tabs>
    </div>
</template>

<script>
    import XLSX from 'xlsx';
    export default {
        data () {
            return {
                DialogVisible: false,
                excelSheet: [],
                activeName: ''
            };
        },
        mounted () {
            this.doloadFile();
        },
        methods: {
            // 预览excel文件
            doloadFile () {
                const params = {
                    url: '文件路径',
                    name: 'aaaaa.xlsx',
                };
                this.$ajax.downloadFileStreamXls(params, 'arraybuffer').then(res => {
                    const data = new Uint8Array(res);
                    const workbook = XLSX.read(data, {
                        type: 'array'
                    });
                    // 删除掉没有数据的sheet
                    Object.values(workbook.Sheets).forEach((sheet, index) => {
                        if (Object.keys(sheet).indexOf('!ref') === -1) {
                            delete workbook.Sheets[workbook.SheetNames[index]];
                        }
                    });
                    this.tableToHtml(workbook);
                });
            },
            // 预览excel文件
            tableToHtml (workbook) {
                console.log(workbook);
                const sheetList = workbook.SheetNames.filter(v => v.indexOf('数据源') === -1);
                this.activeName = sheetList[0];
                sheetList.forEach(sheet => {
                    const worksheet = workbook.Sheets[sheet];
                    if (worksheet) {
                        const innerHTML = XLSX.utils.sheet_to_html(worksheet);
                        this.excelSheet.push({
                            name: sheet,
                            innerHTML: innerHTML
                        });
                    } else {
                        this.excelSheet.push({
                            name: sheet,
                            innerHTML: '暂无数据',
                        });
                    }
                });
                this.DialogVisible = true;
            }
        }
    };
</script>

<style lang="less" scope>
html body {
    width: 100%;
    height: 100vh;
    margin: 0;
}

.file-pre {
    height: calc(100vh - 40px);
    padding: 20px;

    .table-html-wrap /deep/ table {
        border-right: 1px solid #e8eaec;
        border-bottom: 1px solid #e8eaec;
        border-collapse: collapse;
        margin: auto;
    }

    .table-html-wrap /deep/ table td {
        border-left: 1px solid #e8eaec;
        border-top: 1px solid #e8eaec;
        white-space: wrap;
        text-align: left;
        min-width: 100px;
        padding: 4px;
    }

    table {
        border-top: 1px solid #EBEEF5;
        border-left: 1px solid #EBEEF5;
        width: 100%;
        overflow: auto;

        tr {
            height: 44px;
        }

        td {
            min-width: 200px;
            max-width: 400px;
            padding: 4px 8px;
            border-right: 1px solid #EBEEF5;
            border-bottom: 1px solid #EBEEF5;
        }
    }

    .el-tabs--border-card {
        // height: calc(100vh - 40px);;
    }

    .el-tabs--border-card > .el-tabs__content {
        overflow: auto;
        height: calc(100vh - 110px);
    }
}
</style>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

文件预览:使用xlsx预览excel文件 的相关文章

  • 解决方案:动态加载独立编译的 Webpack 2 包 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想分享如何捆绑一个充当插件主机以及它如何加载已安装的插件动态地 应用程序和插件都与 Webpack 捆绑在一起 应用程序和插件被编译和分
  • 目前最好的 Javascript 模板引擎是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何从特定索引渲染 v-for

    我想在 v for 中循环假设从数字 5 到 10 循环希望在 5 点开始并在 10 点结束 我试过这个 div div 但我想要更有效的循环方式 有谁知道如何让循环从 5 开始 对于你的例子来说是可能的 div some code her
  • Iphone 上的 Javascript 日期解析

    我正在开发一个针对移动设备的离线 Javascript 网站 iPhone 就是这样的一种移动设备 我正在尝试从 REST API JSON 对象的成员 解析日期 我在用着 Date parse 2010 03 15 10 30 00 这适
  • 如何从 JavaScript 触发 ASP.NET Core 客户端验证

    有没有办法从 JavaScript 触发 ASP NET Core 客户端验证 我有一个 Razor Pages 页面 其中包含
  • Android 上的 Chrome 强制隐藏地址栏

    我最近开发了一个获取混合 http https 内容的网站 因此 我总是将地址栏显示在顶部 它不会像其他网站那样自动隐藏 这就是我要说的 This https planetkde org 是网站的链接 内容是从各种来源获取的 因此无法过滤非
  • Firefox(仅限)动态表单操作不起作用

    控制台为操作属性返回空白 我已经移动了 file upload attr action io cfm action updateitemfile item id agenda modal attr data defaultitemid 周围
  • 页面其余部分完成加载后延迟加载 html5 视频

    我有一个视频元素用作我正在构建的页面底部部分的背景 我试图通过将 src 存储为 data src 属性并使用 jQuery 在其他资源加载后将其应用到 src 属性 因为它不是英雄图像或任何东西 我想加载海报以节省加载时间 然后稍后加载视
  • 使用javascript向url添加哈希而不滚动页面?

    在不滚动页面的情况下向 url 添加哈希 使用 JavaScript 我打开页面 我向下滚动 我单击添加哈希的链接 可能带有值 test 示例 http www example com test http www example com t
  • 使用 Jquery 更改 css 属性时的事件检测

    有没有办法检测元素的 显示 css 属性是否更改 是否更改为无 块或内联块 如果没有的话有什么插件吗 谢谢 Note 突变事件 https developer mozilla org en US docs Web Guide Events
  • 使用 ES6 静态函数时,我得到“没有这样的方法”

    我正在尝试为我在 React Native 中工作的项目创建一个包含静态函数的 utils 类 我读到了如何在 StackOverFlow 中创建静态函数question https stackoverflow com questions
  • Antd 选择搜索框未呈现匹配项

    我有产品数据 我正在使用搜索值过滤数据 然后使用过滤后的数据呈现选项 产品数据作为道具来自全局 redux 存储 由于某种原因 下拉列表仅在搜索值为空时显示数据 当我开始输入时 filteredData已更新 组件也重新渲染 但选项不显示任
  • Javascript - 对父母调用 super 父母?

    我在 Odoo 中定义了当前自定义 javascript 视图的扩展 openerp account move journal test function instance var t instance web t lt instance
  • 什么是闭包编译器?

    如果您不知道我在说什么 请查看以下内容 http closure compiler appspot com home http closure compiler appspot com home 这是一个 JavaScript 压缩器 在他
  • 使用 Google 地图 API 进行反向地理编码

    我正在研究 JavaScript Google Map API 版本 3 更准确地说 正在研究反向地理定位 在 的帮助下官方文档 http code google com intl fr apis maps documentation ge
  • JavaScript:嵌套循环?

    我想实现这样的动画 序列 动画以循环开始 想象一下car从 x1 移动到 x2 然后暂停 1 秒 然后再次播放动画 想象一下car从 x2 移动到 x3 等 the car循环是通过向汽车左侧添加 1px 来实现的 值 但我无法弄清楚嵌套循
  • 主干集合排序

    我制作了我的第一个主干应用程序 但在集合排序方面遇到了一些问题 使用这个后 var SortedFriends MyFriends sortBy function friend return friend get uid console l
  • 让管道自我刷新角度

    我有来自后端的静态时间戳 我想每 1 秒刷新一次管道以获取现在的日期 这是我的烟斗 import Pipe PipeTransform from angular core import moment from moment Pipe nam
  • TinyMCE:将 CSS 类属性与 formatselect-dropdown 格式结合使用

    我想定制格式 http wiki moxiecode com index php TinyMCE Configuration theme advanced blockformats在 TinyMCE 中格式选择下拉菜单 http wiki
  • Escape String - 在 Javascript 中输出rails字符串[重复]

    这个问题在这里已经有答案了 我正在尝试将字符串值分配给 erb 文件中的 javascript 对象 如下所示 var data name 问题是 如果name is Tom s small ears 的输出data name将会Tom x

随机推荐

  • mvc:annotation-driven 与 mvc:default-servlet-handler的作用

    本人见解 两个标签需要配合使用 可以很好地处理SpringMVC请求静态资源或者控制器时的选择 静态资源包括图片 jsp css 但是不设置的话访问jsp可以显示 不知原因 下方转发自 https www cnblogs com cyhby
  • 平衡小车学习总结

    1 平衡小车硬件选择 带编码器的直流减速电机 两个 18650电池组 平衡车支架 MPU 6050陀螺仪 stm32f103c8t6 OLED iic通信协议 0 96寸 TB6612 2 硬件准备阶段 根据电路原理 平衡小车电路板 单片机
  • 计算机如何隐藏任务栏的程序,Win7隐藏任务栏

    本文主要介绍了2个方面的内容 1 Win7隐藏任务栏程序 2 隐藏Win7任务栏上图标 不少用户希望把任务栏程序隐藏起来 或者是把Win7任务栏右侧 正在运行的软件的图标隐藏起来 这样其他人就不能直接发现自己电脑上运行的程序了 一 隐藏Wi
  • 机器学习之有监督学习

    监督学习的目标 利用一组带有标签的数据 学习从输入到输出的映射 然后将这种映射关系应用到未知数据上 达到分类或回归的目的 分类 当输出是离散的 学习任务为分类任务 回归 当输出是连续的 学习任务为回归任务 分类学习 输入 一组有标签的训练数
  • python 3.9 Building wheel for opencv-contrib-python (PEP 517)

    问题 python3 9安装airetest 一直卡在 Building wheel for opencv contrib python PEP 517 解决办法 降低opencv contrib python版本先安装opencv con
  • 华为OD机试 -身高排序(Java)

    题目描述 小明今年升学到了小学一年级 来到新班级后 发现其他小朋友身高参差不齐 然后就想基于各小朋友和自己的身高差 对他们进行排序 请帮他实现排序 输入描述 第一行为正整数H和N 0 lt H lt 200 为小明的身高 0 lt N lt
  • 大脚战场插件怎么关闭_魔兽战场插件 capping插件怎么关闭

    魔兽世界怎么取消战场插件 字符选择屏幕的左下角有一个插件选项 单击下面的 战场 并单击以禁用它们 它不在游戏中 死亡模式你是说死后的黑白 如果是 点击游戏界面下方的系统选项 进入视频设置 关闭显示设置中的死亡效果 WOW战场capping插
  • Docker Postgres 安装部署指南1.0

    以下为实验版本 Docker version 18 09 2 Postgres 11 4 内容目录 1 确定需要安装的版本 2 获取指定版本镜像 3 指定数据挂载目录 4 启动Postgres服务 5 创建数据库 用户 5 1 进入容器内部
  • 【前后端】将代码上传到gitee

    文章目录 前台 gitee建立仓库 步骤A 如果是双人 则有步骤B 后台 gitee建立仓库 复制链接 代码拷贝 提交 小记录一波 前台 gitee建立仓库 步骤A 初始化 commit 后面单引号随便写 git init git add
  • VLAN划分及配置注意事项

    VLAN Virtual Local Area Network 即虚拟局域网 是将一个物理的LAN在逻辑上划分成多个广播域的通信技术 VLAN内的主机间可以直接通信 而VLAN间不能直接通信 从而将广播报文限制在一个VLAN内 VLAN之间
  • Spark Streaming VS Flink

    架构对比 运行角色 Spark Streaming 运行时的角色 standalone 模式 主要有 Master 主要负责整体集群资源的管理和应用程序调度 Worker 负责单个节点的资源管理 driver 和 executor 的启动等
  • MT6701磁编码器使用指南,14Bit单圈绝对值,I2C stm32 HAL库读角度,兼容AS5600

    MT6701是麦歌恩 MagnTek 公司的磁性角度传感器芯片 提供14Bit 0 360 单圈绝对角度检测 拥有 ABZ PWM 模拟量 I2C SSI 等多种信息输出方式 还可根据磁场强度的瞬时变化提供非接触式按压检测功能 能够以较低的
  • ENVI 5.3 分类后类别合并

    想把粉色的云层合并到林地 选择 Combine Classes 输出为 白云类别与林地合并
  • iOS支付功能

    文章转载自 https www jianshu com p 8eb14edca8fb 1 简介 iOS支付主要分两类 第三方支付和应用内支付 内购 其中第三方支付包括有 支付宝支付 微信支付 银联支付 百度钱包支付 京东支付等 应用内支付
  • 高性能javascript--算法和流程控制

    for while和do while性能相当 避免使用for in循环 除非遍历一个属性量未知的对象 es5 for in 遍历的对象便不局限于数组 还可以遍历对象 原因 for in每次迭代操作会同时搜索实例或者原型属性 for in 循
  • Linux系统:centos7.2忘记密码怎么办?

    在使用centos系统的时候有时候太久没用忘记登录密码了 这时候该怎么办呢 下面就来教教大家怎么重置root管理员的密码 1 启动系统 在GRUB2引导画面 按E键 编辑引导项 2 删除linux16这一行最后的 rhgb和 quiet参数
  • vue3中如何以函数的形式创建组件并挂载

    在日常开发中 我们可能会遇到一种情况 组件太灵活 且无法预先定义 那么我们就需要能够创建组件的能力 并且能组合到我们现有的界面中 基础API javascript 创建 app component name 组合
  • Uniapp零基础开发学习笔记(4) -顶部导航栏titleNView的制作

    Uniapp零基础开发学习笔记 4 顶部导航栏titleNView的制作 制作顶部导航栏titleNView的过程 1 官网上关于顶部导航栏的介绍 https uniapp dcloud net cn collocation pages h
  • sqlserver转换时间为字符串

    convert varchar 8 getdate 112 把
  • 文件预览:使用xlsx预览excel文件

    文件预览系列 mavon editor预览Markdown文件 xlsx预览excel文件 注意事项 多sheet页的情况需要自己手动处理 一 安装插件 xlsx 我目前使用的是0 17 5版本 之前有一次升级后报错 如果xlsx内部报错