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

本文关键字:一列 电子表格 连接 查询 excel 读取 Oledb | 更新日期: 2023-09-27 17:54:30

可能重复:
如何在c#中从excel表中选择特定列?

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$]";,但我所有的努力都是徒劳的。有人能为我指明正确的方向吗?或者有更好的方法吗。

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

看起来这样做的方法很简单string sql="从[sheet1$]中选择F1、F2、F3、F4、F5;谢谢大家的评论。

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

以下是我用来读取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;
            }
        }
    }
}