用C#生成的Excel文件已损坏(ExcelExportEngine&IExportEngine)

问题描述 投票:-1回答:1

我有一个用C#编写的应用程序,它允许从列表(列表<>)中生成一个excel文件。

生成excel文件的代码可以正常工作,但是今天仍然使用Windows 7的用户已经表明excel文件已经生成,但是当它打开时是不可读的。

生成excel的代码如下:

IExportEngine engine = new ExcelExportEngine();
engine.AddData(productListExport);
MemoryStream memory = engine.Export();
FileStream fileStream;

SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Filter = "Excel files (*.xls or .xlsx)|.xls;*.xlsx";
saveFileDialog1.Title = "Export product list to Excel";
saveFileDialog1.ShowDialog();
                
if (saveFileDialog1.FileName != "")
{
 String path = Path.GetFullPath(saveFileDialog1.FileName);
 fileStream = new FileStream(path, FileMode.OpenOrCreate,  FileAccess.Write, FileShare.ReadWrite);
 memory.WriteTo(fileStream);
 fileStream.Close();
}
                

当您打开excel文件时,出现一条消息,提示格式和扩展名不匹配,如果您选择打开无论如何都打开的选项,则如下图所示:

enter image description here

欢迎任何建议或评论。

更新:

关于ExcelExportEngine:

https://github.com/vvenegasv/exportable

c# excel export-to-excel
1个回答
2
投票

屏幕快照看起来像xlsx文件的内容。 xlsx文件是一个包含XML文件的zip软件包。其中的各种xml路径都有非常明显的指示。 PK字节也一样,但是我首先看到了docProps.xml

代码本身存在严重问题-它生成Excel文件内容之前要求格式。鉴于xls格式在13年前就已过时,唯一明智的默认设置是使用xlsx。如果将xlsx文件另存为xls,Excel将会抱怨。但就我而言,它能够加载文件。

看起来代码使用Exportable包。 Github存储库中的示例显示了如何指定格式。但是,除了MemoryStream Export()外,库中还有一个Export(string path)可写入文件。源代码显示Export(string)根据扩展名选择格式,如果无效则抛出。

这意味着代码可以简化为:

IExportEngine engine = new ExcelExportEngine();
engine.AddData(productListExport);

var saveFileDialog1 = new SaveFileDialog(){
    Filter = "Excel files (*.xls or .xlsx)|.xls;*.xlsx",
    Title = "Export product list to Excel"
}
saveFileDialog1.ShowDialog();

if (saveFileDialog1.FileName != "")
{
    var path = Path.GetFullPath(saveFileDialog1.FileName);
    engine.Export(path);
}

我也建议您也不要使用xls选项。不仅仅是13年前被替换了。格式没有很好的开始定义,因此库在生成与Excel相同的输出时总是会遇到问题。 Google表格或Office Online之类的服务仅适用于xlsx。您必须pay才能获得xls支持。文件大小也小很多。

© www.soinside.com 2019 - 2024. All rights reserved.