2015-04-16 3 views
0

Может ли кто-нибудь объяснить мне строку за строкой (или ссылку ссылку), чтобы помочь мне понять, как экспортировать несколько html-таблиц в excel?Javascript code explain - экспортировать несколько html-таблиц в excel

Мой первоначальный вопрос: Как вы экспортируете несколько таблиц, чтобы преуспеть в отдельные листы (но некоторые сгруппированы вместе)? Ex. Таблица A, B, C, D. Я хотел бы иметь A и B в 1 листе и C и D на другом листе и всех листах, упакованных вместе в 1 файл excel.

Я смотрел на другие вопросы о переполнении стека и нашел этот вопрос, похожий на мой вопрос («Как экспортировать несколько html-таблиц в excel?», Заданный dotnetN00b). Лучший ответ на этот вопрос написал это и HTML-код. У меня возникли проблемы с пониманием того, что делает каждая строка.

Если кто-то может объяснить это мне или перенаправить меня на сайт, чтобы помочь мне узнать, что мне нужно, чтобы понять это, что было бы очень полезно!

Источником кода Javascript и HTML: How do I export multiple html tables to excel?

Javscript код:

var tablesToExcel = (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>' 
    , templateend = '</x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head>' 
    , body = '<body>' 
    , tablevar = '<table>{table' 
    , tablevarend = '}</table>' 
    , bodyend = '</body></html>' 
    , worksheet = '<x:ExcelWorksheet><x:Name>' 
    , worksheetend = '</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet>' 
    , worksheetvar = '{worksheet' 
    , worksheetvarend = '}' 
    , base64 = function (s) { return window.btoa(unescape(encodeURIComponent(s))) } 
    , format = function (s, c) { return s.replace(/{(\w+)}/g, function (m, p) { return c[p]; }) } 
    , wstemplate = '' 
    , tabletemplate = ''; 

    return function (table, name, filename) { 
     var tables = table; 

     for (var i = 0; i < tables.length; ++i) { 
      wstemplate += worksheet + worksheetvar + i + worksheetvarend + worksheetend; 
      tabletemplate += tablevar + i + tablevarend; 
     } 

     var allTemplate = template + wstemplate + templateend; 
     var allWorksheet = body + tabletemplate + bodyend; 
     var allOfIt = allTemplate + allWorksheet; 

     var ctx = {}; 
     for (var j = 0; j < tables.length; ++j) { 
      ctx['worksheet' + j] = name[j]; 
     } 

     for (var k = 0; k < tables.length; ++k) { 
      var exceltable; 
      if (!tables[k].nodeType) exceltable = document.getElementById(tables[k]); 
      ctx['table' + k] = exceltable.innerHTML; 
     } 

     //document.getElementById("dlink").href = uri + base64(format(template, ctx)); 
     //document.getElementById("dlink").download = filename; 
     //document.getElementById("dlink").click(); 

     window.location.href = uri + base64(format(allOfIt, ctx)); 

    } 
})(); 

HTML-код:

<html> 
    <head> 
     <title>JS to Excel</title> 

    </head> 
    <body> 
     <table id="1"> 
      <tr><td>Hi</td></tr> 
      <tr><td>Hey</td></tr> 
      <tr><td>Hello</td></tr> 
     </table> 
     <table id="2"> 
      <tr><td>Night</td></tr> 
      <tr><td>Evening</td></tr> 
      <tr><td>Nite</td></tr> 
     </table> 

     <a id="dlink" style="display:none;"></a> 
     <input type="button" onclick="tablesToExcel(['1', '2'], ['first', 'second'], 'myfile.xls')" value="Export to Excel"> 
     <script src="~/Views/JS/JSExcel.js" type="text/javascript"></script> 
    </body> 
</html> 
+0

Чтобы разбить это с объяснением, вам нужно понять 'JavaScript'. Я добавил ваш код в [JsFiddle] (http://jsfiddle.net/Webby2014/4j32uhx4/), это должно помочь. –

ответ

0

По сути, это цикл через ваши HTML-таблиц и построение Excel, совместимого с XML, который представляет таблицы в формате, который может поддерживать Excel. Я посмотрел на исходный вопрос, а также просто посмотрел на код, поэтому он не совместим с кросс-браузером. Если вам повезет, он будет работать в FireFox и Chrome, но определенно не в IE.

Это довольно хорошее объяснение того, что он делает, если вам действительно нужно объяснение по очереди, полагаю, вам, вероятно, придется сначала наброситься на JavaScript, потому что основная часть того, что делает этот код, это установка переменных , «Сложная» часть - это перенаправление браузера на кодированную версию XML с кодировкой base64 и предполагает, что браузер убедится, что он открывает файл Excel. Это та часть, которая, по моему мнению, не будет перекрестным браузером.

Смежные вопросы