layui复杂表头导出excel文件

layui支持复杂表头展示。但是其本身导出功能是不能导出复杂表头数据。

在网上有一篇导出excel文件的文章

传送门

这个文章写的是导出一个表格的方法。

其实拓展一下就可以对多个表格进行同时导出。

而layui表头和表格数据其实是分开来的两个表格。

 1 //转换方法
 2 function ChangeExport(content) {
 3     return window.btoa(unescape(encodeURIComponent(content)));
 4 }
 5 
 6 //导出带复杂头部
 7 //tableHead:复杂头部table信息
 8 //tableBody:数据表格信息
 9 //例子:ExportOfficeWithHead($(".layui-table-header table")[0], $(".layui-table-body table")[0]);
10 function ExportOfficeWithHead(tableHead, tableBody) {
11     var type = 'excel';
12     //var table = document.getElementById(tableID);
13     var excelContent = tableBody.innerHTML;
14     var excelHeadContent = tableHead.innerHTML;
15 
16     var excelFile = "<html xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:x='urn:schemas-microsoft-com:office:" + type + "' xmlns='http://www.w3.org/TR/REC-html40'>";
17     excelFile += "<head>";
18     excelFile += "<!--[if gte mso 9]>";
19     excelFile += "<xml>";
20     excelFile += "<x:ExcelWorkbook>";
21     excelFile += "<x:ExcelWorksheets>";
22     excelFile += "<x:ExcelWorksheet>";
23     excelFile += "<x:Name>";
24     excelFile += "{worksheet}";
25     excelFile += "</x:Name>";
26     excelFile += "<x:WorksheetOptions>";
27     excelFile += "<x:DisplayGridlines/>";
28     excelFile += "</x:WorksheetOptions>";
29     excelFile += "</x:ExcelWorksheet>";
30     excelFile += "</x:ExcelWorksheets>";
31     excelFile += "</x:ExcelWorkbook>";
32     excelFile += "</xml>";
33     excelFile += "<![endif]-->";
34     excelFile += "</head>";
35     excelFile += "<body>";
36     excelFile += "<table>";
37     excelFile += excelHeadContent;
38     excelFile += excelContent;
39     excelFile += "</table>";
40     excelFile += "</body>";
41     excelFile += "</html>";
42     var base64data = "base64," + ChangeExport(excelFile);
43     switch (type) {
44         case 'excel':
45             window.open('data:application/vnd.ms-' + type + ';' + base64data);
46             break;
47         case 'powerpoint':
48             window.open('data:application/vnd.ms-' + type + ';' + base64data);
49             break;
50     }
51 }

 新的处理方案:

入参为datatable的id,具体可以看元素中lay-id的值

 1 //导出带复杂头部
 2 //例子:ExportOfficeWithHead(obj.config.id);
