是否有免费或开源的库可以直接从c#程序中读取Excel文件(.xls) ?

它不需要太花哨,只需选择一个工作表并将数据作为字符串读取即可。到目前为止,我一直在使用Excel的Export to Unicode文本功能,并解析生成的(以制表符分隔的)文件,但我想消除手动步骤。


当前回答

不是免费的,但是在最新的Office中有一个非常好的自动化。net API。(有一个API已经有很长一段时间了,但是讨厌的COM)你可以在代码中做任何你想要/需要的事情,而Office应用程序仍然是隐藏的后台进程。

其他回答

如果只是包含在Excel文件中的简单数据,则可以通过ADO.NET读取数据。请看下面列出的连接字符串:

http://www.connectionstrings.com/?carrier=excel2007 或 http://www.connectionstrings.com/?carrier=excel

更新:然后你可以读取工作表通过选择*从[Sheet1$]

最近,部分是为了更好地使用LINQ....我一直在使用Excel的自动化API将文件保存为XML电子表格,然后使用LINQ将该文件处理为XML。

var fileName = string.Format("{0}\\fileNameHere", Directory.GetCurrentDirectory());
var connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=Excel 8.0;", fileName);

var adapter = new OleDbDataAdapter("SELECT * FROM [workSheetNameHere$]", connectionString);
var ds = new DataSet();

adapter.Fill(ds, "anyNameHere");

DataTable data = ds.Tables["anyNameHere"];

这是我常用的。这有点不同,因为我通常在表的编辑处使用AsEnumerable():

var data = ds.Tables["anyNameHere"].AsEnumerable();

因为这让我使用LINQ从字段中搜索和构建结构。

var query = data.Where(x => x.Field<string>("phoneNumber") != string.Empty).Select(x =>
                new MyContact
                    {
                        firstName= x.Field<string>("First Name"),
                        lastName = x.Field<string>("Last Name"),
                        phoneNumber =x.Field<string>("Phone Number"),
                    });

Excel数据阅读器是去的方式!

它是开源的,在http://exceldatareader.codeplex.com/上,正在积极开发。

我们使用它来阅读表格(有时不是那么表格)工作表已经有几年了(在一个金融应用程序中)。

可以从人类可读的表中读取单元测试数据。

只需避免尝试返回DateTime的功能,因为对于Excel, DateTime只是双位数。

如果在同一个工作表中有多个表,可以给每个表一个对象名称,并使用OleDb方法读取表,如下所示:http://vbktech.wordpress.com/2011/05/10/c-net-reading-and-writing-to-multiple-tables-in-the-same-microsoft-excel-worksheet/