2013-06-17 6 views
22

Ich muss die HTML-Tabelle in meiner Seite in ein Excel exportieren, wenn der Benutzer auf die Schaltfläche "Exportieren" klickt. Jetzt habe ich hier eine Lösung für den Stack-Overflow gefunden, der in Firefox funktioniert.Javascript, HTML-Tabelle nach Excel zu exportieren

Export dynamic html table to excel in javascript in firefox browser

Nun ist es nicht verarbeitet Sonderzeichen wie ö, ü, ö, die in Sprachen gemeinsam sind wir benutzen hier also wollte ich fragen, ob jemand weiß, wie ich sie erfolgreich und ohne Probleme exportieren ?

Hier ist mein Code:

function tabletoExcel(table, name) { 
    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]; }); }; 
     if (!table.nodeType) table = document.getElementById(table); 
     var ctx = { worksheet: name || 'Worksheet', table: table.innerHTML }; 
     window.location.href = uri + base64(format(template, ctx)); 

} 
+0

Mit dieser Methode können Sie nur das exportieren, was auf der Seite sichtbar ist. Geht es Ihnen mit diesem Ansatz gut? – Candide

+0

Ja. Das versuche ich zu tun. Manchmal gibt es Namen mit Sonderzeichen und sie werden nicht korrekt exportiert. Also, ich möchte wissen, welche Kodierung ich verwenden soll? – Tulips

+2

Es funktioniert nicht in IE .. – Nayeem

Antwort

37

Wenn Sie hinzufügen:

<meta http-equiv="content-type" content="text/plain; charset=UTF-8"/> 

im Kopf des Dokuments beginnt es wie erwartet funktioniert:

<script type="text/javascript"> 
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]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></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)) 
    } 
})() 
</script> 

Updated Fiddle Here.

+0

@seroth Sie erhalten diesen Fehler, weil Sie IE <10 verwenden. Http://caniuse.com/#search=btoa – Bakudan

+0

Dies funktioniert nicht für mich in IE 11. Wenn Sie auf die Schaltfläche Exportieren klicken, zeigt es nur, dass die Seite wartet. –

+6

"Das Dateiformat und die Erweiterung von download.xls stimmen nicht überein" Dies ist ein Problem, da die Endanwender dort nicht sehen wollen und auf Ja klicken. –

3

F oder UTF-8-Umwandlung und Währungssymbol Export verwenden:

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 version="1.0" encoding="UTF-8" standalone="yes"?><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)) 
    } 
})() 
+0

funktioniert für mich! Vielen Dank.. –

1

ShieldUI der export to excel Funktionalität sollte bereits alle Sonderzeichen unterstützen.

Verwandte Themen