OleDb Excel与c#中的未命名列联接

本文关键字:未命名 Excel OleDb | 更新日期: 2023-09-27 18:27:12

我正试图使用ACE.OleDb在两个工作表之间执行联接。列未命名,因此在ON条件下无法使用列的名称。

使用的ConnectionString为:

String.Format("Provider = {0}; Data Source = {1}; Extended Properties = '"{2}'" ", "Microsoft.ACE.OLEDB.12.0", file, "Excel 8.0;HDR=YES");

对于命名列,类似这样的操作非常好:

select * from [sheet1$] inner join [sheet2$] on [sheet1$].[ID] = [sheet2$].[ID]

?有没有办法在没有命名列ID的情况下完成?我当然知道列的索引,它永远是第一个。

我尝试过这样的东西,但没有成功:

select * from [sheet1$] inner join [sheet2$] on [sheet1$].[$A] = [sheet2$].[$A]

结果是:

Syntax error in JOIN operation

OleDb Excel与c#中的未命名列联接

要使用未命名列,必须在连接字符串中设置HDR=NO

"提供程序=Microsoft.ACE.OLEDB.12.0;数据源=D:''myfile.xlsx;扩展属性=''"Excel 12.0 Xml;HDR=NO''"

使用此设置,每列都会获得类似F1、F2、F3…的名称

你可以这样使用它们:

select * from [sheet1$] inner join [sheet2$] on [sheet1$].[F1] = [sheet2$].[F2]

列的自动命名是指用作表的列。因此,如果您说select * from [sheet1$B1] ...,列B将作为F1 可用