1

誰かがこれを手伝ってくれませんか。こういうことをしたいです。

strSQL = SELECT  [filename1].[" & xlSheet.Name & "$].Col1
, [filename1].[" & xlSheet.Name & "$].Col2
FROM [filename1].[" & xlSheet.Name & "$]
UNION ALL
SELECT [filename2].[" & xlSheet2.Name & "$].Col1
, [filename2].[" & xlSheet2.Name & "$].Col2
FROM  [Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filename2+ ";Extended Properties=Excel 12.0;HDR=Yes].[" & xlSheet2.Name & "$]
WHERE [filename1].[" & xlSheet.Name & "$].Col1= [filename2].[" & xlSheet2.Name & "$].Col1

Using conExcel As New OleDb.OleDbConnection()
conExcel.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filename1 + ";Extended Properties=Excel 12.0;HDR=Yes"
conExcel.Open()
cmdSelect.CommandText = strSQL
cmdSelect.Connection = conExcel
intRowsCount = cmdSelect.ExecuteNonQuery()
4

2 に答える 2

2

1つのOleDb接続で2つの異なるファイルをアドレス指定することはできません。2番目のファイル用に別の接続を作成し、その方法でデータをプルする必要があります。

シートからすべてのデータを取得するメソッドを通常コーディングする方法は次のとおりです。

private DataTable RetrieveData(string filename, string sheetName)
{
    string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filename + ";Extended Properties=\"Excel 12.0;HDR=YES\"";
    string query = "SELECT * from [" + sheetName + "$]";
    DataTable dt = new DataTable();

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

        using (OleDbDataAdapter dataAdapter = new OleDbDataAdapter(query, conn))
        {
            dataAdapter.Fill(dt);
        }

        conn.Close();
    }

    return dt;
}

そして、各ファイルでそれを呼び出すことができます:

DataTable dt1 = RetrieveData("filename1.xlsx", "Sheet1");
DataTable dt2 = RetrieveData("filename2.xlsx", "Sheet1");
于 2012-12-03T18:08:05.657 に答える
2

OleDbクエリ内でOleDbのプロバイダー構文を使用しようとしています。クエリ内の外部Excelファイルに接続するための構文は異なります。

また、SQLにはファイルの概念はなく、テーブルの概念しかありません。filename1特定のファイルのフィールドをそのファイル名(たとえば、 )で参照することはできませんfilename2。ただし、UNIONのFROM句の2番目のファイルを2番目のテーブルとして定義できます。

var strSQL = String.Format(@"
    SELECT [{0}$].Col1,
        [{0}$].Col2,
    FROM [{0}$]

    UNION ALL
    SELECT [{1}$].Col1,
        [{1}$].Col1
    FROM [{1}$] IN ""{2}"" ""Excel 12.0;""

    WHERE [{0}$].Col1 = [{1}$].Col1
", xlSheet.Name, xlSheet2.Name, @"C:\path\to\exce\file");

JOINテーブルを使用する場合は、 +のJOIN代わりに使用してください。UNIONWHERE

リンク:

于 2012-12-04T11:17:11.820 に答える