How to export html table to excel using javascript -


my table in format

<table id="mytable"> <thead>   <tr>     <th>name</th>     <th>place</th>   </tr> </thead> <tbody> <tr>    <td>adfas</td>    <td>asdfasf</td> </tr> </tbody> </table> 

i found following code online. doesn't work if use "thead" , "tbody" tags

function write_to_excel() {      str = "";      var mytable = document.getelementsbytagname("table")[0];     var rowcount = mytable.rows.length;     var colcount = mytable.getelementsbytagname("tr")[0].getelementsbytagname("td").length;      var excelapp = new activexobject("excel.application");     var excelsheet = new activexobject("excel.sheet");     excelsheet.application.visible = true;      (var = 0; < rowcount; i++) {         (var j = 0; j < colcount; j++) {             str = mytable.getelementsbytagname("tr")[i].getelementsbytagname("td")[j].innerhtml;             excelsheet.activesheet.cells(i + 1, j + 1).value = str;         }     } 

the reason solution found on internet no working because of line starts var colcount. variable mytable has 2 elements being <thead> , <tbody>. var colcount line looking elements within mytable <tr>. best thing can give id <thead> , <tbody> , grab values based on that. had <thead id='headers'> :

function write_headers_to_excel()  {   str="";    var mytablehead = document.getelementbyid('headers');   var rowcount = mytablehead.rows.length;   var colcount = mytablehead.getelementsbytagname("tr")[0].getelementsbytagname("th").length;   var excelapp = new activexobject("excel.application"); var excelsheet = new activexobject("excel.sheet"); excelsheet.application.visible = true;  for(var i=0; i<rowcount; i++)  {        for(var j=0; j<colcount; j++)      {                    str= mytablehead.getelementsbytagname("tr")[i].getelementsbytagname("th")[j].innerhtml;         excelsheet.activesheet.cells(i+1,j+1).value = str;     } }  } 

and same thing <tbody> tag.

edit: highly recommend using jquery. shorten to:

function write_to_excel()  {  var excelapp = new activexobject("excel.application");  var excelsheet = new activexobject("excel.sheet");  excelsheet.application.visible = true;     $('th, td').each(function(i){     excelsheet.activesheet.cells(i+1,i+1).value = this.innerhtml;   }); } 

now, of course, going give formatting issues can work out how want formatted in excel.

edit: answer question how n number of tables, jquery already. in raw javascript, grab tables , alter function able pass in table parameter. instance:

var tables = document.getelementsbytagname('table'); for(var = 0; < tables.length; i++) {   write_headers_to_excel(tables[i]);   write_bodies_to_excel(tables[i]); } 

then change function write_headers_to_excel() function write_headers_to_excel(table). change var mytablehead = document.getelementbyid('headers'); var mytablehead = table.getelementsbytagname('thead')[0];. same write_bodies_to_excel() or want set up.


Comments

Popular posts from this blog

c++ - Is it possible to compile a VST on linux? -

java - Output of Eclipse is rubbish -

jquery - Confused with JSON data and normal data in Django ajax request -