我正在开发一个从excel文件读取数据的应用程序,但是当我尝试打开它时,如果使用 xls格式保存源文件(文件包含损坏的数据),则抛出异常使用OpenXML打开Excel工作表时出错。事实上,当我用xlsx格式保存这个文件时,它工作正常。请帮我解决这个问题。
答案 0 :(得分:3)
通过NuGet使用免费的Spire.XLS dll。
样品:
Workbook workbook = new Workbook();
workbook.LoadFromFile("Input.xls");
workbook.SaveToFile("Output.xlsx", ExcelVersion.Version2013);
答案 1 :(得分:2)
您无法使用OpenXML读取xls文件。
Microsoft的解决方案是使用Office Interop读取xls文件(但不建议在服务器上使用Interop),将数据从Interop逐步传输到OpenXML。
另一种解决方案是使用像EasyXLS这样的Excel库,并在这两种Excel文件格式之间进行转换:
ExcelDocument workbook = new ExcelDocument();
workbook.easy_LoadXLSFile("Excel.xls");
workbook.easy_WriteXLSXFile("Excel.xlsx");
的更多信息
我不太清楚为什么你需要转换文件,为什么你不只是使用与OpenXML不同的技术读取xls文件。
答案 2 :(得分:1)
XLS是较旧的Excel文件格式。 XSLX是存储为OpenXML的较新格式。 XSLX实际上是一个zip文件,其中包含各种组件作为文件存储。您不能简单地重命名文件以使其成为新格式。要在XSLX中保存文件,您必须将文件保存为Excel 2010+格式。
如果你正在使用Excel互操作,那么它就是SaveAs方法的一个选项。
了解更多信息请检查功能: _Workbook.SaveAs Method
和属性: FileFormat:
Optional Object.
The file format to use when you save the file. For a list of valid choices,
see the FileFormat property. For an existing file, the default format is the
last file format specified; for a new file, the default is the format of the
version of Excel being used.
msdn info here: https://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel._workbook.saveas(v=office.11).aspx
答案 3 :(得分:1)
为了可靠地读取XLS文件,您可以使用ExcelDataReader这是一个用C#编写的轻量级快速库,用于读取Microsoft Excel文件。它支持导入Excel文件,一直到Excel 2.0版本(1987年发布!)
或者,您可以使用文件转换API ,例如Zamzar。此服务已存在10年以上,并提供用于文件转换的简单REST API - 它支持XLS到XLSX转换。您可以在C#中使用它,它具有额外的功能,例如允许您从Amazon S3,FTP服务器等导入和导出文件。
完全披露:我是Zamzar API的首席开发人员。