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

13

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


1
你能在这里发布相关的代码吗? - mrtig
4个回答

10

使用通过NuGet提供的免费Spire.XLS dll。

示例:

Workbook workbook = new Workbook();
workbook.LoadFromFile("Input.xls");
workbook.SaveToFile("Output.xlsx", ExcelVersion.Version2013);

1
应使用工作簿对象而非类。LoadFromFile 和 SaveToFile 是实例方法。 - Yawar Murtaza
Spire.XLS不是免费的:https://www.e-iceblue.com/Introduce/excel-for-net-introduce.html#.XDXiXFyTKUk - Yawar Murtaza
@YawarMurtaza,据我所知,使用Visual Studio 2017是免费的,可能现在已经收费了。你试过用VS2017吗? - j1rjacob
3
我刚刚发现有一个名为FreeSpire.XLS的免费版本可用。https://www.nuget.org/packages/FreeSpire.XLS/ 该版本可以将XLS文件转换为Excel 2013,这已经足够好了,因为它是开放式XML格式。但是,付费版本拥有比免费版本更多的功能,正如您所提到的那样。 - Yawar Murtaza
5
FreeSpire.XLS每张工作表的行数限制为200行。 - Ben
@Ben 试试付费版。谢谢。 - j1rjacob

7
为了可靠地读取XLS文件,您可以使用ExcelDataReader。这是一个轻量级且快速的库,用于读取Microsoft Excel文件。它支持导入Excel文件,甚至包括1987年发布的Excel 2.0版本。
另外,您也可以使用文件转换API,例如Zamzar。该服务已经存在超过10年,并提供简单的REST API进行文件转换-它支持将XLS转换为XLSX。您可以在C#中使用它,并具有额外的功能,例如允许您导入和导出文件到Amazon S3、FTP服务器等。
完整披露:我是Zamzar API的首席开发人员。

2

使用OpenXML无法读取xls文件。

微软的解决方案是使用Office Interop来读取xls文件(但不建议在服务器上使用Interop),逐步将数据从Interop转移到OpenXML。

另一种解决方案是使用类似于EasyXLS的Excel库来在这两种Excel文件格式之间进行转换:

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

了解更多关于将xls转换为xlsx的信息。

我不太确定为什么您需要转换文件,而不是使用其他技术读取xls文件,肯定不是OpenXML。


谢谢Alex先生的回复,我已经使用在VS中可用的spire.xls ddl修复了错误。 - Hamzatovic
有不同的原因。我在这里的原因是允许用户上传CSV、XLS、XLSX等数据,因此需要将xls转换为xlsx。 - Casey ScriptFu Pharr

1
XLS 是较旧的 Excel 文件格式。XSLX 是以 OpenXML 存储的较新格式。XSLX 实际上是一个包含各种组件文件的 zip 文件。您不能简单地将文件重命名为新格式。要将文件保存为 XSLX,您需要将文件保存为 Excel 2010+ 格式。 如果您正在使用 Excel interop,则可以在 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信息: https://msdn.microsoft.com/zh-cn/library/microsoft.office.interop.excel._workbook.saveas(v=office.11).aspx


谢谢您的回复,但我认为您提供给我的解决方案不起作用,因为我无法创建woorkbookpart,因为我还没有打开电子表格。当我尝试使用文件名目录打开电子表格时,程序停在了这个部分SpreadsheetDocument doc = SpreadsheetDocument.Open(filename, false)。 - Hamzatovic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接