2016-03-27 1 views
0

Serveur: CF10 Plate-forme: Windows et Linux (Win dans Windows DEV PROD)Comment correctement les dates de format avec SpreadsheetFormatColumns

Je suis générer un fichier Excel pour un client, mais ayant du mal à obtenir des champs de date à se comporter correctement. Tout le reste semble bien fonctionner mais quand j'envoie les données à exceler pour être générées, Excel le traite comme du texte. Ainsi, lorsque le champ est trié, il est géré comme tel.

Plus d'infos: La colonne que j'essaie de configurer s'appelle Date d'arrivée, elle arrive au format mm/dd/yyyy. (J'ai essayé de format est le m/d/yy, mais quand il arrive dans la feuille qui ne fonctionne pas aussi bien.)

Code:

<cfset filename = expandPath("./TDYData_(#DateFormat(now(),'mmddyy')#).xls")> 
<!--- Make a spreadsheet object ---> 
<cfset s = spreadsheetNew("TDYData")> 
<!--- Add header row ---> 
<cfset spreadsheetAddRow(s, "TDY Phase,Full Name,Employment Category,Gender,Originating Agency,Agency Comments,Originating Office,Office Comments,Originating Country,TDY Request Received,Mission Office Supported,Type of TDY Support,eCC Submission,eCC Approval,eCC Point of Contact,Date of Departure from Originating Country,Arrival Date,Departure Date,Accomodation Type,Accomodation Comments,Assigned Desk,Local Mobile Number,TDY Comments")> 

<!--- format header ---> 
<cfset spreadsheetFormatRow(s, {bold=true,fgcolor="lemon_chiffon",fontsize=10}, 1)> 
<!--- Add query ---> 
<cfset spreadsheetAddRows(s, myExcel)> 
<cfset SpreadSheetAddFreezePane(s,0,1)> 

<cfset SpreadsheetFormatColumn(s, {dataformat="m/d/yy"}, 17) /> 
<cfset SpreadsheetFormatColumn(s, {alignment="right"}, 16) /> 


<cfheader name="content-disposition" value="attachment; filename=TDY_Data_(#DateFormat(now(),'mmddyy')#).xls"> 
<cfcontent type="application/msexcel" variable="#spreadsheetReadBinary(s)#" reset="true"> 

Toutes les idées?

Merci

+0

(Éditer) Gardez à l'esprit que la gestion de format de cellule diffère dans CF9/10/11, mais ... habituellement, vous devez appliquer tous les formats de cellule avant d'ajouter des données aux cellules. (On dirait que le code ci-dessus l'applique après). Avez-vous essayé cela? Il semble fonctionner correctement dans CF11. – Leigh

Répondre

0

J'ai donc une solution viable:

<cfset therow = 0> 
<cfoutput query="myExcel" startrow="1"> 
    <cfset therow = myExcel.currentrow + 1> 
    <cfif len(eCCSubDate) GT 0> 
    <cfset SpreadsheetSetCellFormula(s,"DATEVALUE(#Chr(34)##eCCSubDate##Chr(34)#)",therow,13)> 
    </cfif> 
    <cfif len(eCCApproved) GT 0> 
    <cfset SpreadsheetSetCellFormula(s,"DATEVALUE(#Chr(34)##eCCApproved##Chr(34)#)",therow,14)> 
    </cfif> 
    <cfif len(DateDepartCntry) GT 0> 
    <cfset SpreadsheetSetCellFormula(s,"DATEVALUE(#Chr(34)##DateDepartCntry##Chr(34)#)",therow,16)> 
    </cfif> 
    <cfif len(DateArrive) GT 0> 
    <cfset SpreadsheetSetCellFormula(s,"DATEVALUE(#Chr(34)##DateArrive##Chr(34)#)",therow,17)> 
    </cfif> 
    <cfif len(DateDepart) GT 0> 
    <cfset SpreadsheetSetCellFormula(s,"DATEVALUE(#Chr(34)##DateDepart##Chr(34)#)",therow,18)> 
    </cfif>   


</cfoutput> 

Je définir une variable pour un compteur de retour en boucle puis sur la requête et assurez-vous que ce ne est pas une cellule vide, puis appliquer une formule à la cellule le chr (34) sont des guillemets puis la valeur de données. En utilisant ceci, (après l'écriture des données) il se comportera au moins comme un champ de date réel.