Oledb连接和查询只读取excel电子表格中的一列

时间:2013-01-18 17:25:07

标签: c# .net ado.net oledb

  

可能重复:
  How can i select specific columns from excel sheet in c#?

string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|2.xls;Extended Properties='Excel 8.0;HDR=no;'";

string query = "SELECT * FROM [Sheet1$]";

DataSet excelDataSet = new DataSet();
OleDbDataAdapter da = new OleDbDataAdapter(query, strConn);

da.Fill(excelDataSet);

GridView1.DataSource = excelDataSet;
GridView1.DataBind();
GridView1.HeaderRow.Cells[0].Text = "CheckNumber";

我有这段代码来阅读从网站加载并显示在gridview中的Excel电子表格。我想简单地阅读电子表格中的A栏。我想我应该能够改变这个string query = "SELECT * FROM [Sheet1$]";,但我所有的努力都是徒劳的。有人能指出我正确的方向,还是有更好的方法来做到这一点。

3 个答案:

答案 0 :(得分:3)

看起来这样做的方法很简单 string sql =“SELECT F1,F2,F3,F4,F5 FROM [sheet1 $]; 感谢大家的评论。

答案 1 :(得分:0)

我认为您的问题在于电子表格不是数据库。电子表格没有义务为矩形或具有相同类型的单元格。所以说你想要一个列ASSUMES,该列存在于所有行并且属于同一类型。因此,在针对它发出SQL之前,您需要转换为相同类型的向量。

答案 2 :(得分:0)

以下是我用来阅读Excel电子表格并将其作为DataTable返回的内容,如果您专注于以下部分,我可以通过循环访问dtSchema DataTable对象来查询电子表格中的所有工作簿不同工作表的名称:

public static DataTable GetExcelData(string connectionString)
{
    string sql = string.Empty;
    using (OleDbConnection cn = new OleDbConnection(connectionString))
    {
        using (OleDbDataAdapter adapter = new OleDbDataAdapter())
        {
            DataTable dt = new DataTable();
            using (OleDbCommand command = cn.CreateCommand())
            {
                cn.Open();
                DataTable dtSchema = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });

                    foreach (DataRow dr in dtSchema.Rows)
                    {
                        //Will Loop through the name of each Worksheet
                        Console.WriteLine(dr["Table_Name"]);
                    }


                string firstSheetName = dtSchema.Rows[0].Field<string>("TABLE_NAME");

                sql = "SELECT * FROM [" + firstSheetName + "]";
                command.CommandText = sql;
                adapter.SelectCommand = command;
                adapter.Fill(dt);

                if (dt.Rows.Count == 0)
                {
                    OleDbDataReader reader = command.ExecuteReader();
                    dt.Load(reader);
                }
                cn.Close();
                return dt;
            }
        }
    }
}