如何使用Angular JS下载excel

时间:2016-10-28 11:27:13

标签: javascript angularjs spring-restcontroller alasql filesaver.js

我的Java REST服务(POST调用)使用hssfWorkbook提供excel文件作为响应,并以xls格式返回excel。

response.getOutputStream();
hssfWorkbook.write(out);

我已经尝试过Filesaver,但它可以用作JSON作为响应。我没有找到任何方法在angular JS中实现excel文件下载。请建议使用angular JS的任何方法。

2 个答案:

答案 0 :(得分:1)

试试这个它会起作用。

<强> API

NEQ

$ http call

httpServletResponse.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
httpServletResponse.setHeader("Content-Disposition",
                        "attachment; filename=sample.xlsx");
workbook.write(httpServletResponse.getOutputStream());
workbook.close();
httpServletResponse.getOutputStream().close();

<强> HTML

    $scope.download = function() {
           $http({
                url: '/download',
                method: "POST",
                data: $scope.pagination,
                headers: {
                    'Content-type': 'application/json'
                },
                responseType: 'arraybuffer'
            }).success(function(data, status, headers, config) {
                var blob = new Blob([data], {
                    type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
                });
                saveAs(blob, "Sales_Summary_Report.xls");
            }).error(function(data, status, headers, config) {

            });
    }

答案 1 :(得分:0)

对于IE,你可以试试msSaveOrOpenBlob对于其他浏览器暗示使用隐形锚链接应该解决它,像这样的代码对我有用:

$http( /*your request details */ ).
            success(function(data) {
                var blob = new Blob([data], { type: 'application/vnd.ms-excel' }),
                    fileName = 'Sales_Summary_Report.xls';
                if (window.navigator.msSaveOrOpenBlob) {
                    window.navigator.msSaveOrOpenBlob(blob, fileName);
                } else {
                    var anchor = angular.element('<a/>');
                    anchor.css({ display: 'none' });
                    angular.element(document.body).append(anchor);
                    anchor.attr({
                        href: (window.URL || window.webkitURL).createObjectURL(blob),
                        target: '_blank',
                        download: fileName
                    })[0].click();
                    anchor.remove();
                }
            })