纯前端下载表格多sheet

27 篇文章 0 订阅
22 篇文章 0 订阅
<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title></title>
</head>

<body>
	<script src="js/xlsx.min.js"></script>
	<script src="js/xlsx.full.min.js"></script>
	<script src="js/xlsx.core.min.js"></script>
	<style>
		

	</style>
	<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.14.0/xlsx.full.min.js"></script>
	<!--<script src="js/cpexcel.js"></script>
	<script src="js/ods.js"></script>-->
	<!--<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.14.0/xlsx.min.js"></script>
	
	<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.14.0/xlsx.core.min.js"></script>-->
    <script>
        //如果使用 FileSaver.js 就不要同时使用以下函数
        function saveAs(obj, fileName) {//当然可以自定义简单的下载文件实现方式 
            var tmpa = document.createElement("a");
            tmpa.download = fileName || "下载";
            tmpa.href = URL.createObjectURL(obj); //绑定a标签
            tmpa.click(); //模拟点击实现下载
            setTimeout(function () { //延时释放
                URL.revokeObjectURL(obj); //用URL.revokeObjectURL()来释放这个object URL
            }, 100);
        }       
      var testArray = [
					{'测点名称':'CD01', '沉降':2,'温度':6,'角度':7,"时间":12},
					{'测点名称':null,'沉降':2,'温度':6,'角度':7,"时间":null},
					{'测点名称':null,'沉降':2,'温度':6,'角度':7,"时间":null},
					{'测点名称':null,'沉降':2,'温度':6,'角度':7,"时间":null},
					{'测点名称':'CD02', '沉降':4,'温度':12,'角度':14,"时间":12},
					{'测点名称':'CD03', '沉降':4,'温度':12,'角度':14,"时间":12}
				];
		  var testArray2 = [
					{'测点名称':'CD04', '沉降':2,'温度':6,'角度':7,"时间":13},
					{'测点名称':null,'沉降':2,'温度':6,'角度':7,"时间":null},
					{'测点名称':null,'沉降':2,'温度':6,'角度':7,"时间":null},
					{'测点名称':null,'沉降':2,'温度':6,'角度':7,"时间":null},
					{'测点名称':'CD05', '沉降':4,'温度':12,'角度':14,"时间":13},
					{'测点名称':'CD06', '沉降':4,'温度':12,'角度':14,"时间":13}
				];
				
				
        const wopts = { bookType: 'xlsx', bookSST: true, type: 'binary',cellStyles: true};//这里的数据是用来定义导出的格式类型 
        function downloadExl(data,data2,type) {
        	//多sheets应用
            var wb = { 
            	SheetNames: ['2018-10-01','2018-10-16'], 
            	Sheets: {
//          		 '2018-10-01': Object.assign({},data,{'A1':'E7'}),   
//          		 '2018-10-16':Object.assign({},data2,{'A1':'E7'})
            	},
            	Props: {} 
            };
            data = XLSX.utils.json_to_sheet(data); 
            data["!merges"] = [
                {s: {r: 1, c: 0}, e: {r: 4, c: 0}},
				{s: {r: 1, c: 4}, e: {r: 4, c: 4}},
            ];
            data['!cols'] = ([
            	{
            		wpx:200
            	},
            	{
            		wpx:200
            	}
            ]);
            
            wb.Sheets['2018-10-01'] = data;
            console.log(data);
          
            data2 = XLSX.utils.json_to_sheet(data2); 
            data2["!merges"] = [
                {s: {r: 1, c: 0}, e: {r: 4, c: 0}},
				{s: {r: 1, c: 4}, e: {r: 4, c: 4}},
            ];
            console.log(data2);
            wb.Sheets['2018-10-16'] = data2;
            
            //设置样式
            
			for(cell  in data){  
				if(cell != '!merges' && cell != '!ref') {
					console.log(data[cell]);
					data[cell].s = {
					  	font: {
				              name: '宋体',
				              sz: 14,
				              color: {rgb: "#00000000"},
				              bold: false,
				              italic: false,
				              underline: false
				        },
			            alignment: {
			              horizontal: "center" ,
			              vertical: "center"
			            },
			            fill: { bgColor: { indexed: 64 }}
			  		};   
				}
			}
			for(cell  in data2){   
			  if(cell != '!merges' && cell != '!ref') {
			  		console.log(data2[cell]);
					data2[cell].s = {
					  	font: {
				              name: '宋体',
				              sz: 14,
				              color: {rgb: "#00000000"},
				              bold: false,
				              italic: false,
				              underline: false
				        },
			            alignment: {
			              horizontal: "center" ,
			              vertical: "center"
			            },
			             fill: { bgColor: { indexed: 64 }}
			  		};   
				}
			}

            
            saveAs(
            	new Blob([s2ab(XLSX.write(wb, wopts))], { type: "application/octet-stream"}), 
            	"徐汇区地铁站测点数据" + '.' + (wopts.bookType == "biff2" ? "xls" : wopts.bookType)
            	);
        }
        //格式转化
        function s2ab(s) {
            if (typeof ArrayBuffer !== 'undefined') {
                var buf = new ArrayBuffer(s.length);
                var view = new Uint8Array(buf);
                for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
                return buf;
            } else {
                var buf = new Array(s.length);
                for (var i = 0; i != s.length; ++i) buf[i] = s.charCodeAt(i) & 0xFF;
                return buf;
            }
        }
    </script>
    <button onclick="downloadExl(testArray,testArray2)">导出</button>
</body>
</html>

运行结果:
在这里插入图片描述
表格样子
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值