2

可能重复:
如何从 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. 我只想简单地阅读电子表格上的 A 列。我想我应该能够改变这一点string query = "SELECT * FROM [Sheet1$]";,但我所有的努力都是徒劳的。有人可以指出我正确的方向,还是有更好的方法来做到这一点。

4

3 回答 3

3

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

于 2013-01-18T17:32:40.157 回答
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;
            }
        }
    }
}
于 2013-01-18T17:52:21.647 回答
0

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

于 2013-01-18T17:33:53.187 回答