52

我正在寻找一个读取/写入 .xls(不是 .xlsx)文件的 Excel 库。

我正在使用excellibrary,但它非常有问题,我似乎无法打开我创建的文件。这个问题已经知道了将近一年,还没有解决。

我在另一个线程中看到有人建议EPPlus,但这仅适用于 2007/2010 .xlsx 格式。

我过去使用过Koogra,对它非常满意,但我相信它只能读……不能写。

如果你知道图书馆,请告诉我它叫什么。

编辑:如果需要,我很高兴使用内置的 Microsoft.Office.Interop.Excel 创建我的 Excel 文件,但是我的机器有 Office 2007,而目标机器只有 Office 2003。我注意到我有 2 个文件版本该库:12 和 14。我检查了目标机器上的 Excel 版本,它是 11.8169.8172 - 我假设内置的 Excel 互操作在目标机器上不起作用?

4

3 回答 3

63

我推荐NPOI。NPOI 是免费的,仅适用于 .XLS 文件。它对我帮助很大。

详细信息:如果您使用 NPOI,则无需在计算机上安装 Microsoft Office 即可处理 .XLS 文件。

检查这些博客文章:

在 C# 中创建 Excel 电子表格 .XLS 和 .XLSX

带有 Excel 表格和动态图表的 NPOI

[更新]

NPOI 2.0 增加了对 XLSX 和 DOCX 的支持。

你可以在这里读更多关于它的内容:

NPOI 2.0 系列帖子预定

于 2011-05-02T14:26:43.940 回答
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 2003 的机器降级 Excel 版本。实际上,使用 Interop 也是如此。您可以使用较低版本,它应该可以与 Excel 2003 一起使用,即使您的开发 PC 上只有较高版本。

于 2011-05-02T01:36:52.883 回答
0

您可以考虑调用Excel Jetcell .NET 组件来读取/写入 excel 文件的第 3 方工具:

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")
于 2011-05-04T09:38:35.123 回答