将.xslx文件从WebAPI传递到Angular2 +项目并将其从浏览器中保存

时间:2017-11-29 21:36:16

标签: excel angular file asp.net-web-api

我在ASP.NET WebAPI的MemoryStream中有一个.xslx文件。我需要将它发送到JavaScript前端(Angular4),我将让用户使用 file-saver 包保存它。

我试过像这样返回一个MemoryStream实例

MemoryStream memoryStream = new MemoryStream();
SpreadsheetDocument spreadsheet = SpreadsheetDocument.Create(memoryStream, SpreadsheetDocumentType.Workbook);

spreadsheet.AddWorkbookPart();
spreadsheet.WorkbookPart.Workbook = new DocumentFormat.OpenXml.Spreadsheet.Workbook();
spreadsheet.WorkbookPart.Workbook.Append(new BookViews(new WorkbookView()));
WorksheetPart newWorksheetPart = spreadsheet.WorkbookPart.AddNewPart<WorksheetPart>();
Sheet sheet = new Sheet() { Id = spreadsheet.WorkbookPart.GetIdOfPart(newWorksheetPart), SheetId = worksheetNumber, Name = "Random Sheet Name" };
sheets.Append(sheet);
spreadsheet.WorkbookPart.Workbook.Save();

return new JsonResult()
    {
        Data = memoryStream,
        JsonRequestBehavior = JsonRequestBehavior.AllowGet
    };

file-saver 提供了一种从浏览器保存文件的方法: saveAs()。它期望Blob()对象作为第一个参数。所以我试过了:

saveAs(new Blob([data.Data], {type: 'application/octet-stream'}), "Report.xlsx");

这确实保存了文件,但是当我尝试打开它时,我收到以下消息:

Excel无法打开“Report.xslx”文件,因为文件格式或文件扩展名无效。

该文件在打开时显示为空。

enter image description here

我做错了什么?

感谢。

0 个答案:

没有答案