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

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

XLS是较旧的Excel文件格式。 XSLX是以OpenXMLforms存储的新格式。 XSLX实际上是一个zip文件,其中各种组件都以文件forms存储在其中。 您不能简单地重命名文件以将其转换为新的格式。 要将文件保存在XSLX中,您必须将文件保存为Excel 2010+格式。

如果您使用Excel互操作,那么它是SaveAs方法的一个选项。

更多信息请查看函数: _Workbook.SaveAs方法

和属性: 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

你不能用OpenXML读取xls文件。

Microsoft的解决scheme是使用Office Interop读取xls文件(但不build议在服务器上使用Interop),将数据从Interop逐步传输到OpenXML。

另一个解决scheme是使用EasyXLS这样的Excel库,并在这两种Excel文件格式之间进行转换:

 ExcelDocument workbook = new ExcelDocument(); workbook.easy_LoadXLSFile("Excel.xls"); workbook.easy_WriteXLSXFile("Excel.xlsx"); 

查找有关将xls转换为xlsx的更多信息。

我不太确定为什么你需要转换文件,为什么你不只是读取xls文件,当然使用不同的技术,然后OpenXML。

为了可靠地读取XLS文件,您可以使用ExcelDataReader ,这是一个用C#编写的轻量级和快速库,用于读取Microsoft Excel文件。 它支持将Excel文件导入Excel的版本2.0(1987年发布!)

另外,你也可以使用像Zamzar这样的文件转换API 。 这项服务已经存在了10年以上,并提供了一个简单的REST API来进行文件转换 – 它支持XLS到XLSX的转换。 您可以在C#中使用它,并具有额外的function,如允许您导入和导出到Amazon S3,FTP服务器等文件。

充分披露:我是Zamzar API的首席开发人员。