3 function ExportOfficeWithHead(tableId) { 4 var content = $("div[lay-id='" + tableId + "'] .layui-table-box").html(); 5 6 var type = 'excel'; 7 //var table = document.getElementById(tableID); 8 //var excelContent = tableBody.innerHTML; 9 //var excelHeadContent = tableHead.innerHTML; 10 11 //var content = $("#" + obj.config.id); 12 13 14 var excelFile = "<html xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:x='urn:schemas-microsoft-com:office:" + type + "' xmlns='http://www.w3.org/TR/REC-html40'>"; 15 excelFile += "<head>"; 16 excelFile += "<!--[if gte mso 9]>"; 17 excelFile += "<xml>"; 18 excelFile += "<x:ExcelWorkbook>"; 19 excelFile += "<x:ExcelWorksheets>"; 20 excelFile += "<x:ExcelWorksheet>"; 21 excelFile += "<x:Name>"; 22 excelFile += "{worksheet}"; 23 excelFile += "</x:Name>"; 24 excelFile += "<x:WorksheetOptions>"; 25 excelFile += "<x:DisplayGridlines/>"; 26 excelFile += "</x:WorksheetOptions>"; 27 excelFile += "</x:ExcelWorksheet>"; 28 excelFile += "</x:ExcelWorksheets>"; 29 excelFile += "</x:ExcelWorkbook>"; 30 excelFile += "</xml>"; 31 excelFile += "<![endif]-->"; 32 excelFile += "</head>"; 33 excelFile += "<body>"; 34 excelFile += "<table>"; 35 excelFile += content; 36 //excelFile += excelHeadContent; 37 //excelFile += excelContent; 38 excelFile += "</table>"; 39 excelFile += "</body>"; 40 excelFile += "</html>"; 41 var base64data = "base64," + ChangeExport(excelFile); 42 switch (type) { 43 case 'excel': 44 window.open('data:application/vnd.ms-' + type + ';' + base64data); 45 break; 46 case 'powerpoint': 47 window.open('data:application/vnd.ms-' + type + ';' + base64data); 48 break; 49 } 50 }

打印方法:

//导出Layui数据表格
//导出数据为紧密型数据
function PrintLayDataTable() {
    var v = document.createElement("div");
    var f = ["<head>", "<style>", "body{font-size: 12px; color: #666;}",
        ".layui-table-cell {padding: 0px !important; text-align: center;}",
        ".layui-table td {padding: 0 !important; text-align: center;}",
        "th, td{padding: 0px !important;}",
        "table{width: 100%; border-collapse: collapse; border-spacing: 0;}",
        "th,td{line-height: 20px; padding: 9px 15px; border: 1px solid #ccc; text-align: left; font-size: 12px; color: #666;}",
        "a{color: #666; text-decoration:none;}", "*.layui-hide{display: none}", "</style>", "</head>"
    ].join("");

    //找到表格数据内容
    var tableBody = $(".layui-table-body").html();
    //找到表格标题内容
    var tableHead = $(".layui-table-header table").html();

    tableHead = StrReplaceAll(tableHead, "<th class=\"layui-table-patch\"><div class=\"layui-table-cell\" style=\"width: 17px;\"></div></th>", "");
    //添加打印时间
    //var nowTime = GetDataTime("yyyy-MM-dd", 'sub', 'day',0)
    //tableHead = tableHead.replace("申请信息", "申请信息</br>打印时间:" + nowTime);

    //将标题加入到数据内容中
    var insertArray = tableBody.split("<tbody>");
    var tmpBody = insertArray[0] + tableHead + "<tbody>" + insertArray[1];


    $(v).append(tmpBody);
    //$(v).find("tr").after($("[lay-id=\"" + tablelayid + "\"] .layui-table-body.layui-table-main table").html());


    //$(v).find("tr").after($(".layui-table-header table")[0].innerHTML);
    //$(v).find("tr").after($(".layui-table-body table")[0].innerHTML);


    //$(v).find("th.layui-table-patch").remove();
    //$(v).find(".layui-table-col-special").remove();

    var h = window.open("打印窗口", "_blank");
    //var printHtml = f + $(v).prop("outerHTML");
    var printHtml = f + $(v).prop("outerHTML");
    h.document.write(printHtml);
    h.document.close();
    h.print();
    h.close();
}

//导出Layui数据表格
//导出数据为紧密型数据
//例子: PrintLayDataTable(obj.config.id);
function PrintLayDataTable(tableId) {
    var v = document.createElement("div");
    var f = ["<head>", "<style>", "body{font-size: 12px; color: #666;}",
        ".layui-table-cell {padding: 0px !important; text-align: center;}",
        ".layui-table td {padding: 0 !important; text-align: center;}",
        "th, td{padding: 0px !important;}",
        "table{width: 100%; border-collapse: collapse; border-spacing: 0;}",
        "th,td{line-height: 20px; padding: 9px 15px; border: 1px solid #ccc; text-align: left; font-size: 12px; color: #666;}",
        "a{color: #666; text-decoration:none;}", "*.layui-hide{display: none}", "</style>", "</head>"
    ].join("");


    //var content = $("div[lay-id='" + tableId + "'] .layui-table-box").html();

    ////找到表格数据内容
    var tableBody = $("div[lay-id='" + tableId + "'] .layui-table-body").html();
    ////找到表格标题内容
    var tableHead = $("div[lay-id='" + tableId + "'] .layui-table-header table").html();

    tableHead = StrReplaceAll(tableHead, "<th class=\"layui-table-patch\"><div class=\"layui-table-cell\" style=\"width: 17px;\"></div></th>", "");
   //content = StrReplaceAll(content, "<th class=\"layui-table-patch\"><div class=\"layui-table-cell\" style=\"width: 17px;\"></div></th>", "");
    //添加打印时间
    //var nowTime = GetDataTime("yyyy-MM-dd", 'sub', 'day',0)
    //tableHead = tableHead.replace("申请信息", "申请信息</br>打印时间:" + nowTime);

    //将标题加入到数据内容中
    var insertArray = tableBody.split("<tbody>");
    var tmpBody = insertArray[0] + tableHead + "<tbody>" + insertArray[1];
   // var tmpBody =content;


    $(v).append(tmpBody);
    //$(v).find("tr").after($("[lay-id=\"" + tablelayid + "\"] .layui-table-body.layui-table-main table").html());


    //$(v).find("tr").after($(".layui-table-header table")[0].innerHTML);
    //$(v).find("tr").after($(".layui-table-body table")[0].innerHTML);


    //$(v).find("th.layui-table-patch").remove();
    //$(v).find(".layui-table-col-special").remove();

    var h = window.open("打印窗口", "_blank");
    //var printHtml = f + $(v).prop("outerHTML");
    var printHtml = f + $(v).prop("outerHTML");
    h.document.write(printHtml);
    h.document.close();
    h.print();
    h.close();
}
View Code

 

posted @ 2022-09-21 17:38  Stupid_Bire  阅读(1219)  评论(1编辑  收藏  举报