1

こんにちは。ExcelドキュメントをC#のDataGridViewにインポートしようとしています。これまでは機能しましたが、データを含む列があり、「並べ替え」する必要があります。

これが単純な場合は、OleDbDataAdapterクエリで「WHEREtest>0」を実行します。

しかし..列の名前はドキュメントごとに変わり、私はそれを頻繁に使用する必要があります。これまでのところ私はこれを手に入れました:

    private void button1_Click(object sender, EventArgs e)
    {

        String strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +
        "Data Source=C:\\Users\\Test\\Desktop\\Test.xls;" +
        "Extended Properties=Excel 8.0;";

        DataSet ds = new DataSet();
        OleDbDataAdapter da = new OleDbDataAdapter
        ("SELECT * FROM [Test$]", strConn);

        da.Fill(ds);
        dataGridView1.DataSource = ds.Tables[0].DefaultView;

    }

選択では、列の最初の3文字は同じであるが、後続の数字は同じではないという行ウィッチ状態を設定する必要があります。好き:

QTA 12345、QTA 13213、QTA92818。

何かのようなもの:

    OleDbDataAdapter da = new OleDbDataAdapter
        ("SELECT * FROM [Test$] WHERE [testColumn] > 0", strConn);

しかし、同じ最初の3文字とランダムな最後の数字を使用します。

誰かが私を助けてくれますか?

4

1 に答える 1

1

私はいくつかのコードを試しましたが、それは私にとってはうまくいきます。試してみてください:

OleDbConnection oleDbConnection = new OleDbConnection(
  "Provider=Microsoft.Jet.OLEDB.4.0;" +
  "Data Source=D:\\Users\\name\\Desktop\\test.xls;" +
  "Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'");
oleDbConnection.Open();

//Get columns
DataTable dtColumns = oleDbConnection.GetSchema("Columns", new string[] { null, null, "Tabelle1$", null });
List<string> columns = new List<string>();

foreach (DataRow dr in dtColumns.Rows)
  columns.Add(dr[3].ToString());

string colName = columns.Find(item => item.Substring(0,3) == "QTA");

DataSet ds = new DataSet();
OleDbDataAdapter da = new OleDbDataAdapter
  ("SELECT * FROM [Tabelle1$] WHERE [" + colName + "] > 0", oleDbConnection);
da.Fill(ds);
dataGrid1.ItemsSource = ds.Tables[0].DefaultView;
oleDbConnection.Close();

必要に応じて接続文字列を変更することに注意してください。

LINQを使用して、コードをトリミングできます。

string colName = (from DataRow dr in dtColumns.Rows where dr[3].ToString().Substring(0, 3) == "QTA" select dr[3].ToString()).ElementAt(0);
于 2011-09-14T07:44:47.887 に答える