从两个(不同的)Excel文件中选择.NET

时间:2012-12-03 17:16:09

标签: .net excel oledb

任何人都可以帮助我。 我想做这样的事情。

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()

2 个答案:

答案 0 :(得分:2)

使用一个OleDb连接无法处理两个不同的文件。您需要为第二个文件创建另一个连接并以这种方式提取数据。

以下是我通常编写方法来从工作表中检索所有数据的方法:

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

答案 1 :(得分:2)

您正尝试在OleDb查询中使用OleDb的提供程序语法。连接到查询中的外部Excel文件的语法是不同的。

此外,SQL没有文件的概念,只有表格;您无法通过文件名引用特定文件中的字段(例如filename1filename2)。但是,您可以将UNION的FROM子句中的第二个文件定义为第二个表。

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代替UNION + WHERE

链接: