将页面上的多个 html 表保存为 CSV
Save multiple html tables on a page as CSV
我有一个页面,上面有多个 html table。我想使用 JS 或 JQuery 将所有 table 下载到一个 CSV 或 Excel 文件中。我搜索了它并找到了一些 jQuery 插件
https://www.jqueryscript.net/table/Table-To-CSV-jQuery-csvExport.html
但问题是他们只为 page.I 上的一个 table 工作,想将页面上的所有 table 保存在一个 excel sheet。有没有人有幸将一个页面上的多个 html table 导出到一个 excel 文件中,该文件也可以在 IE 中使用。
谢谢
看来我们需要为 Edge/IE 使用 BLOB(基于 this related answer)。试一试。我在 Edge 中测试了它,它似乎可以工作。
注意:您将无法单击下面代码段中的 "Export" 按钮,因为代码处于沙盒环境中。我创建了一个 fiddle 供您在此处进行测试:https://jsfiddle.net/ratk2pmz/
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
}
var HeaderName = 'Download-ExcelFile';
var ua = window.navigator.userAgent;
var msieEdge = ua.indexOf("Edge");
var msie = ua.indexOf("MSIE ");
if (msieEdge > 0 || msie > 0) {
if (window.navigator.msSaveBlob) {
var dataContent = new Blob([base64(format(template, ctx))], {
type: "application/csv;charset=utf-8;"
});
var fileName = "excel.xls";
navigator.msSaveBlob(dataContent, fileName);
}
return;
}
window.open('data:application/vnd.ms-excel,' + encodeURIComponent(format(template, ctx)));
}
})()
<table id="table">
<tr>
<th>Company</th>
<th>Contact</th>
<th>Country</th>
</tr>
<tr>
<td>Alfreds Futterkiste</td>
<td>Maria Anders</td>
<td>Germany</td>
</tr>
<tr>
<td>Centro comercial Moctezuma</td>
<td>Francisco Chang</td>
<td>Mexico</td>
</tr>
<tr>
<td>Ernst Handel</td>
<td>Roland Mendel</td>
<td>Austria</td>
</tr>
<tr>
<td>Island Trading</td>
<td>Helen Bennett</td>
<td>UK</td>
</tr>
<tr>
<td>Laughing Bacchus Winecellars</td>
<td>Yoshi Tannamuri</td>
<td>Canada</td>
</tr>
<tr>
<td>Magazzini Alimentari Riuniti</td>
<td>Giovanni Rovelli</td>
<td>Italy</td>
</tr>
</table>
<button onclick="tableToExcel('table', 'SHEET1')" class="btn btn-primary">Export to Excel</button>
我有一个页面,上面有多个 html table。我想使用 JS 或 JQuery 将所有 table 下载到一个 CSV 或 Excel 文件中。我搜索了它并找到了一些 jQuery 插件
https://www.jqueryscript.net/table/Table-To-CSV-jQuery-csvExport.html
但问题是他们只为 page.I 上的一个 table 工作,想将页面上的所有 table 保存在一个 excel sheet。有没有人有幸将一个页面上的多个 html table 导出到一个 excel 文件中,该文件也可以在 IE 中使用。
谢谢
看来我们需要为 Edge/IE 使用 BLOB(基于 this related answer)。试一试。我在 Edge 中测试了它,它似乎可以工作。
注意:您将无法单击下面代码段中的 "Export" 按钮,因为代码处于沙盒环境中。我创建了一个 fiddle 供您在此处进行测试:https://jsfiddle.net/ratk2pmz/
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
}
var HeaderName = 'Download-ExcelFile';
var ua = window.navigator.userAgent;
var msieEdge = ua.indexOf("Edge");
var msie = ua.indexOf("MSIE ");
if (msieEdge > 0 || msie > 0) {
if (window.navigator.msSaveBlob) {
var dataContent = new Blob([base64(format(template, ctx))], {
type: "application/csv;charset=utf-8;"
});
var fileName = "excel.xls";
navigator.msSaveBlob(dataContent, fileName);
}
return;
}
window.open('data:application/vnd.ms-excel,' + encodeURIComponent(format(template, ctx)));
}
})()
<table id="table">
<tr>
<th>Company</th>
<th>Contact</th>
<th>Country</th>
</tr>
<tr>
<td>Alfreds Futterkiste</td>
<td>Maria Anders</td>
<td>Germany</td>
</tr>
<tr>
<td>Centro comercial Moctezuma</td>
<td>Francisco Chang</td>
<td>Mexico</td>
</tr>
<tr>
<td>Ernst Handel</td>
<td>Roland Mendel</td>
<td>Austria</td>
</tr>
<tr>
<td>Island Trading</td>
<td>Helen Bennett</td>
<td>UK</td>
</tr>
<tr>
<td>Laughing Bacchus Winecellars</td>
<td>Yoshi Tannamuri</td>
<td>Canada</td>
</tr>
<tr>
<td>Magazzini Alimentari Riuniti</td>
<td>Giovanni Rovelli</td>
<td>Italy</td>
</tr>
</table>
<button onclick="tableToExcel('table', 'SHEET1')" class="btn btn-primary">Export to Excel</button>