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

时间:2015-03-26 15:38:26

标签: excel mime-types xlsx libreoffice epplus

我生成了EEPlus .xlsx文件,用户可以在点击按钮后下载该文件。它使用LibreOffice 4.4.1.2在我的Win8机器上打开,但它将使用Excel 2013在我的同事Win8机器上打开。

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

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

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文件,它打开就好了。打开附加到电子邮件的文件时,我和我的同事都没有收到错误。

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

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 MIME类型作为可下载版本并且不起作用,所以我不知道为什么会发生这种情况。

2 个答案:

答案 0 :(得分:0)

我本来想作为评论来回答这个问题,但还没有声誉,或者说无论如何。

首先,为什么不尝试使用此内容类型? "应用/ vnd.openxmlformats-officedocument.spreadsheetml.sheet"

目前,它似乎确实是错误的。请see as well this post,其中定义了正确的mime类型。

答案 1 :(得分:0)

尝试制作单元测试或命令行应用程序,将xlsx创建到本地硬盘驱动器(避免所有Web响应内容)。然后查看错误是否显示在该xlsx中。

如果是,那么它就是创建文件的代码。发布后我们可以看看。

如果没有,那么响应设置就会出现问题。也许在性格?在这里,我有一个我知道有效的响应流:Open ExcelPackage Object with Excel application without saving it on local file path