Javascript 使用Aspose.Cells和Angular 2前端从asp.net web api后端保存Excel电子表格时遇到问题
在我的ASP.NETWebAPI后端,我有一个Aspose.Cells来制作电子表格。我一直在本地保存它,电子表格很好,但是现在我试图将它托管在服务器上,我必须通过HTTP响应发送电子表格。在我的web api路线的末尾,我有以下代码:Javascript 使用Aspose.Cells和Angular 2前端从asp.net web api后端保存Excel电子表格时遇到问题,javascript,asp.net,angular,asp.net-web-api,aspose-cells,Javascript,Asp.net,Angular,Asp.net Web Api,Aspose Cells,在我的ASP.NETWebAPI后端,我有一个Aspose.Cells来制作电子表格。我一直在本地保存它,电子表格很好,但是现在我试图将它托管在服务器上,我必须通过HTTP响应发送电子表格。在我的web api路线的末尾,我有以下代码: workbook.Save(HttpContext.Current.Response, output.xls, ContentDisposition.Inline, new XlsSaveOptions()); HttpContext.Current.Respo
workbook.Save(HttpContext.Current.Response, output.xls, ContentDisposition.Inline, new XlsSaveOptions());
HttpContext.Current.Response.End();
这将发送响应,可以在Chrome开发工具中看到:
正如你所看到的,物体只是随机的胡言乱语,我假设它是二进制的。在客户端上,接收响应的subscribe方法中的my typescript如下所示:
var blob = new Blob([data._body], { type: 'application/vnd.ms-excel' });
var url = window.URL.createObjectURL(blob);
window.open(url);
这会以类似f811c3bc-2eea-4394-b463-93c61ccc7677.xls的名称保存该文件,在excel警告我该文件的格式与扩展名不同后,该文件在电子表格中再次看起来像胡言乱语:“详细信息”和“站点详细信息”这两个词应该放在那里,所以至少我想要的东西出现了,但显然不太在那里。我做错了什么?这应该是一个包含20多个选项卡的电子表格,其中几个选项卡上最多有几千行,其他选项卡上不到10行
编辑:我已经为将来搜索的人解决了我的问题。在HTTP请求选项中,需要将响应类型设置为ArrayBuffer。我也转而使用Filesaver.js,尽管我不确定是否真的需要它。我们担心,Web浏览器不理解XLS(Excel 2003)和XLSX(Excel 2007及更新版本)格式。只有MicrosoftExcel理解这一点。这意味着,您不能在Web浏览器中显示Excel文件。您可以要求用户下载它们,然后用户必须自己在Microsoft Excel应用程序中打开它们 但是,有些浏览器可以理解(或者他们有插件)Pdf格式。若你们想显示你们的Excel文件内容,那个么使用Aspose.Cells将其呈现为Pdf格式,若用户使用的是Google Chrome、FireFox等,那个么用户就可以在线查看它 无论如何,你必须把它作为附件发送。请像这样更改您的代码
workbook.Save(HttpContext.Current.Response, output.xls,ContentDisposition.Attachment, new XlsSaveOptions());
HttpContext.Current.Response.End();
注意:我在Aspose担任开发人员传道者我也尝试过使用附件。无差异.Aspose.Cells可以将Excel文件保存在字节数组或内存流中。您可以找到可以将字节数组或内存流发送到web浏览器的代码。您还可以询问堆栈溢出问题,当任何文件(Excel、Word、Pdf等)位于字节数组或内存流中时,如何将其发送到浏览器。谢谢