xlWebQuery et Format des données
Bonjour,
Dans une feuille je souhaite insérer des données provenant d'une page asp sur un internet.
Soit manuellement par le menu Données/A partir du Web.
Soit parce cette MAcro
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| Sub testweb2()
Set shFirstQtr = Worksheets("Web2")
Set qtQtrResults = shFirstQtr.QueryTables _
.Add(Connection:="URL;http://www2.transports.equipement.gouv.fr/registres/marchandises/1.htm", _
Destination:=shFirstQtr.Cells(1, 1))
With qtQtrResults
.PreserveFormatting = True
.WebFormatting = xlNone
.WebPreFormattedTextToColumns = True
.BackgroundQuery = False
.Refresh BackgroundQuery:=False
End With
End Sub |
Cela fonctionne dans les 2 cas sauf pour certaines données qui commencent par un zéro significatif mais qui arrivent converties en Nombre
comme les codes postaux pour les département 01,02,03,04,05,06,07,08,09...
donc au lieu d'avoir : 02800 (affichage web) j'ai 2800 dans ma cellule
J'ai bien paramétré ma colonne en "Texte" au préalable , avec l'option "Conserver le format des cellules" dans les propriétés de la plage de données externe
mais je ne trouve pas comment forcer le format arrivant en texte ?
SOLUTION AVEC MODIFICATION DE LA SOURCE ASP
Re,
A force de chercher, on fini par trouver...
Voici une solution qui permet de définir un type de données dans la page ASP, que Excel interprète ensuite correctement avec une webquery
http://www.cnblogs.com/aji88/archive...9/2076162.html
Citation:
The solution? The mso-number-format style attribute, to be put on table cells (<td>). Several number formats are available. These are some of the more common:
mso-number-format:\@
text
mso-number-format:"0\.000"
3 decimals
mso-number-format:\#\,\#\#0\.000
comma separators (and 3 decimals)
mso-number-format:"mm\/dd\/yy"
Date format
mso-number-format:"d\\-mmm\\-yyyy"
another date format
mso-number-format:Percent
percent
'mso' stands for Microsoft Office, so these formatting hints will hold if table data is imported into any Office product.
To solve our initial problem -- not dropping leading zeros from account numbers, we used the text format in a CSS style sheet:
td.accountnum
{mso-number-format:\@}
Then, on the the actual table, just use the accountnum class:
<td class="accountnum">01070000<td>
Donc j'ai modifié ma page asp de la sorte :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| <!DOCTYPE html>
<%@ Language=VBScript %>
<%
Set Conn = Server.CreateObject("ADODB.Connection")
conn.CursorLocation = 2
Conn.open Application("CS_DATA")
Set RS = Server.CreateObject("ADODB.recordset")
Server.ScriptTimeout = 300
%>
<HTML>
<HEAD>
<style type="text/css">
td.accountnum
{mso-number-format:\@}
</style>
<TITLE>Export</TITLE>
</HEAD>
<body bgcolor="#FFFFFF">
<%
'On recupère les parametres =============================================================
sContrat = Request("Contrat")
sErr=""
Sql = "SELECT ctr.CTR_REF AS Contrat
Sql = Sql & " FROM rve.contrat@RVE_DBLINK ctr "
Sql = Sql & " WHERE CTR.CTR_REF IN ('" + sContrat + "') "
rs.Open sql, conn
%>
<table border="1" width="100%" style="border-collapse: collapse" name="Donnees" id="Donnees">
<tr>
<%for each x in rs.Fields
response.write("<th FILTER=ALL>" & x.name & "</th>")
next %>
</tr>
<% do until rs.EOF%>
<tr>
<%for each x in rs.Fields%>
<%
select case x.Type
case 5,131,139 'numérique
%>
<td style="empty-cells: show">
<%case 129,130,200,201,202,203 'texte
if IsDate(X.Value) then
%>
<td style="empty-cells: show">
<% else
%>
<td class="accountnum" style="empty-cells: show">
<% end if
case else
%> <td style="empty-cells: show"> <%
end select
Response.Write(x.value)%></td>
<%next
rs.MoveNext%>
</tr>
<%loop
rs.close
conn.close
%>
</table>
</body>
</html> |
Vous l'avez bien compris c'est bad pour des pages ASP qu'on ne maîtrise pas !