1 /*eslint-disable*/

2 require('script-loader!file-saver');3 require('./Blob.js'); //blob.js也是网上找的,下面会贴上代码4 require('script-loader!xlsx/dist/xlsx.core.min');

//注意 直接import xlsx-style会报错,因为npm install xlsx-style 下载下来的依赖 源码有错,需要修改,下面会讲到5 import XLSX from "xlsx-style"

6

7 function generateArray(table) {8 var out =[];9 var rows = table.querySelectorAll('tr');10 var ranges =[];11 for (var R = 0; R < rows.length; ++R) {12 var outRow =[];13 var row =rows[R];14 var columns = row.querySelectorAll('td');15 for (var C = 0; C < columns.length; ++C) {16 var cell =columns[C];17 var colspan = cell.getAttribute('colspan');18 var rowspan = cell.getAttribute('rowspan');19 var cellValue =cell.innerText;20 if (cellValue !== "" && cellValue == +cellValue) cellValue = +cellValue;21

22 //Skip ranges

23 ranges.forEach(function(range) {24 if (R >= range.s.r && R <= range.e.r && outRow.length >= range.s.c && outRow.length <=range.e.c) {25 for (var i = 0; i <= range.e.c - range.s.c; ++i) outRow.push(null);26 }27 });28

29 //Handle Row Span

30 if (rowspan ||colspan) {31 rowspan = rowspan || 1;32 colspan = colspan || 1;33 ranges.push({34 s: {35 r: R,36 c: outRow.length37 },38 e: {39 r: R + rowspan - 1,40 c: outRow.length + colspan - 1

41 }42 });43 };44

45 //Handle Value

46 outRow.push(cellValue !== "" ? cellValue : null);47

48 //Handle Colspan

49 if(colspan)50 for (var k = 0; k < colspan - 1; ++k) outRow.push(null);51 }52 out.push(outRow);53 }54 return [out, ranges];55 };56

57 function datenum(v, date1904) {58 if (date1904) v += 1462;59 var epoch =Date.parse(v);60 return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);61 }62

63 function sheet_from_array_of_arrays(data, opts) {64 var ws ={};65 var range ={66 s: {67 c: 10000000,68 r: 10000000

69 },70 e: {71 c: 0,72 r: 0

73 }74 };75 for (var R = 0; R != data.length; ++R) {76 for (var C = 0; C != data[R].length; ++C) {77 if (range.s.r > R) range.s.r =R;78 if (range.s.c > C) range.s.c =C;79 if (range.e.r < R) range.e.r =R;80 if (range.e.c < C) range.e.c =C;81 var cell ={82 v: data[R][C]83 };84 if (cell.v == null) continue;85 var cell_ref =XLSX.utils.encode_cell({86 c: C,87 r: R88 });89

90 if (typeof cell.v === 'number') cell.t = 'n';91 else if (typeof cell.v === 'boolean') cell.t = 'b';92 else if(cell.v instanceof Date) {93 cell.t = 'n';94 cell.z = XLSX.SSF._table[14];95 cell.v =datenum(cell.v);96 } else cell.t = 's';97

98 ws[cell_ref] =cell;99 }100 }101 if (range.s.c < 10000000) ws['!ref'] =XLSX.utils.encode_range(range);102 returnws;103 }104

105 function Workbook() {106 if (!(this instanceof Workbook)) return newWorkbook();107 this.SheetNames =[];108 this.Sheets ={};109 }110

111 function s2ab(s) {112 var buf = newArrayBuffer(s.length);113 var view = newUint8Array(buf);114 for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;115 returnbuf;116 }117

118 export function export_table_to_excel(id) {119 var theTable =document.getElementById(id);120 console.log('a')121 var oo =generateArray(theTable);122 var ranges = oo[1];123

124 /*original data*/

125 var data = oo[0];126 var ws_name = "SheetJS";127 console.log(data);128

129 var wb = newWorkbook(),130 ws =sheet_from_array_of_arrays(data);131

132 /*add ranges to worksheet*/

133 //ws['!cols'] = ['apple', 'banan']; //合并单元格

134 ws['!merges'] =ranges;135

136 /*add worksheet to workbook*/

137 wb.SheetNames.push(ws_name);138 wb.Sheets[ws_name] =ws;139

140 var wbout =XLSX.write(wb, {141 bookType: 'xlsx',142 bookSST: false,143 type: 'binary'

144 });145

146 saveAs(newBlob([s2ab(wbout)], {147 type: "application/octet-stream"

148 }), "test.xlsx")149 }150

