js将jsp页面table导出为excel时设置文件名,非IE浏览器,可能没描述清楚,请看下代码

 var tableToExcel = (function() {
        var uri = 'data:application/vnd.ms-excel;base64,',
        template = '<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"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>{table}</table></body></html>',
          base64 = function(s) { return window.btoa(unescape(encodeURIComponent(s))) },
          format = function(s, c) {
              return s.replace(/{(\w+)}/g,
              function(m, p) { return c[p]; }) }

          return function(table, name) {
          if (!table.nodeType) table = document.getElementById(table)
          var ctx = {worksheet: name || 'Worksheet', table: table.innerHTML}
          window.location.href = uri + base64(format(template, ctx))
        }
      })()

ie浏览器不支持data协议,导不出excel文件的,需要回发服务器后输出。。文件名指定不了,除非你点击下载,设置a的download属性可以实现指定文件名


<table id="tb"><tr><td>1111</td></tr><tr><td>2222</td></tr><tr><td>333</td></tr><tr><td>444</td></tr></table>
<a href="" download="myexcel.xls" id="dl">下载xls</a>
<script>
    var tableToExcel = (function () {
        var uri = 'data:application/vnd.ms-excel;base64,',
        template = '<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"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>{table}</table></body></html>',
          base64 = function (s) { return window.btoa(unescape(encodeURIComponent(s))) },
          format = function (s, c) {
              return s.replace(/{(\w+)}/g,
              function (m, p) { return c[p]; })
          }

        return function (table, name) {
            if (!table.nodeType) table = document.getElementById(table)
            var ctx = { worksheet: name || 'Worksheet', table: table.innerHTML }
            return uri + base64(format(template, ctx))/////
            window.location.href = uri + base64(format(template, ctx))
        }
    })()
   dl.href= tableToExcel('tb','hello')
</script>

多谢,解决了燃眉之急,比随机生成的文件名好多了,谢谢大神