能够读写.xls文件的.NET Excel库

52

我正在寻找一个支持读写 .xls 格式(而不是 .xlsx 格式)文件的 Excel 库。

我使用过excellibrary,但它存在很多缺陷,我似乎无法打开创建的文件。这个问题已经存在了近一年,但还没有被修复。

在另一个讨论串中,有人建议使用EPPlus,但它只支持 2007/2010 年以后的 .xlsx 格式。

我以前用过Koogra,并且非常满意,但我认为它只能读取而不能写入。

如果您知道一个库,请告诉我它的名称。

编辑: 如有必要,我可以使用内置的 Microsoft.Office.Interop.Excel 创建我的 Excel 文件,但我的机器上安装的是 Office 2007,目标机器只安装了 Office 2003。我注意到该库有两个文件版本:12 和 14。我检查了目标机器上的 Excel 版本,是 11.8169.8172 - 我认为内置的 Excel 互操作将无法在目标机器上工作?


你是否必须直接使用XLS文件?你是否考虑过只使用CSV文件吗? - Jonathan Wood
我必须绝对使用XLS,而不是CSV或XLSX。我将上传结果到第三方网络服务,因此对文件格式没有任何控制。 - Ozzah
1
我知道我听起来很蠢,因为我从未使用过C#,但是C#可以使用后期绑定吗?如果可以的话,你只需要做CreateObject("Excel.Application")这个东西(在VB/VBA/VB.NET中可以),不需要所有其他库,甚至不需要引用。 - Todd Main
3个回答

63

2
谢谢。实际上,在发布问题后不久,我已经开始使用NPOI,并且仍在使用它。文档不多,命名空间都有非常不友好的缩写,但我设法弄清楚了,并且它正在工作 :) - Ozzah
很好,@Ozzah,但你能否使用Npoi操作xls模板? - gumuruh
代码库链接似乎有点过时,难道不应该指向 https://github.com/tonyqus/npoi 吗?这个链接显示该项目仍在活跃中。 - user692942
1
同样,NPOI像POI一样不支持低于BIFF8的BIFF格式 - 只需获得令人讨厌的“提供的电子表格似乎是Excel 5.0 / 7.0(BIFF5)格式。 POI仅支持BIFF8格式(来自Excel版本97/2000 / XP / 2003)”。对于那些寻找解决此问题的解决方案的人,这可能有所帮助- https://dev59.com/W2jWa4cB1Zd3GeqPq3YK#17965628 - user692942
谢谢...之前一直在使用epplus...我觉得epplus应该修复这个bug..哈哈哈哈 第二个人从epplus转向NPOI - rakeshyadvanshi

10

您为什么不能使用Excel ODBC连接来读写Excel呢?例如,我曾经使用以下代码逐行从Excel文件中读取数据:

private DataTable LoadExcelData(string fileName)
{
  string Connection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=1\";";

  OleDbConnection con = new OleDbConnection(Connection);

  OleDbCommand command = new OleDbCommand();

  DataTable dt = new DataTable(); OleDbDataAdapter myCommand = new OleDbDataAdapter("select * from [Sheet1$] WHERE LastName <> '' ORDER BY LastName, FirstName", con);

  myCommand.Fill(dt);

  Console.WriteLine(dt.Rows.Count);

  return dt;
}

您可以以同样的方式写入Excel "数据库"。正如您所看到的,您可以选择要使用的版本号,这样您就可以将Excel版本降级为安装了Excel 2003的机器。实际上,使用Interop也是一样的。您可以使用较低版本,并且应该可以与Excel 2003一起使用,即使您的开发PC只有更高版本。


4
我知道这是一个相当旧的帖子,但我想声明一下,使用这种方法读取一个包含约35k行数据的工作表时,我会收到“内存不足”的错误提示。 - mcy
我正在使用这种方法,但遇到了在部署目标上安装Excel组件的问题。有什么解决办法吗?安装Access数据库组件也不是一个选项。 - Tengiz
如果您的部署目标上没有安装Excel,则应寻找另一种解决方案来完成此操作。请查看上面接受的解决方案,以便在未安装Excel的情况下使用Excel。 - IAmTimCorey

0
您可以考虑使用第三方工具Excel Jetcell .NET component来读写Excel文件:
C#示例
// Create New Excel Workbook
ExcelWorkbook Wbook = new ExcelWorkbook();
ExcelCellCollection Cells = Wbook.Worksheets.Add("Sheet1").Cells;

Cells["A1"].Value = "Excel writer example (C#)";
Cells["A1"].Style.Font.Bold = true;
Cells["B1"].Value = "=550 + 5";

// Write Excel XLS file
Wbook.WriteXLS("excel_net.xls");

VB.NET 示例

' Create New Excel Workbook
Dim Wbook As ExcelWorkbook = New ExcelWorkbook()
Dim Cells As ExcelCellCollection = Wbook.Worksheets.Add("Sheet1").Cells

Cells("A1").Value = "Excel writer example (C#)"
Cells("A1").Style.Font.Bold = True
Cells("B1").Value = "=550 + 5"

' Write Excel XLS file
Wbook.WriteXLS("excel_net.xls")

免费选项仅允许未格式化的导出。否则需要付费。 - Ondřej Janča

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