在前端实现excel导入,在线编辑,导出,打印等功能 |
您所在的位置:网站首页 › 怎么把excel转化为在线编辑版本 › 在前端实现excel导入,在线编辑,导出,打印等功能 |
后台实现excel的导入导出很简单,在线编辑通过使用第三方平台集成也不复杂,那怎么在前端实现exel导入导出、打印、在线编辑功能呢? 在此,我们需要知道几个第三方库:luckySheet,luckyExcel,vue-print-nb,exceljs luckySheet:luckySheet是当前比较火的excel在线编辑开源的前端第三方插件,暂时不支持导入、导出、打印 luckyExcel:luckyExcel是和luckySheet同一家开发的用于将excel文件导入luckySheet的插件 vue-print-nb:vue-print-nb的开源的封装好的打印插件,底层实现便是我们常见的window.print方法 exceljs:exceljs是用于自定义生成excel文件的开源插件 具体实现: 一、引入依赖 1、引入luckyExcel、vue-print-nb、exceljs插件 cnpm i vue-print-nb --save cnpm i exceljs --save cnpm i luckyexcel --save 2、引入luckySheet依赖使用cdn引入: 本地引入(具体资源文件在项目中): 二、使用(基于Vue) 1、集成luckySheet①定义标签的id: ②在mounted生命周期函数中绑定 mounted() { this.initExcel(); }, methods:{ initExcel(exportJson = {}) { // eslint-disable-next-line no-undef luckysheet.create({ container: 'editSheet', // luckysheet为容器id lang: 'zn', //默认语言 showtoolbar: true, //显示工具栏 showtoolbarConfig: { print: false // 隐藏插件内部打印按钮 }, showinfobar: false, // 显示头部返回标题栏 data: exportJson.sheets //导入excel数据 }); }, } 2、luckyexcel导入excel①通过input标签或者el-upload组件导入一个excel 导入excel②将excel导入luckysheet beforeUpload(file) { const suffix = file.name.split('.'); if (suffix[suffix.length - 1] !== 'xlsx') { this.$message.error('文件格式只能是.xlsx'); return false; } // eslint-disable-next-line no-undef luckysheet.destroy(); // eslint-disable-next-line no-undef LuckyExcel.transformExcelToLucky(file, exportJson => { if (!exportJson.sheets || exportJson.sheets.length === 0) { this.$message.warning('读取excel文件内容失败'); return; } this.initExcel(exportJson); }); } 3、使用exceljs提供生成excel功能①导出成file对象 /** * @description: 获取在线excel数据后编辑成excel文件导出 * @author: flyer */ async exportExcel() { // eslint-disable-next-line no-undef const data = luckysheet.getluckysheetfile(); //获取luckysheet中的excel所有数据 const exportData = await exportExcel(data); const blob = new Blob([exportData]); const file = new File([blob], this.file?.name || '文档.xlsx', { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }); return file; },exportExcel方法比较长,并且会根据需要持续添加或优化功能,有需要的小伙伴自行去项目中查看 ②下载到本地 /** * @description: 浏览器导出excel * @author: flyer * @param {Object} blob excel数据,也可以是file对象 */ async download() { const file = await this.exportExcel(); if (window.navigator && window.navigator.msSaveBlob) { window.navigator.msSaveBlob(file, file.name); } else { const a = document.createElement('a'); a.download = file.name; a.href = URL.createObjectURL(file); a.style.display = 'none'; document.body.appendChild(a); a.click(); document.body.removeChild(a); } }, 4、使用vue-print-nb提供打印功能①在main.js引入vue-print-nb功能 import Print from 'vue-print-nb'; Vue.use(Print);②按钮绑定一个不显示的标签 打印③实现导出功能 /** * @description: 打印默认区域 * @author: flyer * @param {Boolean} flag 是否默认打印 */ printFn(flag) { // eslint-disable-next-line no-undef const src = flag ? luckysheet.getScreenshot() : luckysheet.getScreenshot({ range: 'A1:J50' }); const $img = ``; this.$nextTick(() => { document.querySelector(`#print_html`).innerHTML = $img; }); },demo地址:https://gitee.com/flyerking/xf-excel demo演示: 演示excel操作 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |