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

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


当前回答

这是我在Excel 2003中使用的:

Dictionary<string, string> props = new Dictionary<string, string>();
props["Provider"] = "Microsoft.Jet.OLEDB.4.0";
props["Data Source"] = repFile;
props["Extended Properties"] = "Excel 8.0";

StringBuilder sb = new StringBuilder();
foreach (KeyValuePair<string, string> prop in props)
{
    sb.Append(prop.Key);
    sb.Append('=');
    sb.Append(prop.Value);
    sb.Append(';');
}
string properties = sb.ToString();

using (OleDbConnection conn = new OleDbConnection(properties))
{
    conn.Open();
    DataSet ds = new DataSet();
    string columns = String.Join(",", columnNames.ToArray());
    using (OleDbDataAdapter da = new OleDbDataAdapter(
        "SELECT " + columns + " FROM [" + worksheet + "$]", conn))
    {
        DataTable dt = new DataTable(tableName);
        da.Fill(dt);
        ds.Tables.Add(dt);
    }
}

其他回答

我知道人们为了这个目的一直在做一个Excel“扩展”。 你或多或少在Excel中创建一个按钮,上面写着“导出到程序X”,然后以程序可以读取的格式导出并发送数据。

http://msdn.microsoft.com/en-us/library/ms186213.aspx应该是一个很好的开始。

祝你好运

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

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

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

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

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

您可以编写一个excel电子表格,加载给定的excel电子表格并将其保存为CSV(而不是手动操作)。

然后你可以用c#自动化它。

一旦它在csv中,c#程序就可以理解它。

(此外,如果有人让你用excel编程,最好假装你不知道怎么做)

(编辑:啊,是的,rob和Ryan都是对的)

您可以尝试使用这个开源解决方案,使处理Excel更加简洁。

http://excelwrapperdotnet.codeplex.com/

不久前,我在c#中从Excel文件中读取了大量数据,我们使用了两种方法:

COM API,在这里您可以直接访问Excel的对象并通过方法和属性操作它们 允许像使用数据库一样使用Excel的ODBC驱动程序。

后一种方法要快得多:通过COM读取一个有20列和200行的大表需要30秒,通过ODBC只需半秒。所以,如果你需要的只是数据,我建议使用数据库方法。

欢呼,

Carl