首页 前端知识 实现带HTML页面样式的Excel导出

实现带HTML页面样式的Excel导出

2024-04-29 12:04:34 前端知识 前端哥 854 87 我要收藏

问 题 背 景

遇到一个项目,要实现结果导出Excel文件,不仅要导出指定格式的Excel文件还要导出和页面显示效果一样有条件规则的颜色样式等。通过js实现指定页面区域并可实现带if条件结果的样式导出Excel。

  1. 设置导出操作按钮并指定事件

<button id="export" style="display:none;background-color:#6293BB;height:35px" type="button" onclick="tableToExcel('testId','(Excel文件名)')">导出</button>
  1. 编写导出函数及导出属性设置

<script>
    function base64 (content) {
       return window.btoa(unescape(encodeURIComponent(content)));         
    }
    /*
    *@tableID: table标签的Id
    */
    function tableToExcel(tableID,fileName){
      var ofMonth=$("#ofMonth").val().replace("-", "年")+"月";
      var table = document.getElementById(tableID);
      var excelContent = table.innerHTML;
      var excelFile = "<html xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:x='urn:schemas-microsoft-com:office:excel' xmlns='http://www.w3.org/TR/REC-html40'>";
      excelFile += "<head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>("+ofMonth(传入参数)+")@fileName: 要生成excel文件的名字(不包括后缀,可随意填写)</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head>";
      excelFile += "<body><table border='1'>";
      excelFile += excelContent;
      excelFile += "</table></body>";
      excelFile += "</html>";
      var link = "data:application/vnd.ms-excel;base64," + base64(excelFile);
      var a = document.createElement("a");
      a.download =ofMonth+fileName+".xls";
      a.href = link;
      a.click();
    }
 </script>

3、table代码

<table id="testId" border="1" style="width:1500;border-color:black;border-collapse:collapse;">
   <tr style="height:25;font-weight:bold;font-size:20">
       <th colspan=14>导出表<span id="dtMonth"></span></th>
   </tr>
                     <tr style="height:25;font-weight:bold;font-size:20">
                      <th colspan=14>测试标题</th>
                     </tr>
                     <tr style="font-weight:bold;background-color:#dcdcdc">
                      <th rowspan=2 style="width:50">序号</th>
                      <th rowspan=2 style="width:250">测试标题</th>
                      <th style="width:100">测试标题</th>
                      <th colspan=3 style="width:300">测试标题</th>
                      <th colspan=8 style="width:800">测试标题</th>
                     </tr>
                     <tr style="font-weight:bold;background-color:#dcdcdc">
                      <th style="width:100">测试标题</th>
                      <th style="width:100">测试标题</th>
                      <th colspan=2 style="width:200">测试标题</th>
                      <th style="width:100">测试标题</th>
                      <th style="width:100">测试标题</th>
                      <th colspan=2 style="width:200">测试标题</th>
                      <th colspan=2 style="width:200">测试标题</th>
                      <th style="width:100">测试标题</th>
                      <th style="width:100">测试标题</th>
                     </tr>
                
              <tbody id="content1">
              </tbody>
    </table>

4、数据部分条件样式部分代码

 html+="<tr style='text-align:center;'>"+"<td>"+index+"</td>"+"<td>"+item.testdata+"</td>"
                   if (item.testdata!=0){if(item.testdata>=cuslog.avgitem.testdata){
                    html+="<td  style='background-color: blue;'>"+item.testdata.toFixed(4)+"</td>"
                   }else if(item.testdata>=cusloy.avgitem.testdata){
                     html+="<td style='background-color: yellow;'>"+item.testdata.toFixed(4)+"</td>"
                   }else{
                    html+="<td style='background-color: green;'>"+item.testdata.toFixed(4)+"</td>"
                   }}else{
                     html+="<td style='background-color: red;'>"+item.testdata.toFixed(4)+"</td>"}
转载请注明出处或者链接地址:https://www.qianduange.cn//article/6423.html
标签
评论
发布的文章

JQuery中的load()、$

2024-05-10 08:05:15

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!