1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > js前端导出excel:json形式的导出

js前端导出excel:json形式的导出

时间:2022-04-12 04:45:52

相关推荐

js前端导出excel:json形式的导出

第一中形式的导出:主要是表头对应主体数据,json形式的导出

js库文件名称 : table2excel.js

这个js库文件是网上找的,并且自己根据自己业务需求把内容改了一下

复制到 table2excel.js 文件中,作为自己的js库,就可以使用。记得先引入jq的库

/** jQuery table2excel - v1.1.1* jQuery plugin to export an .xls file in browser from an HTML table* /rainabba/jquery-table2excel** Made by rainabba* Under MIT License*//** jQuery table2excel - v1.1.1* jQuery plugin to export an .xls file in browser from an HTML table* /rainabba/jquery-table2excel** Made by rainabba* Under MIT License* * *把所有的样式移除了* 这里是以json的形式来导出excel的*///table2excel.js;(function ( $, window, document, undefined ) {var pluginName = "table2excel",defaults = {filename: "table2excel",//导出excel的名字fileext: ".xls",//导出excel的格式sheetName:"sheet",//sheet的名字// excludeFirst:false,//是否去除第一列,默认去不掉//excudeLast:false,//最后一列是否除去dataList:[],//数据,json数组 必填dataTitle:{}//表格的头 必填 };// The actual plugin constructorfunction Plugin ( element, options ) {this.element = element;// jQuery has an extend method which merges the contents of two or// more objects, storing the result in the first object. The first object// is generally empty as we don't want to alter the default options for// future instances of the plugin//extend把后俩个合并到第一个中this.settings = $.extend( {}, defaults, options );this._defaults = defaults;this._name = pluginName;this.init();}Plugin.prototype = {init: function () {var e = this;var utf8Heading = "<meta http-equiv=\"content-type\" content=\"application/vnd.ms-excel; charset=UTF-8\">";e.template = {head: "<html xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:x=\"urn:schemas-microsoft-com:office:excel\" xmlns=\"/TR/REC-html40\">" + utf8Heading + "<head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets>",sheet: {head: "<x:ExcelWorksheet><x:Name>",tail: "</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet>"},mid: "</x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body>",table: {head: "<table>",tail: "</table>"},foot: "</body></html>"};e.tableRows = [];if(e.settings.dataTitle.length < 0 || e.settings.dataTitle == ""){console.log("不可以没有title");return false;}var tempRowsTitle = "";//标题行tempRowsTitle += "<tr>";for(var key in e.settings.dataTitle){tempRowsTitle += "<td>" + e.settings.dataTitle[key] + "</td>";}tempRowsTitle += "</tr>";e.tableRows.push(tempRowsTitle);//循环数据行var listNum = e.settings.dataList.length;var list = e.settings.dataList;for(var i=0; i < Number(listNum); i++ ){var tempRows = "";tempRows += "<tr>";for(var key in e.settings.dataTitle){tempRows += "<td>" + (typeof(list[i][key]) == "undefined" ? "--" : list[i][key] == null ? "--" : list[i][key]) + "</td>";}tempRows += "</tr>";//每行都添加到里边e.tableRows.push(tempRows);}e.tableToExcel(e.tableRows, e.settings.name, e.settings.sheetName);},tableToExcel: function (table, name, sheetName) {var e = this, fullTemplate="", i, link, a;e.format = function (s, c) {return s.replace(/{(\w+)}/g, function (m, p) {return c[p];});};sheetName = typeof sheetName === "undefined" ? "Sheet" : sheetName;e.ctx = {// worksheet: name || "Worksheet",//这个字段无用table: table,sheetName: sheetName};fullTemplate= e.template.head;if ( $.isArray(table) ) {for (i in table) {//fullTemplate += e.template.sheet.head + "{" + e.ctx.worksheet + i + "}" + e.template.sheet.tail;fullTemplate += e.template.sheet.head + sheetName + i + e.template.sheet.tail;}}fullTemplate += e.template.mid;if ( $.isArray(table) ) {for (i in table) {fullTemplate += e.template.table.head + "{table" + i + "}" + e.template.table.tail;}}fullTemplate += e.template.foot;for (i in table) {e.ctx["table" + i] = table[i];}delete e.ctx.table;var isIE = /*@cc_on!@*/false || !!document.documentMode; // this works with IE10 and IE11 both :) //if (typeof msie !== "undefined" && msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./))// this works ONLY with IE 11!!!if (isIE) {if (typeof Blob !== "undefined") {//use blobs if we canfullTemplate = e.format(fullTemplate, e.ctx); // with this, works with IEfullTemplate = [fullTemplate];//convert to arrayvar blob1 = new Blob(fullTemplate, { type: "text/html" });window.navigator.msSaveBlob(blob1, getFileName(e.settings) );} else {//otherwise use the iframe and save//requires a blank iframe on page called txtArea1txtArea1.document.open("text/html", "replace");txtArea1.document.write(e.format(fullTemplate, e.ctx));txtArea1.document.close();txtArea1.focus();sa = txtArea1.document.execCommand("SaveAs", true, getFileName(e.settings) );}} else {var blob = new Blob([e.format(fullTemplate, e.ctx)], {type: "application/vnd.ms-excel"});window.URL = window.URL || window.webkitURL;link = window.URL.createObjectURL(blob);a = document.createElement("a");a.download = getFileName(e.settings);a.href = link;document.body.appendChild(a);a.click();document.body.removeChild(a);}return true;}};function getFileName(settings) {return ( settings.filename ? settings.filename : "table2excel" );}// Removes all img tagsfunction exclude_img(string) {var _patt = /(\s+alt\s*=\s*"([^"]*)"|\s+alt\s*=\s*'([^']*)')/i;return string.replace(/<img[^>]*>/gi, function myFunction(x){var res = _patt.exec(x);if (res !== null && res.length >=2) {return res[2];} else {return "";}});}// Removes all link tagsfunction exclude_links(string) {return string.replace(/<a[^>]*>|<\/a>/gi, "");}// Removes input paramsfunction exclude_inputs(string) {var _patt = /(\s+value\s*=\s*"([^"]*)"|\s+value\s*=\s*'([^']*)')/i;return string.replace(/<input[^>]*>|<\/input>/gi, function myFunction(x){var res = _patt.exec(x);if (res !== null && res.length >=2) {return res[2];} else {return "";}});}$.fn[ pluginName ] = function ( options ) {var e = this;e.each(function() {//console.log(options)if ( !$.data( e, "plugin_" + pluginName ) ) {$.data( e, "plugin_" + pluginName, new Plugin( this, options ) );}});// chain jQuery functionsreturn e;};})( jQuery, window, document );

