如何使用C#将xls文件转换为xlsx文件?

时间:2017-10-25 16:28:53

标签: c# excel openxml xlsx xls

我正在开发一个从excel文件读取数据的应用程序,但是当我尝试打开它时,如果使用 xls格式保存源文件(文件包含损坏的数据),则抛出异常使用OpenXML打开Excel工作表时出错。事实上,当我用xlsx格式保存这个文件时,它工作正常。请帮我解决这个问题。

4 个答案:

答案 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");

查找有关converting xls to 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的首席开发人员。