0

私は OleDB と Excel ファイルの読み取りにまったく慣れていません。3 つの列 (名前 - 姓 - 電子メール アドレス) を含むワークシートがあり、次のことを行う必要があります。

  • 行数を知る
  • 3 列目のすべてのアドレスを読み取る
  • 各アドレスを1つずつ抽出する

OpenFileDialog オブジェクト (ofd) と TextBox (excel) を使用して、選択したファイルを表示します。これは私のコードです:

if (ofd.ShowDialog() == DialogResult.OK)
{
    excel.Text = ofd.FileName;
    connection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excel.Text + ";Extended Properties=\"Excel 12.0 Xml;HDR=NO;IMEX=1\"";
    conn.ConnectionString = connection;
    conn.Open();
    string name_query = "SELECT A FROM[" + ofd.SafeFileName + "]";
    OleDbDataAdapter da = new OleDbDataAdapter(name_query, conn);
    da.Fill(table);
    conn.Close();
    j = table.Rows.Count;
}

動作しません。「FROM...」のクエリの問題です。私は通常、このタイプのクエリを読みます。

"SELECT * FROM [Sheet1$]"

しかし、私は正確に何であるかを見つけることができませんSheet1$。誰かが私に正しいクエリを説明できますか?

2) テーブルの各要素 (3 番目の列のみを含む) にアクセスし、それを文字列変数に保存するには、どうすればよいですか?

どうもありがとう!

4

1 に答える 1

4

シート名を取得するには、データ プロバイダー (connection.getschema) のデフォルトの getschema 機能を使用できます。列ヘッダーがない場合 (HDR=NO)、列には F1、F2 などの名前が付けられるため、3 番目のフィールドについては F3 でクエリを実行できます。完全に確実にしたい場合は、getschema を使用して、最初の getschema で見つかったシート/テーブルの列名を取得することもできます。最後に、文字列リストの値を取得するには、Linq を少し使用できます (例の stringlist を参照)。単一の文字列値を意味するかどうかはわかりませんが、その場合は、linq select で string.join を使用できます。

結合コード開始フォーム接続開始:

conn.Open();
var tableschema = conn.GetSchema("Tables");
var firstsheet = tableschema.Rows[0]["TABLE_NAME"].ToString();
string name_query = "SELECT F3 FROM [" + firstsheet + "]";
OleDbDataAdapter da = new OleDbDataAdapter(name_query, conn);
da.Fill(table);
conn.Close();
j = table.Rows.Count;
var stringlist = table.Rows.Cast<DataRow>().Select(dr => dr[0].ToString()).ToList();
于 2012-06-15T13:47:41.853 に答える