2013-04-10 40 views
0

我需要將表格的數據導出到Excel。我得到了如下的解決方案:如何確定是否使用jquery在系統上安裝了Microsoft Excel或Open Office

http://jsfiddle.net/jquerybyexample/xhYcD/

在上面的例子中,它可以讓你產生xls文件時,安裝在系統上的Microsoft Excel,但我有我的系統上安裝了OpenOffice的,所以當我加入線

window.open('data:application/vnd.oasis.opendocument.spreadsheet,' + $('#dvData').html()); 

代替

window.open('data:application/vnd.ms-excel,' + $('#dvData').html()); 

然後它產生的.ods文件。

我需要確定是否安裝了Excel或Open Office,以便可以使用jQuery或Javascript爲上述兩行添加條件。

編輯:

我可以把背靠背的兩個條件,是一種傷害?

$("#btnExport").click(function(e) { 
    window.open('data:application/vnd.oasis.opendocument.spreadsheet,' + $('#dvData').html()); 
    window.open('data:application/vnd.ms-excel,' + $('#dvData').html()); 
    e.preventDefault(); 
}); 

ANOTHER編輯: 剛試過在IE8這個解決方案,這是行不通的。對於這個解決方案或此任何其他替代方案可以修復在IE上工作?

+0

你不能。這些信息不適用於JavaScript。 – JJJ 2013-04-10 06:07:24

+2

你最好的選擇可能是問用戶他喜歡哪種格式,我也不認爲這是跨瀏覽器的方式 – hexblot 2013-04-10 06:09:33

+0

我認爲這不可能用JavaScript。如果您不確定用戶正在運行什麼,請爲不同應用程序的文件添加選項。 – 2013-04-10 06:15:58

回答

0

據我所知存在一個模糊的方式, 可以檢查現有的MIME類型,以確保存在

例如:辦公 應用程序/ x-MSOFFICE

function GetMimeTypes() { 
       var message = ""; 
        // Internet Explorer supports the mimeTypes collection, but it is always empty 
       if (navigator.mimeTypes && navigator.mimeTypes.length > 0) { 
        var mimes = navigator.mimeTypes; 
        for (var i=0; i < mimes.length; i++) { 
         message += "<b>" + mimes[i].type + "</b> : " + mimes[i].description + "<br />"; 
        } 
       } 
       else { 
        message = "Your browser does not support this "; 
        //sorry! 
       } 

       return (message); 
      } 
0

我發佈的問題,我是你的預期answer.hope這個幫助你。 Export HTML Table to EXCEL in Java script

function downloadsalesreport() { 

      var cache = {}; 

      this.tmpl = function tmpl(str, data) { 
       // Figure out if we're getting a template, or if we need to 
       // load the template - and be sure to cache the result. 
       var fn = !/\W/.test(str) ? 
        cache[str] = cache[str] || 
        tmpl(document.getElementById(str).innerHTML) : 

        // Generate a reusable function that will serve as a template 
        // generator (and which will be cached). 
        new Function("obj", 
        "var p=[],print=function(){p.push.apply(p,arguments);};" + 

        // Introduce the data as local variables using with(){} 
        "with(obj){p.push('" + 

        // Convert the template into pure JavaScript 
        str.replace(/[\r\t\n]/g, " ") 
          .split("{{").join("\t") 
          .replace(/((^|}})[^\t]*)'/g, "$1\r") 
          .replace(/\t=(.*?)}}/g, "',$1,'") 
          .split("\t").join("');") 
          .split("}}").join("p.push('") 
          .split("\r").join("\\'") 
          + "');}return p.join('');"); 

       // Provide some basic currying to the user 
       return data ? fn(data) : fn; 
      }; 
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>{{for(var i=0; i<tables.length;i++){ }}<table>{{=tables[i]}}</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 (tableList, name) { 
        if (!tableList.length > 0 && !tableList[0].nodeType) table = document.getElementById("#tablesalesentry") 
        var tables = []; 
        for (var i = 0; i < tableList.length; i++) { tables.push(tableList[i].innerHTML); } 
        var ctx = { worksheet: name || 'Worksheet', tables: tables }; 
        window.location.href = uri + base64(tmpl(template, ctx)) 
       } 
      })(); 

      tableToExcel(document.getElementsByTagName("table"), "one"); 

     } 
+0

如果您可以在這裏總結,您鏈接到的問題部分真的很棒這個問題。否則,目前這還沒有真正回答原來的問題。 – DB5 2013-11-08 12:50:11

+0

@ DB5:謝謝你的忠告... – 2013-11-09 05:37:37

相關問題