javascript – 在Angularjs和WebApi中下载Excel文件xlsx

前端之家收集整理的这篇文章主要介绍了javascript – 在Angularjs和WebApi中下载Excel文件xlsx前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在开展一项任务,我必须以xlsx格式下载报告.报表文件从服务器成功生成,并在客户端接收.但是它不是打开并且产生无效的格式错误.下面是服务器端的代码.
var output = await reportObj.GetExcelData(rParams);
    if (output != null){
        var result = new HttpResponseMessage(HttpStatusCode.OK)
        {
            Content = new ByteArrayContent(output.ConentBytes)
        };
        result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
        {
            FileName = output.FileName
        };
 return result;
 }

以下是客户端的代码

var saveData = function (response) {

        if (response.status === 200) {
            var reportData = response.data;

            var b = new Blob([reportData],{ type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" });
            saveAs(b,"ReportFile.xlsx");//this is FileSaver.js function
        } else {
            console.log(response.statusText);
        }

    };


    $scope.getExcelFile = function(reportName,reportParams) {

        reportDataService.getExcelReportData(reportName,reportParams,saveData);

    }

以下是错误信息:
由于某些内容不可读,Excel无法打开newFile.xlsx.您要打开并修复此工作簿吗?
点击修复,出现以下错误
Excel无法打开此文件.
文件格式或文件扩展名无效.验证文件是否已损坏,并且文件扩展名与文件的格式相符.
有人可以指导我做错了什么?同时,同一个服务器端的文件生成器对象在ASP.Net表单应用程序中工作顺利,文件也打开没有任何错误.
谢谢.

解决方法

我希望你的$http调用丢失响应类型配置.这是我下载办公文件的方式:
function download(url,defaultFileName) {
    var self = this;
    var deferred = $q.defer();
    $http.get(url,{ responseType: "arraybuffer" }).then(
        function (data,status,headers) {
            var type = headers('Content-Type');
            var disposition = headers('Content-Disposition');
            if (disposition) {
                var match = disposition.match(/.*filename=\"?([^;\"]+)\"?.*/);
                if (match[1])
                    defaultFileName = match[1];
            }
            defaultFileName = defaultFileName.replace(/[<>:"\/\\|?*]+/g,'_');
            var blob = new Blob([data],{ type: type });
            saveAs(blob,defaultFileName);
            deferred.resolve(defaultFileName);                    
        },function (data,status) {
            var e = /* error */
            deferred.reject(e);
        });
    return deferred.promise;
}
原文链接:/js/152813.html

猜你在找的JavaScript相关文章