Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 重命名转换后的Excel文件AngularJS_Javascript_Angularjs - Fatal编程技术网

Javascript 重命名转换后的Excel文件AngularJS

Javascript 重命名转换后的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

我陷入了不得不重命名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

$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,则说明已损坏是两种完全不同的文件格式。确保使用与生成的文件相匹配的扩展名。