前端导出Excel和打印介绍
开发后台管理系统时,都需要实现打印、导出Excel这两项功能,在前后台分离的开发模式,你是否想找一个前端解决方案。这样后端开发人员就不用为每个报表功能附加一个导出Excel的接口了,那我们进入主题吧。
核心问题-导出Excel是个麻烦
打印不用多说,前端很容易搞定,因为浏览器自带;主要是导出Excel,因为浏览器没有默认支持,而以前大多数据项目都是后台提供接口生成excel文件后下载。
解决问题-引入两个开源库
- printa-js
支持丰富内容的打印组件,原名print-js,printa-js是本人fork后加以改动增加了对页底部内容自定义的功能。git地址:https://github.com/cqhaibin/Print.js
- xlsx
前端导出excel解决方案 git地址:https://github.com/SheetJS/sheetjs
- npm安装包
npm install --save printa-js xlsx
- 导入包
import * as printJS from 'printa-js'
import * as XLSX from 'xlsx'
打印与导出JSON的通用代码
打印
/**
* 普通的打印方法
* data: 数据
* columns:列集合
* title: 标题
* subTitle: 副标题
* 数据格式
* properties: [{filed:'id', displayName: 'title'}]
* printable: [{ id:1 },{id: 2}]
* @param opt { printable: datas, properties: columns }
*/
export function printTable ({ data, columns, header, footer }) {
const props = []
columns.forEach(c => {
if (c.ignorePrint) {
return
}
props.push({
field: c.field,
displayName: c.label
})
})
const distData = []
data.forEach(item => {
const tmp = {}
columns.forEach(c => {
if (item[c.field] !== undefined) {
let val = item[c.field]
if (c.format) {
val = c.format(val, item)
}
Object.defineProperty(tmp, c.field, {
value: val || ''
})
}
})
distData.push(tmp)
})
const opt = {
properties: props,
printable: distData,
header: '<div class="header" >' + (header || '') + '</div>',
style: ' .title { text-align: center; }, .second-title{ font-size:12px; font-weidth: norm; }, .line{ text-decoration: underline; } ',
type: 'json',
footer: footer || ''
}
printJS(opt)
}
导出Excel
/**
* 导出excel
* 数据格式:
* [
['姓名', '年龄', '日期'],
['sam', 20, new Date()],
['long', 20, new Date()]
]
*/
export function excelTable ({ data, columns, title, fName, footer }) {
const props = []
columns.forEach(c => {
if (c.ignorePrint) {
return
}
props.push(c.label)
})
const distData = []
distData.push(props)
data.forEach(item => {
const tmp = []
columns.forEach(c => {
if (item[c.field] !== undefined) {
let val = item[c.field]
if (c.format) {
val = c.format(val, item)
}
tmp.push(val || '')
} else {
}
})
distData.push(tmp)
})
distData.unshift([title])
const sheet = XLSX.utils.aoa_to_sheet(distData)
const len = props.length
sheet['!merges'] = [
{
s: {
c: 0,
r: 0
},
e: {
c: len,
r: 0
}
}
]
const wb = {
SheetNames: ['sheet1'],
Sheets: {}
}
wb.Sheets.sheet1 = sheet
// not support ie
const fileName = fName || (title + '-' + (new Date()).getTime()) + '.xls'
XLSX.writeFile(wb, fileName)
}
前端导出Excel和打印介绍的更多相关文章
- 前端导出Excel兼容写法
今天整理出在Web前端导出Excel的写法,写了一个工具类,对各个浏览器进行了兼容. 首先,导出的数据来源可能有两种: 1. 页面的HTML内容(一般是table) 2. 纯数据 PS:不同的数据源, ...
- 前端导出excel表
前端导出excel表 方式一: 前端js实现 : https://www.cnblogs.com/zhangym118/p/6235801.html 方式二: java后端实现: https://bl ...
- 前端导出Excel
1.首先,需要下载一个叫better-xlsx,的插件,以yarn 为例 ' yarn add better-xlsx --save '下载相关依赖包( npm 方式 ' npm i better-x ...
- js前端导出excel
此例子是利用html特性,纯前端导出excel,样式不好看,兼容主流浏览器. var tableid = jQuery(this).closest("div.tab-label-wrap&q ...
- 踹掉后端,前端导出Excel!
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一个下载链接,但有时候我们只想导出前端页面上已经有了的数据,不想再调后端导出接口浪费服务器资源,学习本文demo例子,我们踹掉后端,直接在前 ...
- react 前端导出Excel
1.首先下载 js-export-excel npm install js-export-excel; 2.下载 xlsx npm install xlsx; 3.引入 import * as ...
- 前端导出excel数据-jsonToExcel
咳咳,好久没有写博了... 在工作中遇到了纯前端,将数据导出为excel文件.正文开始: 第一步 安装依赖: npm i xlsx 第二步 写导出函数: import XLSX from 'xlsx' ...
- vue项目,前端导出excel
今天研究一下前端如何导出excel,边查边实践,边记录 1.安装依赖库 xlsx:这是一个功能强大的excel处理库,但是上手难度也很大,还涉及不少二进制的东西 file-saver:ES5新增了相关 ...
- vue 纯前端导出 excel 表格
在开发后台管理系统的时候,很多地方都要用到导出excel 表格,比如将table中的数据导出到本地,那么实现这种需求往往有两种方案: 一.后端开发一个下载链接,前端将这个链接放到 a 标签的 href ...
- vue 利用xlsx、xlsx-style、file-saver实现前端导出excel表格 (包括设置单元格居中、边框等样式) antdesignvue、elementui、vxetable 等都适用
我用的方法是在表格的根组件外层赋一个div用来导出整个表格,所以antdesignvue.elementui.vxetable 或者原生的table写法应该全都适用,此处我用的框架为antdesign ...
随机推荐
- Spring Cloud Alibaba 微服务架构深度解析
在Spring Cloud生态体系中,Spring Cloud Alibaba作为国产微服务解决方案,通过整合阿里开源组件,提供了一站式服务注册与发现.配置管理.流量控制等能力.本文从核心组件.技术选 ...
- MySQL 字符集、排序规则与查询关系详解
MySQL 查询是否区分大小写及重音敏感,取决于创建时指定的字符集(character set)和排序规则(collation). (1)字符集(Character Set):规定可存储的字符,如 u ...
- springboot~入门第二篇~页面html跳转~
遇到的问题:按照别人的blog搭jsp页面就是html页面跳转不了,总是如图: 终于找到了一个能用的blog ,换 thymeleaf(html页面跳转)成功. 控制器代码 注意下: @Control ...
- 前端开发系列076-JQuery篇之框架源码解读[插件]
这篇文章将主要介绍jQuery框架的插件机制,包括但不限于jQuery.extend和jQuery.fn.extend方法的设计和使用,JavaScript体系中的常用概念以及jQuery插件的使用等 ...
- spring官方的配置文件获取
简介 spring以配置文件IOC(控制翻转)AOP(切面) IOC控制翻转, 以配置文件来控制对象的生成. 参考连接 https://github.com/spring-projects/sprin ...
- opengl 学习 之 15 lesson
opengl 学习 之 15 lesson 简介 光照贴图 link http://www.opengl-tutorial.org/uncategorized/2017/06/07/website-u ...
- ETL数据集成丨实现SQLServer数据库的高效实时数据同步
SQL Server,作为一款功能强大的关系型数据库管理系统(RDBMS),在企业级应用中占据着举足轻重的地位.它不仅提供了可靠的数据存储与管理能力,还集成了高级数据分析.报表服务.集成服务以及商业智 ...
- TinyEditor v4.0 alpha 版本发布:表格更强大,表情更丰富,上传体验超乎想象!
你好,我是 Kagol,个人公众号:前端开源星球. TinyEditor 是一个基于 Quill 2.0 的富文本编辑器,在 Quill 基础上扩展了丰富的模块和格式,框架无关.功能强大.开箱即用. ...
- Distributions: Chebyshev Inequality | Uniform | Cauchy | Normal/Gaussian
https://www.britannica.com/science/probability-theory https://www.britannica.com/biography/David-Bla ...
- java请求http服务-参数是@RequestBody String resultJson 类型
当对方的接口参数是@RequestBody类型时如何调用. 1.对方controller接口写发如下: @PostMapping(value = "/test") @Respons ...