[JS] js-xlsx生成Excel(模拟下载)

  1. 导入js-xlsx的js文件
<script src="http://oss.sheetjs.com/js-xlsx/xlsx.full.min.js"></script>
  1. 添加模拟下载标签(不需要模拟下载不添加)
<a href="" id="h_href"></a>
  1. 工具类
	var xlsxUtil = {
		fileData:{}, //导出的二进制对象
		//data格式   [["A1数据","B1数据","C1数据"],["A2数据","B2数据","C2数据"]...]
		buildExcelDate:function(data){
			var excelData = {};
			data.forEach(function(value,i){
				i += 1;
				value.forEach(function(value01,j){
					excelData[xlsxUtil.createCellPos(j)+i] = {v:value01}
				});
			});
			return excelData;
		},
		//生成excel  type为下载文件后缀  json对象格式{A1:{v:"数据"},B1:{..}..}
		buildExcel:function(json, type) {
			if (typeof Object.assign != 'function') {
				  Object.assign = function(target) {
				    'use strict';
				    if (target == null) {
				      throw new TypeError('Cannot convert undefined or null to object');
				    }

				    target = Object(target);
				    for (var index = 1; index < arguments.length; index++) {
				      var source = arguments[index];
				      if (source != null) {
				        for (var key in source) {
				          if (Object.prototype.hasOwnProperty.call(source, key)) {
				            target[key] = source[key];
				          }
				        }
				      }
				    }
				    return target;
				  };
				}
			
			json = xlsxUtil.buildExcelDate(json);
			var outputPos = Object.keys(json);
			var fileJson = {
				SheetNames: ['mySheet'], //保存的表标题
				Sheets: {
					'mySheet': Object.assign(
						json, //内容
						{
							'!ref': outputPos[0] + ':' + outputPos[outputPos.length - 1] //设置填充区域
						})
				}
			};
			console.log(fileJson);
			//创建二进制对象写入转换好的字节流
			var fileData = new Blob([xlsxUtil.s2ab(XLSX.write(fileJson, 
				{bookType: (type == undefined ? 'xlsx':type),bookSST: false, type: 'binary'}//这里的数据是用来定义导出的格式类型
				))], {
				type: ""
			}); 
			return fileData;
		},
		isIE:function() { //ie?
			 if (!!window.ActiveXObject || "ActiveXObject" in window)
			  return true;
			  else
			  return false;
		},
		s2ab:function(s) { //字符串转字符流
			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;
		},
		//数字转excel列,  0-A
		createCellPos:function( n ){
			var ordA = 'A'.charCodeAt(0);
			var ordZ = 'Z'.charCodeAt(0);
			var len = ordZ - ordA + 1;
			var s = "";
			while( n >= 0 ) {
				s = String.fromCharCode(n % len + ordA) + s;
				n = Math.floor(n / len) - 1;
			}
			return s;
		},
		//模拟下载 a标签id,下载文件名称,Blob
		downloadExcel:function(aId,fileName,blob){
			var save_link = document.getElementById(aId);
			save_link.href = URL.createObjectURL(blob); //创建对象超链接
			save_link.download = fileName+".xlsx";
			save_link.click(); //模拟下载
			URL.revokeObjectURL(blob); //释放这个object URL}

		},
		//生成和模拟下载
		buildAndDownload:function(aId,fileName,json,type){
			var blob = xlsxUtil.buildExcel(json,type);
			if(xlsxUtil.isIE()){
				window.navigator.msSaveOrOpenBlob(blob,fileName+".xlsx");
				
			}else{
				xlsxUtil.downloadExcel(aId,fileName,blob);
			}
		}
	}
  1. 测试类
function test(){
	var testJson= [
		["A1","B1"],
		["A2","B2"],
	]
	xlsxUtil.buildAndDownload("h_href","test.xlsx",testJson);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值