2013-03-05 6 views
12


Próbuję przekonwertować tabele HTML na Excel, próbowałem z funkcją JavaScript, która konwertuje prosty stół do Excela, działa dobrze. Jeśli mam wiele tabel, jak będę mógł dodać wszystkie dane tabeli do pliku Excel. oto co próbowałem. Stworzyłem 2 tabele i podano indeks tabeli testTable i testTable1.JavaScript - eksport danych tabeli HTML do Excela

W jaki sposób przekażę te 2 identyfikatory tabel do funkcji JavaScript po kliknięciu przycisku? teraz po kliknięciu przycisku tylko pierwsza tabela jest eksportowana do Excela, gdy przechodzę tylko 'testTable'. w jaki sposób mogę eksportować wiele tabel, np .: testTable, testTable1 do programu Excel?

Oto JavaScript:

<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} 
window.location.href = uri + base64(format(template, ctx)) 
} 
})() 

</script> 

Oto część HTML,

<table id="testTable"> 
    <thead> 
     <tr> 
      <th>Name</th> 
      <th>ACP</th> 
      <th>OEMCP</th> 
      <th>Unix<br> 
       NT 3.1</th> 
      <th>Unix<br> 
       NT 3.51</th> 
      <th>Unix<br> 
       95</th> 
     </tr> 
    </thead> 
</table> 
<table id="testTable1"> 
    <thead> 
     <tr> 
      <th>Name</th> 
      <th>ACP</th> 
      <th>OEMCP</th> 
      <th>Windows<br> 
       NT 3.1</th> 
      <th>Windows<br> 
       NT 3.51</th> 
      <th>Windows<br> 
       95</th> 
     </tr> 
    </thead> 
</table> 

Proszę dać mi znać, jak można to zrobić?
Dzięki

+0

Nie możesz korzystać z usługi internetowej dla tego problemu. Będzie również działać bez odświeżenia. – osmanraifgunes

Odpowiedz

9

polecam inną metodę Format. mikro-szablon John Resig to bardzo dobre i proste narzędzie do robienia tego, czego potrzebujesz. (ejohn microtemplating)

(function(){ 
    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; 
    }; 
})(); 

Jest bardzo prosty w użyciu. Pozwala to nie tylko wyświetlać zmienne między HTML, ale także wykonywać kod JavaScript:

Twój ciąg szablonów wymaga trochę modyfikacji do pracy z tą płytką mikrotemplacji.

{{for(var i=0; i<tables.length;i++){ }} 
    <table> 
     {{=tables[i]}} 
    </table> 
{{ } }} 

wreszcie wystarczy wybrać wszystkie tabele, które pojawiają się w Twojej przykład

document.getElementsByTagName("table"); 

można zobaczyć, jak to działa http://jsfiddle.net/Scipion/P8rpn/1/

+0

Dziękuję tonę Scipion! Chciałem tylko wiedzieć, czy mogę wykonać tę funkcję po kliknięciu przycisku html ... Próbowałem z tym , ale to nie działa .... Jak działa jsFiddle? Jeśli zaimplementuję to samo w html, nie jestem w stanie pobrać pliku po kliknięciu przycisku. Uprzejmie daj mi znać, jeśli to możliwe. – shockwave

+1

spróbuj Pobierz i dodaj zdarzenie kliknięcia.function download() { tableToExcel (document.getElementsByTagName ("table"), "one"); } var btn = document.getElementById ("btn"); btn.addEventListener ("kliknij", pobierz); http://jsfiddle.net/Scipion/P8rpn/3/ – Scipion

+0

Wielkie dzięki! To działało jak czar! :) – shockwave

0

utworzyć funkcję i przekazać tableid niej

function passing_id_to_excel(tableID){ 
    var myTableid = 
document.getElementById(tableID) //remaining code } 
+0

Jak mogę przekazać wiele tableID? – shockwave

0
  1. Dodaj pole wyboru dla każdej tabeli. Użyj javascript do przetworzenia tych, które są sprawdzone.
  2. W przypadku, gdy chcesz przekonwertować każdy stół, możesz użyć $('table').each(function() { do something }).