2013-06-17 17 views
22

Potrzebuję wyeksportować tabelę html na mojej stronie do programu Excel, gdy użytkownik kliknie przycisk "Eksportuj". Teraz znalazłem rozwiązanie tutaj na przepełnienie stosu, które działa w Firefoksie.Javascript do eksportu tabeli html do Excela

Export dynamic html table to excel in javascript in firefox browser

Teraz nie obsługuje znaków specjalnych, takich jak O, U, O, które są powszechne w językach używamy tu więc chciałem zapytać, czy ktoś wie jak mogę eksportować je z powodzeniem, jak również bez problemów ?

Oto mój kod:

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

Za pomocą tej metody można eksportować tylko to, co jest widoczne na stronie. Czy wszystko w porządku z tym podejściem? – Candide

+0

Tak. Właśnie to próbuję zrobić. Czasami pojawiają się nazwy ze znakami specjalnymi i nie są poprawnie eksportowane. Więc chcę wiedzieć, jakie kodowanie powinienem użyć? – Tulips

+2

To nie działa w IE .. – Nayeem

Odpowiedz

37

Jeśli dodać:

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

w nagłówku dokumentu zacznie pracować zgodnie z oczekiwaniami:

<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 Otrzymujesz ten błąd, ponieważ używasz IE <10. http://caniuse.com/#search=btoa – Bakudan

+0

To nie działa dla mnie w IE 11. Po kliknięciu przycisku Eksport po prostu pokazuje, że strona czeka. –

+6

"Format pliku i rozszerzenie pliku download.xls nie pasują" jest to problem, ponieważ użytkownicy końcowi nie chcą tego widzieć i kliknąli Tak ... –

3

F lub UTF-8 i konwersji walut Symbol Export Użyj tego: export to excel funkcjonalność

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

działa dla mnie! dzięki.. –

1

ShieldUI powinien już obsługiwać wszystkie znaki specjalne.