Epplus xlsx文件在下载后不会在libreoffice中打开,但会在excel中打开

我生成一个EEPlus .xlsx文件,用户可以点击一个button后下载。 它不会在我的Win8机器上使用LibreOffice 4.4.1.2打开,但它会使用Excel 2013在我的同事Win8机器上打开。

我得到一个错误,说该文件已损坏,需要修复,当我尝试修复它,它说,它无法。 我的同事也得到这个错误,但能够修复和查看文件。

以下是创build可下载版本的相关代码:

MemoryStream ms = DataTableToExcelXlsx(dt, "Report"); ms.Position = 0; ms.WriteTo(Response.OutputStream); Response.ContentType="application/vnd.openxmlformatsofficedocument.spreadsheetml.sheet"; Response.AddHeader("Content-Disposition", "attachment;filename=DataTable.xlsx"); Response.StatusCode = 200; 

现在奇怪的是,我还生成一个附加到电子邮件的xlsx文件,并打开就好了。 打开电子邮件附件时,我和同事都没有收到错误信息。

创build电子邮件附加版本的相关代码:

 MemoryStream ms = DataTableToExcelXlsx(dtReportData, sReportTitle); ms.Position = 0; MailMessage mail = new MailMessage("you@yourcompany.com", sReportEmails); using (SmtpClient client = new SmtpClient()) { mail.Subject = "Mixer - Test Scheduler Task Execute."; mail.Body = string.Format("The following report is executing. ReportSettings Id: {0}", reportSettingsId); mail.Attachments.Add(new Attachment(ms, sReportTitle + ".xlsx", "application/vnd.ms-excel")); client.Send(mail); } 

我也尝试使用vnd.ms-excel MIMEtypes的可下载版本,并没有工作,所以我不知道为什么发生这种情况。

我本来想回答这个作为一个评论,但没有声誉,或任何。

首先,为什么不尝试使用这种内容types? “应用程序/ vnd.openxmlformats-officedocument.spreadsheetml.sheet”

目前,这似乎是错误的。 请看这个post ,其中正确的MIMEtypes定义。

尝试制作unit testing或命令行应用程序,将xlsx创build到本地硬盘驱动器(避免所有Web Response的东西)。 然后看看错误是否出现在xlsx中。

如果是的话,那就是创build文件的代码。 张贴,我们可以看看。

如果没有,那么响应设置就有了。 也许在性格? 在这里,我有一个我知道的响应stream: 使用Excel应用程序打开ExcelPackage对象,而不保存在本地文件path