函数说明:
var xlsxutils = { binary: { fixdata(data) { //文件流转binarystring //...... }, s2ab(s) { //字符串转字符流 //...... } }, _wb: null,//缓存导入时的workbook _rabs: false,//设置读取方式 /** * @desc 导入根据文件 * @param {file} f 文件 * @param {function} c 回调 * @return {object} 回调值 */ import(f, c) { //...... }, /** * @desc 根据表sheet名获取数据 * @param {string} name * @return {object} */ getsheetbyname(name) {// //...... }, /** * @desc 根据表sheet索引获取数据 * @param {number} index * @return {object} */ getsheetbyindex(index = 0) { //...... }, /** * @desc 导出 * @param {array} data 数据{title1:datalist,title2:datalist....} * @param {string} type * @return {blob} */ export(data, type) { //...... }, /** * 从数据数组或对象中根据key生成相同key值的对象 * @param {object|array} data * @return {object} */ readdatahead(data) { //...... }, /** * @desc 格式化数据为sheet格式 * @param {array} json 数据 */ format2sheet(json, n) { //...... }, /** * @desc 格式化数据为sheet格式 * @param {array} sheetdata * @param {string} title * @param {object} wb */ format2wb(sheetdata, title = mysheet, wb) { //...... }, /** * @desc 将xlsx workbook 转为blob * @param {array} wb * @param {string} type 类型 */ format2blob(wb, type) { //...... }, /** * @desc 匹配单元格对应的标识 * @param {number} n */ getcharcol(n) { //...... }, };
示例:
导入示例(在线示例):
<!doctype html><html><head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="x-ua-compatible" content="ie=edge"> <script src="http://oss.sheetjs.com/js-xlsx/xlsx.core.min.js"></script> <script src="./xlsx.utils.js"></script></head><body> <input type="file" id="demo" /> <div id="loadinfo"></div> <div> <div> <label>sheetnames</label>: <span id="sheetnames"></span> </div> <div> <label id="demoname"></label>(示例): <span id="demodata"></span> </div> </div> <script> var demo = document.getelementbyid(demo); demo.onchange = function () { let f = this.files[0]; let loadinfo = document.getelementbyid(loadinfo); let demoname = document.getelementbyid(demoname); let demodata = document.getelementbyid(demodata); loadinfo.innerhtml = 正在读取请骚等; demoname.innerhtml = ; demodata.innerhtml = ; xlsxutils.import(f, (w) => { document.getelementbyid(sheetnames).innerhtml = json.stringify(w.sheetnames); demoname.innerhtml = w.sheetnames[0]; demodata.innerhtml = json.stringify(xlsxutils.getsheetbyindex(0)); loadinfo.innerhtml = 读取完成; }); }; </script></body></html>
导出示例(在线示例)
<!doctype html><html><head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="x-ua-compatible" content="ie=edge"> <title>demo</title> <script src="http://oss.sheetjs.com/js-xlsx/xlsx.core.min.js"></script> <script src="xlsx.utils.min.js"></script> <script src="saveas.min.js"> </script></head><body> <script> var data = [{ 主页: 111, 名称: 6800, 数量: 6800, 昵称: 广告主网 }, { 主页: 433, 名称: 6800, 数量: 6800, 昵称: 广告主网 }, { 名称: 22, 商家: 6800, 数量: 6800, 昵称: 广告主网, }, { 名称: 43, 商家: 6800, 数量: 6800, 昵称: 广告主网, }, { 店家: 43, 价格: 6800, 数量: 6800, 昵称: 广告主网, }]; </script> <button id="down">导出</button> <script> var down = document.getelementbyid(down); down.onclick = function () { data.unshift(xlsxutils.readdatahead(data)); var blob = xlsxutils.export({ sheet1: data, sheet2: [{ a: a, b: b }, { a: 1, b: 2 }, { a: 3, b: 4 }, { a: 5, b: 6 }] }); saveas(url.createobjecturl(blob), aa.xlsx); }; </script></body></html>
自定义起始列导出示例(在线示例)
<!doctype html><html><head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="x-ua-compatible" content="ie=edge"> <title>demo</title> <script src="http://oss.sheetjs.com/js-xlsx/xlsx.core.min.js"></script> <script src="xlsx.utils.min.js"></script> <script src="saveas.min.js"> </script></head><body> <script> var data = [{ 主页: 111, 名称: 6800, 数量: 6800, 昵称: 广告主网 }, { 主页: 433, 名称: 6800, 数量: 6800, 昵称: 广告主网 }, { 名称: 22, 商家: 6800, 数量: 6800, 昵称: 广告主网, }, { 名称: 43, 商家: 6800, 数量: 6800, 昵称: 广告主网, }, { 店家: 43, 价格: 6800, 数量: 6800, 昵称: 广告主网, }]; </script> <button id="down">导出</button> <script> var down = document.getelementbyid(down); down.onclick = function () { data.unshift(xlsxutils.readdatahead(data)); var tmpdata = xlsxutils.format2sheet(data, 2); var tmpwb = xlsxutils.format2wb(tmpdata, sheet1); tmpdata = xlsxutils.format2sheet([{ a: a, b: b }, { a: 1, b: 2 }, { a: 3, b: 4 }, { a: 5, b: 6 }], 4); tmpwb = xlsxutils.format2wb(tmpdata, sheet2, tmpwb); var blob = xlsxutils.format2blob(tmpwb); saveas(url.createobjecturl(blob), aa.xlsx); }; </script></body></html>
多数据合并导出到单表示例(在线示例)
<!doctype html><html><head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="x-ua-compatible" content="ie=edge"> <title>demo</title> <script src="http://oss.sheetjs.com/js-xlsx/xlsx.core.min.js"></script> <script src="xlsx.utils.min.js"></script> <script src="saveas.min.js"> </script></head><body> <script> var data = [{ 主页: 111, 名称: 6800, 数量: 6800, 昵称: 广告主网 }, { 主页: 433, 名称: 6800, 数量: 6800, 昵称: 广告主网 }, { 名称: 22, 商家: 6800, 数量: 6800, 昵称: 广告主网, }, { 名称: 43, 商家: 6800, 数量: 6800, 昵称: 广告主网, }, { 店家: 43, 价格: 6800, 数量: 6800, 昵称: 广告主网, }]; </script> <button id="down">导出</button> <script> var down = document.getelementbyid(down); down.onclick = function () { var d1 = xlsxutils.format2sheet([{ a: a, b: b }, { a: 1, b: 2 }, { a: 3, b: 4 }, { a: 5, b: 6 }]); var h=xlsxutils.readdatahead(data);//读取data的列头数据 data.unshift(h);//将列头追加到最data的前 var em={};//用于换行 object.keys(h).foreach((v)=>{ em[v]=; }); for(var i=0;i<5;i++){//换5行 data.unshift(em); } var d2 = xlsxutils.format2sheet(data, 3);//3代表从d列开始 d1=object.assign(d1,d2); var tmpwb = xlsxutils.format2wb(d1, sheet1); var blob = xlsxutils.format2blob(tmpwb); saveas(url.createobjecturl(blob), aa.xlsx); }; </script></body></html>
相信看了本文案例你已经掌握了方法,更多精彩请关注其它相关文章!
相关阅读:
如何使用canvas来制作好用的涂鸦画板
如何使用s-xlsx实现excel 文件导入和导出(下)
以上就是js-xlsx的工具类库xlsxutils的使用详解的详细内容。
