L'ASP (pour Active Server Page) est un procédé mis au point par
Microsoft pour faciliter l'interactivité entre l'utilisateur d'une page Web et le
serveur.
L'ASP permet notamment de créer des pages Web "à la volée", en fonction
des demandes formulées par le client (l'internaute).
L'ASP est particulièrement bien adapté pour faciliter les échanges de données
entre une page Web et une base de données. On utilise le plus souvent des bases Access ou SQL,
mais rien n'empêche d'utiliser un tableau Excel.
La page Web peut ainsi être mise à jour de manière dynamique à partir du fichier Excel, et inversement,
les données envoyées par la page Web (données saisies dans un formulaire, ou données
concernant l'internaute renvoyées par le navigateur client) peuvent être utilisées pour modifier le tableau
Excel.
La programmation de pages ASP est généralement effectuée en VBScript.
La principale limitation de la technique est liée à la nécessité d'utiliser un serveur supportant l'ASP.
Quelques notions d'ASP
Pour de premières bases de programmation de pages ASP, cliquer ici.
Quelques exemples d'utilisation d'ASP avec Excel
Publier un tableau Excel sur le Web, avec mise à jour permanente :
Le tableau Excel "Table1" du fichier Excel "adresses.xls" contient une liste de personnes
(champs "nom", "prénom", "adresse" et "age").
Pour publier en page Web toujours à jour, il suffit d'utiliser une page ASP qui va chercher les données dans la table et
qui les renvoie dans la page Web :
<% @LANGUAGE = VBScript %>
<HTML><BODY>
<%
set base = Server.CreateObject("ADODB.Connection")
set rs = Server.CreateObject("ADODB.RecordSet")
base.open("DSN=Excel Files;DBQ=c:\serveurpersonnel\adresses.xls;DRIVER={microsoft Excel Driver (*.xls)};")
rs.Open "Table1",base
response.write "<TABLE BORDER>"
response.write "<TR><TD>nom/TD><TD>prénom</TD></TR>"
while not rs.eof
response.write "<TR><TD>" & rs("nom") & "</TD><TD>" & rs("prénom") & "</TD></TR>"
rs.movenext
wend
response.write "</TABLE>"
rs.Close
Base.Close
set rs=nothing
set base=nothing
%>
</BODY></HTML>
Les premières lignes permettent la création d'un objet RecordSet ("rs") correspondant au tableau "Table1".
Les lignes response.write "<TABLE BORDER>" et
response.write "<TR><TD>nom</TD><TD>prénom/TD></TR>",
inscrivent dans la page html les entêtes du tableau.
La boucle While... Wend qui suit va parcourir toutes les lignes de la table (tous les enregistrements du recordset)
juqu'à la dernière (rs.eof quand on est arrivé à la dernière ligne de la table).
Pour chaque ligne de la table, le contenu des colonnes "nom" et "prénom" : rs("nom") et rs("prénom") est renvoyé dans la table html par :
response.write "<TR><TD>" & rs("nom") & "</TD><TD>" & rs("prénom") & "</TD></TR>"
Dès l'ouverture, la page ASP va aller chercher les informations dont elle a besoin dans le fichier Excel, et va renvoyer une page Web contenant une liste
des noms et prénoms toujours à jour.
Publier une sélection d'un tableau Excel sur le Web :
Dans l'exemple précédent, on publie un tableau contenant tous les noms et prénoms de la base (mais pas les adresses).
On peut vouloir publier seulement prénoms des personnes qui s'appellent Dupont :
Rien de plus simple que d'utiliser une condition "if" dans la boucle While... Wend :
while not rs.eof
If rs("nom")="Dupont" then
response.write "<TR><TD>" & rs("nom") & "</TD><TD>" & rs("prénom") & "</TD></TR>"
End If
rs.movenext
wend
Une autre solution, plus rapide si la requête est complexe ou le nombre de lignes important, consiste à filtrer
la table avant de la traiter. On peut utiliser un filtre ou bien profiter des possibilités offertes par le language SQL :
on peut par exemple ouvrir un RecordSet ne contenant que les personnes dont le nom est
Amélie Poulain :
base.open("DSN=Excel Files;DBQ=" & Server.MapPath("/Jac/") & "\adresses.xls;DRIVER={microsoft Excel Driver (*.xls)};")
set rs=base.execute("SELECT * FROM Table1 WHERE nom LIKE 'Poulain' AND prénom LIKE 'Amélie'")
Response.Write rs.age
L'objet rs ne contient que des Amélie Poulain, la ligne Response.Write rs.age
renvoie l'âge de la première de la liste.
Interroger une base de données Excel à partir d'une page Web :
Dans l'exemple précédent, on sait extraire de notre fichier l'âge d'Amélie Poulain.
Pour pouvoir trouver l'âge ou l'adresse de n'importe quelle personne dans la base, il suffit de créer un formulaire
permettant à l'utilisateur client de saisir l'objet de sa recherche.
<% @LANGUAGE = VBScript %>
<%
<HTML><BODY>
response.expires=0
' ****************************************
if request.servervariables("CONTENT_LENGTH")<>0 then
set base = Server.CreateObject("ADODB.Connection")
base.open("DSN=Excel Files;DBQ=" & Server.MapPath("/Jac/") & "\adresses.xls;DRIVER={microsoft Excel Driver (*.xls)};")
set rs=base.execute("SELECT * FROM Table1 WHERE nom LIKE '" & request.form("nom") & "'")
if rs.eof then
response.write request.form("nom") & " n'existe pas dans la base"
' ****************************************
else
response.write rs("prénom") & " " & rs("nom") & " a " & rs("age") & " ans."
end if
' ****************************************
response.end
rs.Close
Base.Close
set rs=nothing
set base=nothing
end if
' ****************************************
' ****************************************
%>
<FORM ACTION="rech_adresse.asp" METHOD='POST'>
nom : <INPUT TYPE='text' NAME='nom'>
<INPUT TYPE='submit'>
</FORM>
</BODY></HTML>
Le programme, enregistré sur le serveur sous le nom de "rech_adresse.asp" se décompose en deux parties, la première partie en VBScript analyse les
données saisies par l'utilisateur client, alors que la seconde, en HTML, constitue le formulaire de saisie.
C'est donc la même page ASP qui va recueillir les données (formulaire de saisie) et les traiter (envoi
de réponse).
C'est la ligne if request.servervariables("CONTENT_LENGTH")<>0 then qui
permet d'orienter le déroulement du programme vers le formulaire (quand aucune demande n'a été transmise à la page)
ou vers le traitement (quand une chaine de données request.servervariables a été soumise à la page).
La deuxième partie est un formulaire HTML des plus classiques :
<FORM ACTION="rech_adresse.asp" METHOD='POST'>
nom : <INPUT TYPE='text' NAME='nom'>
<INPUT TYPE='submit'>
</FORM>
avec une simple zone de saisie de texte <INPUT TYPE='text' NAME='nom'>
et un bouton de validation <INPUT TYPE='submit'>.
Quand on clique sur le bouton de validation, la navigation est redirigée vers la page en cours (rech_adresse.asp)
mais l'URL de destination est complètée par les données du formulaire : rech_adresse.asp?nom=amelie.
Quand cette URL est ouverte (on peut d'ailleurs la taper directement dans la barre d'adresses du navigateur), la page ASP est à nouveau appelée mais
cette fois, request.servervariables("CONTENT_LENGTH") n'est plus nul et c'est la première partie du programme qui est executée.
La valeur qui a été saisie dans le champ "nom" du formulaire est récupérée par
request.form("nom").
Il suffit d'ouvrir un recorset rs ne contenant que les lignes dont le nom est égal à request.form("nom"), puis d'utiliser
rs("age") pour afficher l'âge de la personne sélectionnée.
Modifier une table Excel à partir d'une page Web
Rien n'empeche de modifier le contenu d'une base de données, et notamment d'une table Excel, en executant une
page ASP (à condition bien sûr que la table Excel soit placée sur un serveur qui autorise l'écriture).
On peut donc facilement modifier un tableau Excel à partir d'une page Web.
Une méthode simple consiste à utiliser une ligne de commande SQL (avec SQL UPDATE).
Dans l'exemple qui suit, l'ouverture de la page ASP a pour effet de modifier l'âge de
toutes les Amélie Poulain de la table "Table1" du fichier Excel "adresses.xls", et de le fixer à 20 ans.
<% @LANGUAGE = VBScript %>
<%
set base = Server.CreateObject("ADODB.Connection")
base.open("DSN=Excel Files;DBQ=" & Server.MapPath("/Jac/") & "\adresses.xls;DRIVER={microsoft Excel Driver (*.xls)};")
base.execute("UPDATE Table1 SET age = 20 WHERE nom LIKE 'Poulain' AND prénom LIKE 'Amélie'")
base.Close
set rs=nothing
set base=nothing
%>