0

Excel ファイルでデータセットをロードする状況があります。すべてのワークシートは、適切なワークシート名をデータテーブル名としてデータテーブルとしてロードされます。私がやろうとしているのは、列名を使用してこのデータテーブルの値を取得することです。しかし、私はエラーを言っていません

「列 'Execute' はテーブル Sheet1 に属していません。」

Excel をデータテーブルにロードしている間、HDR=YES と IMEX=1 を使用しました。HDR=NOでも試してみました。何も機能していません。

以下のコードは、データテーブルにExcelを書き込むことです

foreach (Microsoft.Office.Interop.Excel.Worksheet wsheet in workbook.Worksheets)
{

    string sql1 = "SELECT * FROM [" + wsheet.Name + "$]";
    OleDbCommand selectCMD1 = new OleDbCommand(sql1, SQLConn);
    SQLAdapter.SelectCommand = selectCMD1;

    SQLAdapter.Fill(dataset.Tables.Add(wsheet.Name));

 }

Excel からのデータが各シートに完全にロードされます。しかし、列名でフェッチすることが問題です。

何か提案をしてください

4

2 に答える 2

1

価値があるのは、これが私が使用したコードであり、正常に機能することです。Interop を使用してワークシートをループ処理し、ワークシートが適切に処理されていることを確認していると思います。

string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filename +
    "; Extended Properties=\"Excel 12.0 XML;HDR=YES\"";
DataSet dsValues = new DataSet();

using (OleDbConnection conn = new OleDbConnection(connectionString))
{
    conn.Open();

    using (OleDbCommand cmd = conn.CreateCommand())
    {
        using (OleDbDataAdapter adapter = new OleDbDataAdapter())
        {
            foreach (Excel.Worksheet wsheet in workbook.Worksheets)
            {
                cmd.CommandText = "SELECT * FROM [" + wsheet.Name + "$]";
                adapter.SelectCommand = cmd;
                adapter.Fill(dsValues.Tables.Add(wsheet.Name));
            }
        }
    }
}

が各列の一番上のセルにテキストを見つけられない場合、欠落しているヘッダー名の, , ... 表記OleDbDataAdapterに戻ります。たとえば、Excel ワークシートが次のようになっているとします。F1F2F3

Header1           Header3
Value1   Value3   Value5
Value2   Value4   Value6

次にDataTable、、、、という列を取得Header1F2ますHeader3

また、ヘッダー行として指定する行の上にテキストが含まれていないことを確認する必要があります。そうしないと、一連のFn-type ヘッダーと、その他の予期しないテキストがヘッダー名として取得されます。例えば:

      This is my table
Header1  Header2  Header3
Value1   Value3   Value5
Value2   Value4   Value6

This is my tableF2F3などのヘッダーを持つ DataTable になります。

于 2013-02-20T17:06:23.063 に答える