首页 > 解决方案 > 使用文件保护程序保存后无法打开excel文件

问题描述

在后端,我生成一个 Excel 文件并将其保存在服务器上。这进展顺利。但用户必须有机会将 Excel 工作表保存在本地计算机上。这就是我在前端使用 FileSaver 的原因。

当前端获取字节数组时,它会保存一个文件。但是当我在 Excel 中打开此文件时,我收到格式/扩展名无效的消息。我究竟做错了什么?

后端:

[HttpGet]
public async Task<IActionResult> GetExcelAsync(){
        // do something in service layer
        var result = File.ReadAllBytes(excelFile);
        return Ok(result);
}

前端:

服务.ts

public getExcelSheet(): Observable<any>{
        let options = {
        headers: new HttpHeaders({
                'Content-Type': 'application/json'}),
        responseType:  'blob' as 'json'};
        return this.httpClient.get<any>(this.url, options);
} 

组件.ts

public getSheet(){
        this.service.getExcelSheet().subscribe( response =>{
        const blob = new Blob([response], 
            {type: 'application/vnd.ms-excel'});
        FileSaver.saveAs(blob, 'result.xlsx');})
}

标签: c#excelangularangular-httpclient

解决方案


我看到您找到了解决方案,但我会在此处添加我的两个词,因为它们可能会有所帮助。

在 Angular 中处理 Blob 时,您可以通过删除通用 getter 来简化一切,如下所示:

public getExcelSheet() {
        return this.httpClient.get(this.url, { responseType:  'blob' });
}

现在,Angular 知道并返回一个Observable<blob>.


推荐阅读