有人可以逐行向我解释(或引用链接),以帮助我了解如何将多个html表格导出为Excel吗?
我原来的问题是:如何将多个表格导出到单独的工作表中(但有些工作表组合在一起)?防爆。表A,B,C,D。我想在一个工作表中使用A和B,在另一个工作表中使用C和D,并将所有工作表打包在一个excel文件中。
我正在查看Stack Overflow上的其他问题,发现这个问题与我的问题类似("如何将多个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 :(得分:0)
基本上,它是循环遍历HTML表格并构建Excel兼容的XML,它以Excel可以支持的格式表示表格。我查看了原始问题并且只看了代码,这是跨浏览器兼容的。如果你很幸运,它可以在FireFox和Chrome中使用,但绝对不是IE。
这是一个很好的解释它正在做什么,如果你真的需要一个逐行解释,我猜你可能需要先刷新JavaScript,因为该代码所做的大部分工作是设置变量。 “棘手”的部分是将浏览器重定向到XML的base64编码版本,并认为这将使浏览器相信它正在打开Excel文件。在我看来,这是不会跨浏览器的部分。