Qu'est-ce que cette requête SQL fait sur un file Excel?

Je ne comprend pas cet extrait de code. Lorsque j'essaie d'un autre file excel, il ne comstack pas correctement. Pourquoi le programmeur a-t-il utilisé F et fait-il reference à la colonne ou à la ligne?

ssortingng 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;"""; ssortingng 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 sont simplement des en-têtes de colonne générés et ne sont PAS des references de cellules. Même si, dans la string de connection, vous avez HDR=YES , si la première ligne est vide, le fournisseur générera automatiquement les noms de colonnes de F1 à F(n) . Pourquoi choisit FI ne sais pas, mais n est simplement l'ordinal de la colonne (à partir de 1), et le nom est préfixé, de sorte qu'il ne peut pas être confondu avec un nombre.

Si vous revenez à la pensée de votre set de données en tant que database plutôt que d'une feuille de calcul, il ne serait pas logique de se référer à une ligne spécifique d'une requête, par exemple, si vous imaginez une petite table

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

Ensuite, pensez en termes de SQL plutôt que d'excel, la requête suivante n'a pas de sens d'get juste la première ligne car A1 = X:

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

Vous devriez utiliser les colonnes comme suit:

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

F9, F10 et ainsi de suite sont des cellules, F (ou toute autre lettre / combinaison) étant l'indicateur de colonne et 9 (ou tout autre nombre) l'index de ligne.

Ce que l'extrait fait ici, crée une connection OLEDB à une database et exécute une requête dans la database. Au début, il est à vérifier que la database est une autre feuille excel. Si c'est le cas, il utilise ce type de connection:

Fournisseur = Microsoft.ACE.OLEDB.12.0; Source de données = "+ dbFilePath + @"; properties étendues = "" Excel 12.0 Xml; HDR = YES "

Sinon, il utilise ceci:

"Provider = Microsoft.Jet.OLEDB.4.0; Source de données =" "" + dbFilePath + @ "" "; Persist Security Info = False; Extended Properties ="

Il s'attend probablement à ce que tout autre type de database soit basée sur l'access, selon mon estimation.

Jet et ACE sont des fournisseurs OLEDB qui vous permettent d'utiliser une syntaxe SQL sur une feuille de calcul Excel et d'autres données dans MS Office. Donc, oui, ce sont des references de cellules qui sont alias. Puisque vous avez la feuille de calcul, vous pouvez regarder dans les cellules et voir quelles sont datatables. Par exemple, je soupçonne que la cellule F9 contient un numéro d'employé.

Dans une feuille de calcul Excel, les colonnes sont énumérées de A à Z , puis AA à AZ etc., les lignes énumérées à partir de 1 vers le haut. Ainsi, la reference de cellule F9 est coordonnée à la colonne F et à la rangée 9 .


Parce que la plage "FROM" Sheet1$A8:V est relative, vous devrez peut-être tarnspose le choix en conséquence. Qu'y a-t-il dans la 17ème rangée? F17 est-il le numéro d'employé?


Peut-être changer la requête pour

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

et commencez par là.