繁体   English   中英

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

[英]Excel file generated with C # is corrupted (ExcelExportEngine & IExportEngine)

我有一个在 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文件时,出现格式和扩展名不匹配的提示信息,如果选择打开还是打开选项,如下图所示:

在此处输入图像描述

欢迎任何建议或意见。

更新:

关于 ExcelExportEngine:

https://github.com/vvenegasv/exportable

屏幕截图看起来像xlsx文件的内容。 xlsx文件是包含 XML 文件的 zip package 文件。 里面的各种 xml 路径有非常强烈的指示。 PK字节也是,但我首先看到了docProps.xml

代码本身有一个严重的问题——它会在请求格式之前生成 Excel 文件内容。 鉴于xls格式在 13 年前已经过时,唯一合理的默认设置是使用xlsx 如果xlsx文件保存为xls , Excel 会报错。 但就我而言,它能够加载文件。

看起来代码使用了可导出的 package。 Github repo 中的示例显示了如何指定格式。 但是,除了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 年前被替换。 格式在开始时没有很好地定义,因此库总是在产生相同的 output Excel 时遇到问题。 Google Sheets 或 Office Online 等服务仅适用于xlsx 您必须付费才能获得xls支持。 文件大小也小了很多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM