按标题名称检索列

时间:2013-12-12 15:53:27

标签: c# excel

我正在使用OLEDB从Excel电子表格中读取数据。

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, "mySheet");
var data = ds.Tables["mySheet"].AsEnumerable();

foreach (var dataRow in data)
  { 
  Console.WriteLine(dataRow[0].ToString());                        
  }

不是将索引传递给DataRow以获取列的值,而是通过列标题的名称检索列吗?

3 个答案:

答案 0 :(得分:0)

修改连接字符串以指定excel文件中包含标题。

您可以通过设置HDR值来执行此操作。

请参阅此链接以了解连接字符串的各种变体,并构建适合您需求的链接“

http://www.connectionstrings.com/excel/

答案 1 :(得分:0)

试试这段代码:

        var connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}; Extended Properties=Excel 12.0; HDR=YES", fileName);

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

        adapter.Fill(ds, "mySheet");
        var data = ds.Tables["mySheet"].AsEnumerable();

        foreach (DataRow dataRow in data)
        {
            Console.WriteLine(dataRow["MyColumnName"].ToString());    
            Console.WriteLine(dataRow.Field<string>("MyColumnName").ToString());
        }

我以两种方式添加了通过列名称访问行中的数据。

希望这可以解决问题!!

答案 2 :(得分:0)

使用DataTable获取数据。

        string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + **EXCEL FILE PATH** + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\"";

        OleDbConnection conn = new OleDbConnection(strConn);
        conn.Open();            

        OleDbCommand cmd2 = new OleDbCommand("SELECT * FROM [**YOUR SHEET** $]", conn);
        cmd2.CommandType = CommandType.Text;

        DataTable outputTable2 = new DataTable("myDataTable");

        new OleDbDataAdapter(cmd2).Fill(outputTable2);

        foreach(Datarow row in outputTable2)
        {
             String s = row["yourcolumnheader"].ToString();
        }