Javascript 重命名转换后的Excel文件AngularJS
我陷入了不得不重命名excel文件的困境 情景: 我已经将表格转换成excel文件,这部分我已经成功地完成了,问题是当我下载文件时,它下载为:“download.xls”,我想将其重命名为“MYExcel.xls” app.htmlJavascript 重命名转换后的Excel文件AngularJS,javascript,angularjs,Javascript,Angularjs,我陷入了不得不重命名excel文件的困境 情景: 我已经将表格转换成excel文件,这部分我已经成功地完成了,问题是当我下载文件时,它下载为:“download.xls”,我想将其重命名为“MYExcel.xls” app.html <button class="btn btn-link col-md-2" ng-click="exportToExcel('#tableToExport1')">Export</button> Excel.service.js $scop
<button class="btn btn-link col-md-2" ng-click="exportToExcel('#tableToExport1')">Export</button>
Excel.service.js
$scope.exportToExcel=function(tableId){ // ex: '#my-table'
var exportHref=Excel.tableToExcel(tableId,'WireWorkbenchDataExport');
console.log(location.href)
$timeout(function(){location.href=exportHref;},100); // trigger download
}
.factory('Excel',function($window){
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 {
tableToExcel:function(tableId,worksheetName){
var table=$(tableId),
ctx={worksheet:worksheetName,table:table.html()},
href=uri+base64(format(template,ctx));
console.log(ctx)
return href;
}
};
});
.factory('Excel',函数($window){
var uri='data:application/vnd.ms excel;base64',
模板=“{table}”,
base64=函数{return$window.btoa(unescape(encodeURIComponent));},
格式=函数(s,c){返回s.replace(/{(\w+)}/g,函数(m,p){返回c[p];})};
返回{
tableToExcel:函数(tableId、工作表名称){
变量表=$(表ID),
ctx={工作表:工作表名称,表:table.html()},
href=uri+base64(格式(模板,ctx));
控制台日志(ctx)
返回href;
}
};
});
最简单的方法是利用
它指定要下载的文件名
//old
$timeout(function(){location.href=exportHref;},100); // trigger download
//new
$timeout(function(){
var a = document.createElement('a');
a.href=exportHref;
a.download = "MYExcel.xls";
document.body.appendChild(a);
a.click();
a.remove();
},100);
在过去,文件将由服务器提供,随文件一起发送的标题将给出下载规则和文件名。由于您直接从客户机提供文件服务,因此无法定义此头文件(未发出HTTP请求),因此我们需要玩一些小把戏。在这里,我在主体中添加了一个锚定标记,触发一次单击开始下载,然后将其删除。您可能需要为其添加样式,以确保我们不会在页面上看到它。如果我使用XLSXS和xlsx,则说明已损坏是两种完全不同的文件格式。确保使用与生成的文件相匹配的扩展名。