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";

Webサイトから読み込まれ、に表示されているExcelスプレッドシートを読み取るためのこのコードがあります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 に答える