当前位置:首页 » 《我的小黑屋》 » 正文

前端实现在线预览excel文件

13 人参与  2024年10月11日 12:00  分类 : 《我的小黑屋》  评论

点击全文阅读


在前端开发中,经常会遇到需要在线预览各种文件的需求。本文将介绍如何使用前端技术实现在线预览 Excel 文件的功能。

一、基于微软office服务的excel预览

获取要预览的 Excel 文件的 URL(例如存储在 OneDrive 或 SharePoint 上的文件)。使用 Office Online 的嵌入代码。可以在网页中使用以下类似的 HTML 结构:
    <iframe         src="https://view.officeapps.live.com/op/embed.aspx?src=<Excel 文件 URL>"         frameBorder={0}    />

另外需要支持下载的话,还可以在src链接后加上wdDownloadButton属性:

    <iframe         src="https://view.officeapps.live.com/op/embed.aspx?src=<Excel 文件 URL>&wdDownloadButton=True"         frameBorder={0}    />

预览效果如下:

在这里插入图片描述

微软office的在线预览服务,不仅可以预览excel,还支持word、ppt等Office文件等在线预览,如果对预览要求不是很高的话,这是一个比较低成本低实现方式。

二、使用 LuckyExcel、Luckysheet 的 Excel 预览

Luckysheet库的在线预览excel,我觉得是相对还原度比较高的,在试用其他几个常见的开源库后,发现他们对excel文件中存在图表形式内容的还原存在问题,而Luckysheet库还原是比较好的。

1. 安装LuckyExcel、Luckysheet
安装LuckyExcel:
npm i LuckyExcel
Luckysheet不存在npm包,需要通过script标签去通过远程url引入:

在html文件中引入:

  <link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/plugins/css/pluginsCss.css' />  <link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/plugins/plugins.css' />  <link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/css/luckysheet.css' />  <link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/assets/iconfont/iconfont.css' />  <script src="https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/plugins/js/plugin.js"></script>  <script src="https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/luckysheet.umd.js"></script>
2. 在文件中引入
import LuckyExcel from 'luckyexcel';

Luckysheet库因为是script引入的,可以通过window.Luckysheet来使用,为避免ts报错,需要定义全局变量

declare global {    interface Window {        luckysheet: any;    };};
3. 在线预览excel文件

在日常的业务中,预览的excel有2种场景:

在线的excel url链接通过后端流式接口请求的excel数据

所以我们通过接口将response转为buffer格式,来兼容2种形式场景:

fetch("example.xlsx").then(res => {            return res.arrayBuffer();        }).then(buffer => {            // 转为blob格式,以备后面下载使用            const blob = new Blob([buffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });            //可以将blob对象保存起来 需要在外层定义好`downloadFile`变量            downloadFile = blob;                        LuckyExcel.transformExcelToLucky(buffer, function (exportJson, luckysheetfile) {                exportJson.sheets[0].zoomRatio = 1;                console.log("exportJson", exportJson);                console.log("window.luckysheet", window.luckysheet);                if (window.luckysheet && window.luckysheet.create) {                    window.luckysheet?.create({                        container: "excel", //luckysheet is the container id                        lang: 'zh',                        showtoolbar: false,//是否显示工具栏                        showinfobar: false,//是否显示顶部信息栏                        showsheetbar: false,//是否显示底部sheet页按钮                        allowCopy: false,//是否允许拷贝                        allowEdit: false,//是否允许编辑                        // showstatisticBar: false,//是否显示底部计数栏                        sheetFormulaBar: false,//是否显示公示栏                        enableAddRow: false,//是否允许添加行                        enableAddBackTop: false,//是否允需回到顶部                        // devicePixelRatio: 10, //设置比例                        data: exportJson.sheets,                        // title: exportJson.info.name,                        // userInfo: exportJson.info.name.creator,                        hook: {                            workbookCreateAfter: () => {                                console.log("workbookCreateAfter------------");                            }                        }                    });                }            })        })

luckysheet中并没有excel文件加载完毕的回调,但是可以通过hook中的workbookCreateAfter来监听文件加载完成。

luckysheet的页面配置项,可以通过官网文档来进行自由配置

luckysheet配置项

预览效果如下图所示:

在这里插入图片描述

下载excel文件 函数如下:

// 下载文件    const handleDownloadFile = () => {        if (downloadFile) {            const url = window.URL.createObjectURL(downloadFile);            const a = document.createElement('a');            a.style.display = 'none';            a.href = url;            a.download = '高效机房设计计算报告.xlsx';            document.body.appendChild(a);            a.click();            window.URL.revokeObjectURL(url);            document.body.removeChild(a);        }    };

三、总结优缺点

微软Office服务的优缺点

优点:

利用微软的强大服务,稳定性和兼容性较高。提供丰富的功能,如编辑、批注等。

缺点:

需要用户具有微软 Office 订阅或者在特定环境下使用,限制了其适用性。可能存在性能问题,特别是对于大型文件。

LuckyExcel、Luckysheet的优缺点、

优点:

开源免费,无需用户具有特定的订阅。可以自定义显示和功能,灵活性较高。

缺点

可能需要一些额外的配置和调试。功能可能不如微软 Office 服务丰富。

四、LuckyExcel、Luckysheet的延伸

LuckyExcel、Luckysheet纯前端类似excel的在线表格,功能强大、配置简单、完全开源。它的使用场景不仅仅局限于excel文件的在线预览,同时也支持在线编辑等,可以访问官网获取更多的应用场景。

Luckysheet官网

在线demo

在这里插入图片描述

在Luckysheet的基础上,Luckysheet团队还推出了Luckysheet升级版Univer,有兴趣的可以玩一玩,不过它的在线预览需要配合服务端使用

Univer官网


点击全文阅读


本文链接:http://zhangshiyu.com/post/170477.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 怀胎五月,老公一家逼我给小姑子捐骨髓精彩分享_婆婆苏伟小姑子隐藏剧情_小说后续在线阅读_无删减免费完结_
  • 风柏煜叶桐附加完整在线阅读(谋妻入瓮)最近更新列表
  • (谋妻入瓮)谋妻入瓮(风柏煜叶桐)无套路无弹窗全部章节列表
  • 盲眼大师他总勾搭我最新章节(萧廿颜宁北)全文免费阅读无弹窗大结局_萧廿颜宁北免费阅读
  • ⽗亲被欺辱后,我为他洗冤翻盘全文阅读_奶奶孙子麦芽糖独家首发_小说后续在线阅读_无删减免费完结_
  • 俞晓小说完结篇(豪门骗嫁:腹黑总裁步步谋婚)章节前文+全篇阅读(俞晓)最近更新
  • 手撕冒充我身份抢拉布布的第三者故事会_老公赵桐州陆雅宁免费阅读_小说后续在线阅读_无删减免费完结_
  • 以前不喜欢的人,以后也不会喜欢全文免费阅读无弹窗大结局_林雨浔楚淮晏最新章节列表_笔趣阁(以前不喜欢的人,以后也不会喜欢:完结+结局+番外)
  • 救命血被抽干,中了绝情蛊的老公弟弟双双傻眼了免费赏析_弟弟月儿谢总全文+后续_小说后续在线阅读_无删减免费完结_
  • 愿意季清涟小说番外+结局(心上音)小说在线阅读
  • 莫斯科没有眼泪好评_林陌瑾修许青青后续+完结_小说后续在线阅读_无删减免费完结_
  • 宠妻上瘾:霸道老公坏死了(秦慕辰苏莫浅)整本+后续+(宠妻上瘾:霸道老公坏死了)结局在线阅读

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1