151 function formatJson(jsonData) {152 console.log(jsonData)153 }154 export function export_json_to_excel(multiHeader, th, merges, data, defaultTitle) {155 data =[...data];156 data.unshift(th);157

158

159 if(multiHeader) {160 data.unshift(multiHeader);161 }162 var ws_name = "SheetJS";163

164 var wb = newWorkbook(),165 ws =sheet_from_array_of_arrays(data);166

167 /*add worksheet to workbook*/

168 wb.SheetNames.push(ws_name);

//合并单元格169 ws["!merges"] =merges;170 wb.Sheets[ws_name] =ws;171

172 var dataInfo = wb.Sheets[wb.SheetNames[0]];173 var cellArr = merges.map(c =>c.s);174 var secArr = merges.map(c =>c.e);175 var cellArr1 =[];176 cellArr.forEach(cellObj =>{177 var cell_ref =XLSX.utils.encode_cell({178 c: cellObj.c,179 r: cellObj.r180 });181 cellArr1.push(cell_ref);182 });183

//设置单元格样式

184 const borderAll ={185 border: {186 //单元格外侧框线

187 top: {188 style: "thin"

189 },190 bottom: {191 style: "thin"

192 },193 left: {194 style: "thin"

195 },196 right: {197 style: "thin"

198 }199 }200 };201 //给所有单元格加上边框

202 for (var i indataInfo) {203 if (i == '!ref' || i == '!merges' || i == '!cols' || $.inArray(i, cellArr1) >= 0) {204

205 } else{206 dataInfo[i + ''].s =borderAll;207 }208 }209 //设置单元格背景色、字体以及字体大小等

210 var bgColArr = ["FDE9D9", 'FFFF00', 'DAEEF3', 'CCC0DA', 'C5D9F1'];211 //设置主标题样式

212 var headerStyle ={213 font: {214 name: '宋体',215 color: {216 rgb: "303133"

217 },218 bold: true,219 italic: false,220 underline: false

221 },222 alignment: {223 horizontal: "center",224 vertical: "center"

225 },226 fill: {227

228 }229 };230 let mm = 0;231 cellArr1.forEach(cellObj =>{232 var hStyle =Object.assign({}, headerStyle);233 hStyle.fill ={234 fgColor: {235 rgb: bgColArr[mm]236 }237 };238 dataInfo[cellObj].s =hStyle;239 mm++;240 });241

242 var secCellStyle =Object.assign({}, borderAll, headerStyle);243 secArr.forEach((s, index) =>{244 var hStyle =Object.assign({}, secCellStyle);245 hStyle.fill ={246 fgColor: {247 rgb: bgColArr[index]248 }249 };250 var startIndex = 0;251 if (index == 0) {252 startIndex = 0;253 } else{254 startIndex = secArr[index - 1].c + 1;255 }256 for (var se = startIndex; se <= s.c; se++) {257 var cell_ref =XLSX.utils.encode_cell({258 c: se,259 r: 1

260 });261 dataInfo[cell_ref].s =hStyle;262 }263 });264

265 var wbout =XLSX.write(wb, {266 bookType: 'xlsx',267 bookSST: false,268 type: 'binary'

269 });270 var title = defaultTitle || '列表'

271 saveAs(newBlob([s2ab(wbout)], {272 type: "application/octet-stream"

273 }), title + ".xlsx")274 }

