Javascript 如何将多个html表格导出到excel?
我有一个网页,有3个表,我想把它们全部导出到同一个excel文件。我希望每张桌子都有一张纸,但把它们放在同一张纸上也可以。谷歌搜索之后,我看到的只是将一个表导出到一个excel表。Javascript 如何将多个html表格导出到excel?,javascript,html,excel,html-table,export-to-excel,Javascript,Html,Excel,Html Table,Export To Excel,我有一个网页,有3个表,我想把它们全部导出到同一个excel文件。我希望每张桌子都有一张纸,但把它们放在同一张纸上也可以。谷歌搜索之后,我看到的只是将一个表导出到一个excel表。var tablesToExcel=(函数(){ var tablesToExcel = (function () { var uri = 'data:application/vnd.ms-excel;base64,' , template = '<html xmlns:o="urn:schema
var tablesToExcel=(函数(){
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));
}
})();
<button onclick="saveFile()">Save XLSX file</button>
var uri='data:application/vnd.ms excel;base64,'
,模板=“”
,body=''
,tablevar='{table'
,tablevarend='}'
,bodyend=''
,工作表=“”
,工作表趋势=“”
,worksheetvar='{工作表'
,工作表范围='}'
,base64=函数{return window.btoa(unescape(encodeURIComponent))}
,format=函数(s,c){返回s.replace(/{(\w+)}/g,函数(m,p){返回c[p];})}
,wstemplate=“”
,tabletemplate='';
返回函数(表、名称、文件名){
var表=表;
对于(变量i=0;i
还有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>
<button onclick="saveFile()">Save XLSX file</button>
JS到Excel
你好
嘿
你好
夜
傍晚
黑夜
//函数1
$scope.exportXlsSheets = function (datasets) {
var xlsString = '<?xml version="1.0"?>\
<ss:Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">';
for(var key in dict){
var arr_of_entities= dict[key].arr;
xlsString += $scope.getSheet(arr_of_entities);
}
xlsString += '</ss:Workbook>';
var a = document.createElement('a');
a.href = 'data:application/vnd.ms-excel;base64,' + $scope.base64(xlsString);
a.target = '_blank';
a.download = 'test1.xls';
document.body.appendChild(a);
a.click();
}
$scope.base64 = function (s) {
return window.btoa(unescape(encodeURIComponent(s)))
}
<button onclick="saveFile()">Save XLSX file</button>
$scope.exportXlsSheets=函数(数据集){
var xlsString='1〕\
';
for(dict中的var键){
var arr\u of_entities=dict[key].arr;
xlsString+=$scope.getSheet(实体的arr_);
}
xlsString+='';
var a=document.createElement('a');
a、 href='data:application/vnd.ms excel;base64'+$scope.base64(xlsString);
a、 目标='u blank';
a、 下载='test1.xls';
文件.正文.附件(a);
a、 单击();
}
$scope.base64=函数{
返回窗口.btoa(unescape(一个或多个组件)))
}
//职能2
$scope.getSheet = function (sheetName, entities) {
var res = '<ss:Worksheet ss:Name="'+sheetName+"></ss:Worksheet>\
<ss:Table>';
var row = '<ss:Row>';
for ( i = 0; i < entities.length; i++) {
var entity = entities[i];
row += '<ss:Cell>\
<ss:Data ss:Type="String">'+entity.value +'</ss:Data>\
</ss:Cell>';
}
row += '</ss:Row>';
res += row;
return res;
}
<button onclick="saveFile()">Save XLSX file</button>
$scope.getSheet=函数(sheetName,实体){
var res='1〕\
';
var行=“”;
对于(i=0;i
是一个更好的解决方案,它支持以最新的Excel格式(即xlsx)导出表格
. 如果在Chrome上导出的行总数超过3407,则接受的解决方案将失败
<button onclick="saveFile()">Save XLSX file</button>
上面链接中的一个示例:
<button onclick="saveFile()">Save XLSX file</button>
html
<button onclick="saveFile()">Save XLSX file</button>
你想怎么做?用什么语言?在什么环境下?到目前为止,你自己为此付出了多少努力?你有足够的徽章和代表来了解规则。你用的是什么编程语言?只有HTML和Javascript?@alex.pulver我正在使用ASP.NET网页。但我只想用HTML和Javascript来做这件事。如果你改变主意,请告诉我。据我所知,您只能保存扩展名为xls的html文件。这不是一个真正的xls文件,您不能有多个实际上是html表的工作表。您尝试过吗?它能够将多个工作表打包到一个工作簿中,并且不需要后端(尽管如果没有后端,您需要像downloadify这样的东西才能将文件发送给用户)。它有角度,但不重要。这个答案为我指明了正确的方向。它支持将数据放在不同的表上。它输出的是电子表格ML,而不是HTML。更多信息请点击这里:@Ehud你能给我一个jsfiddle吗?很容易理解数据集是以何种格式传递的。我发现在使用多张工作表时,这种方式不太好用。就我而言,这很有效。需要注意的一点是工作表名称中的“/”字符。我在代码中遇到了此错误。元素“x:ExcelWorksheet”的前缀“x”未绑定。我尝试了此操作,两个选项卡都是在excel中创建的,但第一个选项卡包含两个表的数据,第二个选项卡是空的。因为我的需要,这项工作做得很好