分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

html读写excle文档

发布时间:2023-09-06 02:10责任编辑:苏小强关键词:暂无标签

import

<!DOCTYPE html><html> ????<head> ???????????<meta charset="UTF-8"> ???????<title></title> ???????<script src="http://oss.sheetjs.com/js-xlsx/xlsx.full.min.js"></script> ???????????????????????<style> ???????????pre {outline: 1px solid #ccc; padding: 5px; margin: 5px; } ???????????.string { color: green; } ???????????.number { color: darkorange; } ???????????.boolean { color: blue; } ???????????.null { color: magenta; } ???????????.key { color: red; } ???????</style> ???????????</head> ???????<body> ???????????????????<input type="file"onchange="importf(this)" /> ???????<div id="demo"></div> ???????????????<pre id="result"> ???????</pre> ???????????<script> ???????/* ???????FileReader共有4种读取方法: ???????1.readAsArrayBuffer(file):将文件读取为ArrayBuffer。 ???????2.readAsBinaryString(file):将文件读取为二进制字符串 ???????3.readAsDataURL(file):将文件读取为Data URL ???????4.readAsText(file, [encoding]):将文件读取为文本,encoding缺省值为‘UTF-8‘ ????????????????????*/ ???????var wb;//读取完成的数据 ???????var rABS = false; //是否将文件读取为二进制字符串 ???????function importf(obj) {//导入 ???????????if(!obj.files) { ???????????????return; ???????????} ???????????var f = obj.files[0]; ???????????var reader = new FileReader(); ???????????reader.onload = function(e) { ???????????????var data = e.target.result; ???????????????if(rABS) { ???????????????????wb = XLSX.read(btoa(fixdata(data)), {//手动转化 ???????????????????????type: ‘base64‘ ???????????????????}); ???????????????} else { ???????????????????wb = XLSX.read(data, { ???????????????????????type: ‘binary‘ ???????????????????}); ???????????????} ???????????????//wb.SheetNames[0]是获取Sheets中第一个Sheet的名字 ???????????????//wb.Sheets[Sheet名]获取第一个Sheet的数据 ???????????????document.getElementById("result").innerHTML= syntaxHighlight(XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]])); ???????????????//document.getElementById("result").innerHTML= syntaxHighlight(JSON.stringify( XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]))); ???????????????????????????????????????????}; ???????????if(rABS) { ???????????????reader.readAsArrayBuffer(f); ???????????} else { ???????????????reader.readAsBinaryString(f); ???????????} ???????} ???????function fixdata(data) { //文件流转BinaryString ???????????var o = "", ???????????????l = 0, ???????????????w = 10240; ???????????for(; l < data.byteLength / w; ++l) o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w, l * w + w))); ???????????o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w))); ???????????return o; ???????} ???????????????????????function syntaxHighlight(json) { ???????????if (typeof json != ‘string‘) { ???????????????json = JSON.stringify(json, undefined, 2); ???????????} ???????????json = json.replace(/&/g, ‘&amp;‘).replace(/</g, ‘&lt;‘).replace(/>/g, ‘&gt;‘); ???????????return json.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g, function(match) { ???????????????var cls = ‘number‘; ???????????????if (/^"/.test(match)) { ???????????????????if (/:$/.test(match)) { ???????????????????????cls = ‘key‘; ???????????????????} else { ???????????????????????cls = ‘string‘; ???????????????????} ???????????????} else if (/true|false/.test(match)) { ???????????????????cls = ‘boolean‘; ???????????????} else if (/null/.test(match)) { ???????????????????cls = ‘null‘; ???????????????} ???????????????return ‘<span class="‘ + cls + ‘">‘ + match + ‘</span>‘; ???????????}); ???????} ????????</script> ???</body></html>

export

<!DOCTYPE html><html> <head> ???<meta charset="UTF-8"> ???<title></title> ???<script src="http://oss.sheetjs.com/js-xlsx/xlsx.full.min.js"></script></head> <body> ???<button onclick="downloadExl(jsono)">导出</button> ???<!-- ???????????以下a标签不需要内容 ???????--> ???<a href="" download="这里是下载的文件名.xlsx" id="hf"></a> ???<script> ???????var jsono = [{ //测试数据 ???????????"保质期临期预警(天)": "adventLifecycle", ???????????"商品标题": "title", ???????????"建议零售价": "defaultPrice", ???????????"高(cm)": "height", ???????????"商品描述": "Description", ???????????"保质期禁售(天)": "lockupLifecycle", ???????????"商品名称": "skuName", ???????????"商品简介": "brief", ???????????"宽(cm)": "width", ???????????"阿达": "asdz", ???????????"货号": "goodsNo", ???????????"商品条码": "skuNo", ???????????"商品品牌": "brand", ???????????"净容积(cm^3)": "netVolume", ???????????"是否保质期管理": "isShelfLifeMgmt", ???????????"是否串号管理": "isSNMgmt", ???????????"商品颜色": "color", ???????????"尺码": "size", ???????????"是否批次管理": "isBatchMgmt", ???????????"商品编号": "skuCode", ???????????"商品简称": "shortName", ???????????"毛重(g)": "grossWeight", ???????????"长(cm)": "length", ???????????"英文名称": "englishName", ???????????"净重(g)": "netWeight", ???????????"商品分类": "categoryId", ???????????"这里超过了": 1111.0, ???????????"保质期(天)": "expDate" ???????}]; ???????var tmpDown; //导出的二进制对象 ???????function downloadExl(json, type) { ???????????var tmpdata = json[0]; ???????????json.unshift({}); ???????????var keyMap = []; //获取keys ???????????for (var k in tmpdata) { ???????????????keyMap.push(k); ???????????????json[0][k] = k; ???????????} ?????????var tmpdata = [];//用来保存转换好的json ????????????????json.map((v, i) => keyMap.map((k, j) => Object.assign({}, { ???????????????????v: v[k], ???????????????????position: (j > 25 ? getCharCol(j) : String.fromCharCode(65 + j)) + (i + 1) ???????????????}))).reduce((prev, next) => prev.concat(next)).forEach((v, i) => tmpdata[v.position] = { ???????????????????v: v.v ???????????????}); ???????????????var outputPos = Object.keys(tmpdata); //设置区域,比如表格从A1到D10 ???????????????var tmpWB = { ???????????????????SheetNames: [‘mySheet‘], //保存的表标题 ???????????????????Sheets: { ???????????????????????‘mySheet‘: Object.assign({}, ???????????????????????????tmpdata, //内容 ???????????????????????????{ ???????????????????????????????‘!ref‘: outputPos[0] + ‘:‘ + outputPos[outputPos.length - 1] //设置填充区域 ???????????????????????????}) ???????????????????} ???????????????}; ???????????????tmpDown = new Blob([s2ab(XLSX.write(tmpWB, ????????????????????{bookType: (type == undefined ? ‘xlsx‘:type),bookSST: false, type: ‘binary‘}//这里的数据是用来定义导出的格式类型 ???????????????????))], { ???????????????????type: "" ???????????????}); //创建二进制对象写入转换好的字节流 ???????????var href = URL.createObjectURL(tmpDown); //创建对象超链接 ???????????document.getElementById("hf").href = href; //绑定a标签 ???????????document.getElementById("hf").click(); //模拟点击实现下载 ???????????setTimeout(function() { //延时释放 ???????????????URL.revokeObjectURL(tmpDown); //用URL.revokeObjectURL()来释放这个object URL ???????????}, 100); ???????} ????????function s2ab(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; ???????} ????????// 将指定的自然数转换为26进制表示。映射关系:[0-25] -> [A-Z]。 ???????function getCharCol(n) { ???????????let temCol = ‘‘, ???????????s = ‘‘, ???????????m = 0 ???????????while (n > 0) { ???????????????m = n % 26 + 1 ???????????????s = String.fromCharCode(m + 64) + s ???????????????n = (n - m) / 26 ???????????} ???????????return s ???????} ???</script></body> </html>

参考

https://blog.csdn.net/weixin_36185028/article/details/78685844

html读写excle文档

原文地址:https://www.cnblogs.com/dong1/p/9482062.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved