如何从excel .xlsx中读取和获取数据

时间:2013-09-28 11:33:30

标签: c# database excel

我有2个表的excel文件。我需要阅读这些表并从这些表中获取所有值。但是我所拥有的只是:

OleDbConnection cnn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\MigrateExelSql\Include\TestDb.xlsx; Extended Properties=Excel 12.0;");

OleDbCommand oconn = new OleDbCommand("select * from [Sheet1$]", cnn);
cnn.Open();
OleDbDataAdapter adp = new OleDbDataAdapter(oconn);
DataTable dt = new DataTable();
adp.Fill(dt); 

我不会理解为了从Username和Email表中获取所有值而需要编写的内容。这是.xlsx表TestDb请有人帮助我,因为我第二天在谷歌上搜索,我不知道我必须做什么。

当我尝试通过此方法获取值时,它会返回错误:

        var fileName = string.Format("{0}\\Include\\TestDb.xlsx", Directory.GetCurrentDirectory());
        var connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}; Extended Properties=Excel 12.0;", fileName);

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

        adapter.Fill(ds, "Username");

        var data = ds.Tables["Username"].AsEnumerable();
        foreach (var item in data)
        {
            Console.WriteLine(item);
        }
        Console.ReadKey();

另一个编辑:

string con =
            @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\MigrateExelSql\Include\TestDb.xlsx; Extended Properties=Excel 12.0;";
        using(OleDbConnection connection = new OleDbConnection(con))
        {
            connection.Open();
            OleDbCommand command = new OleDbCommand("select * from [Sheet1$]", connection); 
            using(OleDbDataReader dr = command.ExecuteReader())
            {
                 while(dr.Read())
                 {
                     var row1Col0 = dr[0];
                     Console.WriteLine(row1Col0);
                 }
            }
        }

        Console.ReadKey();

这将只读取第一列,但是当我尝试读取dr [1]时,它将返回错误:索引超出了数组的范围。

1 个答案:

答案 0 :(得分:0)

您的xlsx文件只包含一个工作表,而该工作表中只有一个工作表。 OleDb驱动程序处理工作表,就像数据表一样,工作表中的每列都被视为数据列。

除了一个表(Sheet1$)和一列(dr[0])之外,您无法阅读任何内容 如果您尝试阅读dr[1],那么您将引用第二列,Sheet1中不存在该列。

只是为了测试,尝试在Excel文件的第二列中添加一些值 现在您可以参考dr[1]