Comment accéder à une colonne de requête contenant plusieurs mots ?
-
12-12-2019 - |
Question
J'utilise une lecture cfspreadsheet pour lire une feuille dans un objet de requête.
<cfspreadsheet action="read" src="TestExcel.xls" sheet="1" query="spreadsheetData" headerrow="1" excludeHeaderRow="true">
Le problème est que certains en-têtes contiennent plus d’un mot.Je me retrouve donc avec une requête un peu comme ceci :
ID Name Start Date End Date
3 Test 1/1/2009 1/1/2013
17 Test 2 11/11/2010 11/11/2012
Si j'essaie d'accéder à l'une des colonnes comportant un espace dans le nom de la colonne, j'obtiens une erreur.
<cfoutput query="spreadsheetData">
#start date#
</cfoutput>
J'ai essayé #[start date]#
aussi, mais cela n'a pas fonctionné.Je ne peux pas contrôler le format de la feuille Excel que je reçois.Existe-t-il un moyen d'accéder aux colonnes d'en-tête à plusieurs mots ?
La solution
Lorsque vous utilisez la notation entre crochets, le contenu doit se terminer sous la forme d'une chaîne, donc :
<cfoutput query="spreadsheetData">
#spreadsheetData['start date'][CurrentRow]#
</cfoutput>
Si vous n'utilisez pas de guillemets, vous transmettez une variable, ce qui se fait ainsi :
<cfset ColumnName = 'start date' />
<cfoutput query="spreadsheetData">
#spreadsheetData[ColumnName][CurrentRow]#
</cfoutput>
Notez que vous devez utiliser le nom de la requête avant les crochets - si vous écrivez simplement [ColumnName]
alors il s'agit d'une notation de création de tableau en ligne, sans accès à la variable.
De plus, si vous l'utilisez en dehors d'une boucle de requête (c'est-à-dire pas dans cfoutput
/cfloop
avec l'attribut de requête), vous devez également définir la portée du CurrentRow
variable, c'est-à-dire
spreadsheetData[ColumnName][spreadsheetData.CurrentRow]
(ou fournissez votre propre numéro/variable explicite).
Comme Leigh le note ci-dessous, pour un comportement spécifique à cfspreadsheet, vous pouvez également spécifier le columnnames
attribut, pour renommer la colonne en quelque chose de directement accessible, par exemple.
<cfspreadsheet query=".." columnNames="Foo,Bar,StartDate,Etcetera" ..>