2013-03-05 3 views
12


Я пытаюсь преобразовать таблицы HTML в Excel, я попытался использовать функцию JavaScript, которая преобразует простую таблицу в Excel, она работает нормально. Если у меня несколько таблиц, как я могу добавить все данные таблицы в файл Excel. вот что я пробовал. Я создал 2 таблицы и дал индекс таблицы testTable и testTable1.JavaScript - экспорт данных таблицы HTML в Excel

Как передать эти 2 идентификатора таблицы функции JavaScript при нажатии кнопки? прямо сейчас при нажатии кнопки только первая таблица экспортируется в Excel, поскольку я пропускаю только 'testTable'. как я могу экспортировать несколько таблиц, например: testTable, testTable1 в Excel?

Вот 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> 

Вот 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> 

Пожалуйста, дайте мне знать, как это можно сделать?
Благодаря

+0

Не можете использовать веб-службы для этой проблемы. Он также будет работать без обратной передачи. – osmanraifgunes

ответ

9

Я рекомендую другой метод форматирования. микро-шаблон John Resig - очень хороший и простой инструмент для того, чтобы делать то, что вам нужно. (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; 
    }; 
})(); 

Он очень прост в использовании. Это позволяет не только отображать переменные между HTML, но также выполнять код JavaScript.

Строка шаблона нуждается в некоторой модификации для работы с этой микрометрической таблицей.

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

наконец нужно только выбрать все таблицы, которые появляются в вашем примере

document.getElementsByTagName("table"); 

вы можете увидеть, как это работает http://jsfiddle.net/Scipion/P8rpn/1/

+0

Спасибо, тонна Scipion! Я просто хотел знать, могу ли я сделать эту функциональность при нажатии кнопки html ... Я попытался с помощью этой кнопки , но это не работает ... Как это работает на jsFiddle? Если я реализую то же самое в html, я не могу получить файл нажатием кнопки. Пожалуйста, дайте мне знать, если это возможно. – shockwave

+1

попробуйте и добавить это событие click.function загрузить() { tableToExcel (document.getElementsByTagName ("table"), "one"); } var btn = document.getElementById ("btn"); btn.addEventListener ("click", download); http://jsfiddle.net/Scipion/P8rpn/3/ – Scipion

+0

Большое спасибо! Это работало как прелесть! :) – shockwave

0

создать функцию и передать TABLEID к нему

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

Как передать несколько табличных идентификаторов? – shockwave

0
  1. Добавьте флажок для каждой таблицы. Используйте javascript для обработки проверенных.
  2. Если вы хотите конвертировать каждый стол, вы можете использовать $('table').each(function() { do something }).
Смежные вопросы