js 或者 vue表格导出Excel总结(发票/账单)

编程入门 行业动态 更新时间:2024-10-26 06:38:46

js 或者 vue表格导出Excel总结(发票/<a href=https://www.elefans.com/category/jswz/34/1752744.html style=账单)"/>

js 或者 vue表格导出Excel总结(发票/账单)

1.自定义样式

2.自定义页边距

3.设置单元格输出

废话不多说,直接上代码

本例 是基于vue开发,代码格式保持vue风格,写在.vue组件里,如果使用js请自行转换

两种方式:

<template>
<div><div><button type="button" @click="ExportExcel">导出Excel(第一种方式)</button><button type="submit" @click="tableToExcel('tableExcel','','test2.xlsx')" class="btn btn-primary"><a id="download" href="" style="display: none;"></a>导出Excel(第二种方式)</button></div><div id="myDiv"><table id="tableExcel" style="width: 740px;"><thead><tr><td colspan="6" align="center" class="title">********账单(2019年05月)</td></tr><tr><td colspan="6" align="right">打印日期:2019年05月09日</td></tr><tr><td colspan="4" class="company_name">名称:********有限公司</td><td colspan="2" align="right">合同号:1255664155</td></tr><tr><td class="company_name">房产:</td><tdcolspan="5"class="company_name">1121,909,e3091121,909,e3091121,909,e3091121,909,e309112</td></tr></thead><colgroup><col class="table_read"/><col class="table_room"/><col class="table_room"/><col class="table_read"/><col class="table_read"/><col class="table_read"/></colgroup><tbody><tr align="center"><td class="table_head">费项</td><td class="table_head">房产</td><td class="table_head">期间/读数|倍率</td><td class="table_head">数量</td><td class="table_head">单价</td><td class="table_head">金额</td></tr><tr><td>租金</td><td class="ggg">101,e10022,1121,909,e309</td><class="ggg">ccc</td><td>ddd</td><td align="right">0.20</td><td align="right">332.20</td></tr>    <tr><td>管理费</td><td class="ggg">1121,909,e309</td><td class="ggg">CCC</td><td>DDD</td><td align="right">2.63</td><td align="right">64652.32</td></tr><tr><td>电梯费</td><td class="ggg">1121,909,e309</td><td class="ggg">HHH</td><td>III</td><td align="right">0.04</td><td align="right">121458.23</td></tr><tr><td>电费</td><td class="ggg">1121,909,e309</td><td class="ggg">HHH</td><td>III</td><td align="right">0.40</td><td align="right">236.00</td></tr><tr><td>水费</td><td class="ggg">1121,909,e309</td><td class="ggg">HHH</td><td>III</td><td class="hhh" align="right">2521221122</td><td align="right">293658.92</td></tr><tr><td rowspan="4">说明</td><td colspan="3" rowspan="4">请于当月5日前缴清费用,费用有疑问请拨打0755-21000374,咨询转账请留言13799988555, 逾期按日收取月租金的0.5%违约金,逾期未交者,将按合同约定执行,恕不另行通知</td><td align="right" class="ccc">本期总计:</td><td align="right"class="ddd">11111.00</td></tr><tr><td align="right" class="ccc">往期欠缴:</td><td align="right" class="ddd">440.00</td></tr><tr><td align="right"  class="ccc">应付总额:</td><td align="right" class="ddd">11551.00</td></tr><tr ><td align="right" class="eee">违约金:</td><td align="right" class="fff">22.00</td></tr></tbody></table></div></div>
</template><script>export default {methods:{ExportExcel(data){// 第一种方式let lHtml = document.getElementById("myDiv").innerHTML;let tableHtml='<html><head><meta charset="UTF-8">' +'<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">'+'<style>' +'.title{\n' +'  font-size: 22px;\n' +'height: 32px;'+'}\n' +'pany_name{\n' +'  font-size: 16px;\n' +'height: 30px;'+'}'+' .table_head{\n' +'  font-size: 14px;height: 24px;\n' +'  }\n'+'table{\n' +'  width: 740px;\n' +'  table-layout:fixed;' +'}\n' +'td{\n' +'  padding: 0 5px;\n' +'  overflow:hidden;\n' +'  mso-number-format:"\#\,\#\#0\.00"'+'}\n' +'tbody td{\n' +'  height: 30px;\n' +'  font-size: 15px;\n' +'  border:0.5px solid #000;'+'}\n' +'c{\n' +'  border: 0;\n' +'}\n'+'.ddd{' +'border: 0;'+'border-right: 0.5px solid #000;\n' +'}\n'+'.eee{\n' +'  border: 0;\n' +'  border-bottom: 0.5px solid #000;\n' +'}\n' +'.fff{\n' +'  border: 0;\n' +'  border-bottom: 0.5px solid #000;\n' +'  border-right: 0.5px solid #000;\n' +'}'+'.ggg{' +  // 设置溢出省略号,无效'  word-break:keep-all;\n' +'  white-space:nowrap;\n' +'  overflow:hidden;\n' +'  text-overflow:ellipsis;\n' +'}'+'.hhh{' +'  mso-number-format:"\@";'+// 设置单元格类型'}'+' .table_room{\n' +'    width: 170px;\n' +'  }\n' +' .table_read{\n' +'    width: 100px;\n' +'  }'+'@page\n' +'  {margin:0.80cm 0.90cm 0.80cm 1.80cm; \n' +'   mso-header-margin:0.51cm;\n' +'   mso-footer-margin:0.51cm;}'+'</style>'+'</head><body>';tableHtml += lHtml;tableHtml += '</body></html>';console.log(tableHtml)let excelBlob = new Blob([tableHtml], {type: 'application/vnd.ms-excel'});let fileName = "test1.xls";if(this.isIE()){window.navigator.msSaveOrOpenBlob(excelBlob,fileName);}else{//  这里是两种方式的区别之处 直接导出HTML内容,这种在Excel表格里会自动使用// 文件名作为工作表名称let a = document.createElement('a');a.href = URL.createObjectURL(excelBlob);a.download = fileName;document.body.appendChild(a);a.click();}},<!****************第二种方式********************************>tableToExcel (tableId, name,filename) {if(this.isIE()){window.navigator.msSaveOrOpenBlob(excelBlob,fileName);return;}let uri = 'data:application/vnd.ms-excel;base64,',//Excel样式代码template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel"'+'xmlns=""><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet>'+'<x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets>'+'</x:ExcelWorkbook></xml><![endif]-->'+'<meta http-equiv=Content-Type content="text/html; charset=utf-8">'+'<style>' +'.title{\n' +'  font-size: 22px;\n' +'height: 32px;'+'}\n' +'pany_name{\n' +'  font-size: 16px;\n' +'height: 30px;'+'}'+' .table_head{\n' +'  font-size: 14px;height: 24px;\n' +'  }\n'+'table{\n' +'  width: 740px;\n' +'  table-layout:fixed;' +'}\n' +'td{\n' +'  padding: 0 5px;\n' +'  overflow:hidden;\n' +'  mso-number-format:"\#\,\#\#0\.00"'+'}\n' +'tbody td{\n' +'  height: 30px;\n' +'  font-size: 15px;\n' +'  border:0.5px solid #000;'+'}\n' +'c{\n' +'  border: 0;\n' +'}\n'+'.ddd{' +'border: 0;'+'border-right: 0.5px solid #000;\n' +'}\n'+'.eee{\n' +'  border: 0;\n' +'  border-bottom: 0.5px solid #000;\n' +'}\n' +'.fff{\n' +'  border: 0;\n' +'  border-bottom: 0.5px solid #000;\n' +'  border-right: 0.5px solid #000;\n' +'}'+'.ggg{' +'  word-break:keep-all;\n' +'  white-space:nowrap;\n' +'  overflow:hidden;\n' +'  text-overflow:ellipsis;\n' +'}'+'.hhh{' +'  mso-number-format:"\@";'+'}'+' .table_room{\n' +'    width: 170px;\n' +'  }\n' +' .table_read{\n' +'    width: 100px;\n' +'  }'+'@page\n' +   // 设置页边距,以厘米为单位,也可以以英寸in为单位'  {margin:0.80cm 0.90cm 0.80cm 1.80cm; \n' +'   mso-header-margin:0.51cm;\n' +'   mso-footer-margin:0.51cm;}'+'</style>'+'</head><body><table><colgroup>\n' +'<col class="table_read"/><col class="table_room"/><col class="table_room"/><col class="table_read"/><col class="table_read"/><col class="table_read"/>\n' +'</colgroup>' +'{table}' +'</table></body></html>',base64 = function(s) { return window.btoa(unescape(encodeURIComponent(s))) },format = function(s, c) {return s.replace(/{(\w+)}/g,function(m, p) { return c[p]; })};//  这里是两种方式的区别之处 把页面转为base64码导出 name是工作表名称,可以为空let table;if (!tableId.nodeType) table = document.getElementById(tableId);let ctx = {worksheet: name || 'Worksheet', table: table.innerHTML};document.getElementById("download").href = uri + base64(format(template, ctx));document.getElementById("download").download = filename;document.getElementById("download").click();}},isIE() {if (!!window.ActiveXObject || "ActiveXObject" in window) {return true;} else {return false;}}},}
</script><style scoped>.title{font-size: 20px;}pany_name{font-size: 16px;height: 30px;}table{table-layout:fixed;}td{padding: 0 5px;border:1px solid #aaa;/*word-break:keep-all;*//*white-space:nowrap;*/overflow:hidden;/*text-overflow:ellipsis;*/}thead td:last-child{}tbody td{height: 30px;font-size: 15px;border: 1px solid #000;}.ggg{word-break:keep-all;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}c{border: 0;}.ddd{border: 0;border-right: 1px solid #000;}.eee{border: 0;border-bottom: 1px solid #000;}.fff{border: 0;border-bottom: 1px solid #000;border-right: 1px solid #000;}.table_head{font-size: 12px;height: 24px;}.table_room{width: 170px;}.table_read{width: 100px;}</style>

 

 

摘抄自:    

理解翻译

mso-number-format:"0"NO Decimals  没有小数位
mso-number-format:"0\.000" 3 Decimals  保留3位小数
mso-number-format:"\#\,\#\#0\.000"Comma with 3 dec  保留3位小数,并且长数字用逗号分隔
mso-number-format:"mm\/dd\/yy"Date7  日期  以下都是不同的日期格式展示
mso-number-format:"mmmm\ d\,\ yyyy"Date9
mso-number-format:"m\/d\/yy\ h\:mm\ AM\/PM"D -T AMPM
mso-number-format:"Short Date"01/03/1998
mso-number-format:"Medium Date"01-mar-98
mso-number-format:"d\-mmm\-yyyy"01-mar-1998
mso-number-format:"Short Time"5:16
mso-number-format:"Medium Time"5:16 am
mso-number-format:"Long Time"5:16:21:00
mso-number-format:"Percent"Percent - two decimals   百分数 两位小数
mso-number-format:"0%"Percent - no decimals  百分数  没有小数
mso-number-format:"0\.E+00"Scientific Notation   科学计数法
mso-number-format:"\@"  Text    作为文本输出   当前数值大的时候会变为科学计数法,用此转换
mso-number-format:"\#\ ???\/???"Fractions - up to 3 digits (312/943)  分数 最多三位数
mso-number-format:"\0022£\0022\#\,\#\#0\.00"£12.76 英镑
mso-number-format:"\#\,\#\#0\.00_ \;

Red

\-\#\,\#\#0\.00\ "

2 decimals, negative numbers in red and signed (1.56   -1.56)

2位小数,红色负号

  

 

页面效果图:

第一种方式导出Excel效果图:

 

第二种方式导出效果图:

 

可以看出两种方式展示效果基本一样,区别在于第一种方式的设置td宽度没有其作用

而共同之处在于给两种方式设置的溢出省略号处理都没有实现,全部失效。

希望解决的朋友留言告知,谢谢!!!

本文不妥之处请指正,接受意见,不接受批评!

 

 

 

 

 

 

 

 

 

 

 

 

更多推荐

js 或者 vue表格导出Excel总结(发票/账单)

本文发布于:2024-03-15 03:58:44,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1738056.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:账单   发票   表格   js   vue

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!