js vue 设置excel单元格样式_vue+elementui 项目纯前端Export2Excel导出excel,并利用xlsx-style设置单元格样式...相关推荐

  1. js-xlsx/xlsx-style 纯前端数据导出Excel且支持自定义样式

    前端开发过程中经常遇到导出excel的需求.这种情况大多数都是服务端处理数据(QAQ至少我遇到的大多数都是这样),然后返回一个链接,前端不需要管服务端怎么操作直接打开这个链接(window.locat ...

  2. 使用VUE+XLSX实现纯前端的导出Excel

    1. 安装需要的插件 npm i xlsx -S npm i xlsx-style -S npm i file-saver -S 安装完xlsx-style插件并引入后启动项目会报错 ./cptabl ...

  3. html 导出excel 列被合并,前端实现导出excel单元格合并和调整样式

    有些业务场景需要导出excel表格,寻常这类需求其实是服务端完成,但是前端也有可以实现这类需求的库,这里我介绍最近使用过的三个库. 通用电子表格格式(CSF) 单元地址对象存储为{c:C, r:R}, ...

  4. Vue+Element前端导入导出Excel

    1 前言 1.1 业务场景 由前台导入Excel表格,获取批量数据. 根据一个数组导出Excel表格. 2 实现原理 2.1 引入工具库 file-saver.xlsx.script-loader n ...

  5. 前端自己导出excel表格 不需要调接口(可导出全部的数据)

    前端自己导出excel表格 不需要调接口(可导出全部的数据) 1.下载 npm install -S file-saver xlsx 2.把js放在对应的位置 全部复制(Export2Excel.js ...

  6. 前端实现导出Excel,使用file-saver和 xlsx

    前端实现导出Excel npm install -S file-saver xlsx在需要的页面引入 import XLSX from 'xlsx'; 注意:如果出现XLSX 是underfind,可 ...

  7. sheetJs+xlsx-style——前端实现导出excel表格——设置单元格背景色,居中,自动换行,宽度,百分数展示等

    之前写过一篇博客,是关于elementUi-table组件+xlsx插件实现导出--sheetJs的,之前实现的功能有: 根据dom获取内容 创建工作簿 调整单元格的宽度 实现百分数的展示 插入到工作 ...

  8. Vue用Export2Excel导出excel,多级表头数据

    VUE 使用Export2Excel导出数据,以及多级表头 最近公司做项目,需要导出数据到excel表格 使用到了 element UI ,Export2Excel 特此记录,毕竟好记性不如烂笔头 不 ...

  9. vue 使用Export2Excel导出Excel表格

    第1步:添加依赖: 1:npm install -S file-saver2:npm install -S xlsx3:npm install -D script-loader 第2步: (1)随便写 ...

最新文章

  1. TCP/IP 协议栈及 OSI 参考模型详解--云平台技术栈04
  2. 闭包block多种应用方式
  3. 智能路由器-OpenWRT 系列五 (NAS-SMB家庭共享)
  4. Spring EL方法调用实例
  5. 关于优酷开发SDK之setOnSeekCompleteListener
  6. 活学巧用电脑上网实例入门
  7. 两天学会css基础(一)
  8. 织梦dede 5.7系统基本参数无法修改保存,提示Token mismatch!
  9. Spring Boot (八)MyBatis + Docker + MongoDB 4.x
  10. 基于Smadja算法的搭配词自动提取实践
  11. Problem C: 爬楼梯
  12. 每日算法系列【LeetCode 684】冗余连接
  13. 让UITableView数据处理更轻便
  14. Windows电脑安装Linux系统的方法-Ubuntu版
  15. css文本外观属性大全(内附实例与图解)
  16. 工业级Pass云平台SpringCloudAlibaba综合项目实战(一):序言
  17. python的安装框架acode_Python安装与入门
  18. 发光二极管限流电阻(学习笔记)
  19. 渗透测试工具篇——sqlmap
  20. No database selected 错误

热门文章

  1. outlook查看图片错位异常问题
  2. android获取本地所有视频,各位大神们 android怎么获取手机本地视频啊?
  3. shiro 拦截器链
  4. 华为鸿蒙摄像头,随时随地看一看!华为首款鸿蒙智能摄像头发布
  5. iPhone中通过ics来添加农历与天气预报
  6. 想和大家讲述一个普通人的生活:现在差劲不可怕,只要最后是好的就行
  7. 让自由软件的风暴来的更猛烈吧!
  8. 看见的与看不见的,你看见了吗?——读《1493-物种大交换》
  9. Go开发中配置一个Logger日志的功能实现(结合zap日志库)
  10. 浅谈微信营销的价值与优势