什么是这个SQL查询在Excel文件上做什么?

我不明白这个代码片段。 当我尝试另一个Excel文件,它不能正确编译。 为什么程序员使用F,是指列还是行?

string strProvider; if (dbFilePath.LastIndexOf("xlsx") > -1) strProvider = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + dbFilePath + @";Extended Properties=""Excel 12.0 Xml;HDR=YES"";"; else strProvider = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=""" + dbFilePath + @""";Persist Security Info=False;Extended Properties=""Excel 8.0;"""; string strQuery = "SELECT " + "F9 AS EmpNbr, " + "F10 AS ACCTSTATUS, " + "F1 AS PROJECTEDAGE, " + "F14 AS UPDBALDUE, " + "F15 AS AMTCURRENT, " + "F16 AS AMT30DAY, " + "F17 AS AMT60DAY, " + "F18 AS AMT90DAY, " + "F19 AS AMT120DAY, " + "F20 AS AMT150DAY, " + "F21 AS AMT180DAY " + "FROM [Sheet1$A8:V] " + "WHERE F9 IS NOT NULL AND " + "(F17 > 0 OR F18 > 0 OR F19 > 0 OR F20 > 0 OR F21 > 0) " + " AND Trim(F10) <> 'RETURN MAIL/LEFT COMPANY' " + " AND Trim(Left(F1,3)) IN ('60','90','120','150','180') " + "ORDER BY F9 "; 

F1, F2, F3 etc是简单的生成列标题, 不是单元格引用。 即使在连接string中您有HDR=YES ,如果第一行是空白的,那么提供程序将自动生成F1F(n)列名称。 为什么selectFI不知道,但是n只是列序号(从1开始),而名称是前缀,所以不能与数字混淆。

如果您将数据集转换为数据库而不是电子表格,则在查询中引用特定的行是没有意义的,例如,如果您想象一个小表

 ID | A | B | C | ------------------- 1 | x | y | z | 2 | d | e | f | 3 | j | k | l | 

然后认为在SQL而不是Excel的方面下面的查询没有意义得到第一行,因为A1 = X:

 SELECT A, B, C FROM Sheet1 WHERE A1 = 'x'; 

你将不得不使用列:

 SELECT A, B, C FROM Sheet1 WHERE ID = 1 AND A = 'x'; 

F9,F10等是单元格,F(或任何其他字母/组合)是列指示符,以及9(或任何其他数字)行索引。

这段代码在这里做的是创build一个到数据库的OLEDB连接,并对数据库执行一个查询。 一开始是查看是否数据库是另一个excel表格。 如果是,那么它使用这种连接types:

Provider = Microsoft.ACE.OLEDB.12.0; Data Source =“+ dbFilePath + @”; Extended Properties =“”Excel 12.0 Xml; HDR = YES“

否则它使用这个:

“Provider = Microsoft.Jet.OLEDB.4.0; Data Source =”“”+ dbFilePath + @“”“; Persist Security Info = False; Extended Properties =”

正如我的猜测,它可能期望任何其他types的数据库都是基于Access的。

Jet和ACE是OLEDB提供程序,它允许您在MS Office中使用Excel电子表格中的SQL语法和其他数据。 所以,是的,他们是单元格引用被别名。 既然你有电子表格,你可以看看单元格,看看数据是什么。 例如,我怀疑单元格F9包含一个员工号码。

在Excel Spreasheet中,列从AZAAAZ等枚举,列从1枚举。 所以单元格引用F9在列F和第9行进行协调。


因为“FROM”范围工作表Sheet1$A8:V是相对的,所以您可能必须相应地对select进行初始化。 什么在第17行? F17是员工号码?


也许改变查询

 string strQuery = "SELECT * FROM [Sheet1$A8:V]" 

并从那里开始。