根据自己的业务写的一个调用上边库的js工具

1025 这的settings是全局的变量,多个方法调用的导出的时候,会导致并发问题

下边会加一个再次修改的

建议:不要使用这个,使用下边的方法这个后边的一个方法

var App ={//导出配置的参数 settings : {//页数pageInt : 1,//每次限制10条limit : 10,//拿到的数据json进行封装到arr数组中 arr : []},//导出excel时候,把页面的数据分装到一个json数组中,主要针对导出数据时候分页多次查询,例如吧:每次查询10条数据,那么这里会循环很多次,每次获取10条数据,封装起来,然后自请求。。。直到把所有的数据拿到,然后执行导出exportExcel : function (url, excelTitleJson, excelName, data) {if(typeof(data) == "undefined" || data == null){console.log("查询条件为空");data = JSON.parse("{}");}//默认第一页开始导出data["page"] = App.settings.pageInt;$.getJSON(url, data, function(json){if(json.data.length <= 0){//没有查到数据,不导出if(App.settings.arr.length > 0){//table.exportFile([],App.settings.arr , 'xls'); //默认导出 csv,也可以为:xls//这里随意找个类就可以,暂时不会改,但是这样是可以使用的$(".layui-table-box").table2excel({//exclude: ".noExl",filename: excelName + new Date().toISOString().replace(/[\-\:\.]/g, ""),fileext: ".xls",sheetName: "sheet",// excludeFirst:true,// excudeLast:true,dataList:App.settings.arr,//这个是后台获取到的数据,针对对此分页获取数据dataTitle:excelTitleJson});//导出后这个页数,初始化page:App.settings.pageInt = 1;}}else{for(var i = 0;i<json.data.length;i++){App.settings.arr.push(json.data[i]);}App.settings.pageInt++;data["page"] = App.settings.pageInt;//有数据,就再次执行拿数据App.exportExcel(url, excelTitleJson, excelName, data);}});}}

调整后的代码,把并发的问题修改了。师兄帮助修改的。自己是没有发现的

var App ={//导出excel时候,把页面的数据分装到一个json数组中,然后使用layui的导出方法导出数据exportExcel : function (url, excelTitleJson, excelName, data, settings) {if(typeof(data) == "undefined" || data == null){console.log("查询条件为空");data = JSON.parse("{}");}if(! settings){settings = {//页数pageInt : 1,//每次限制10条limit : 10,//拿到的数据json进行封装到arr数组中arr : []}}data["page"] = settings.pageInt;$.getJSON(url, data, function(json){if(json.data.length <= 0){//没有查到数据,不导出if(settings.arr.length > 0){//table.exportFile([],settings.arr , 'xls'); //默认导出 csv,也可以为:xls $(".layui-table-box").table2excel({//exclude: ".noExl",filename: excelName + new Date().toISOString().replace(/[\-\:\.]/g, ""),fileext: ".xls",sheetName: "sheet",excludeFirst:true,excudeLast:true,dataList:settings.arr,dataTitle:excelTitleJson});//导出后这个页数,初始化page:settings.pageInt = 1;}}else{for(var i = 0;i<json.data.length;i++){settings.arr.push(json.data[i]);}settings.pageInt++;data["page"] = settings.pageInt;//有数据,就再次执行拿数据,回调App.exportExcel(url, excelTitleJson, excelName, data, settings);}});}}

最后就是使用了

App.exportExcel("/YunApps/com_momathink_crm_zkhq/customer/myCustomerList",

{"followStatus":"状态"}, //这里需要填写的是excel导出后的表头,key就是数据库查询出的json数据的每条数据的key,value就是表头,每个表头会对应上它的值

"客户信息",//导出excel的名字

{}//最后一个参数可填可不填

);

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。