Designed by Derf !
38 en ligne   Boutique | Sites | Bar | Forum | PhpBB | Actu | Glossaire | Codes | Tips | Liens | Livres | Lettre  


 Recherche

 NewsLetter





   

ASP et Word

Exporter une base Access dans un fichier Word





Suite à un post dans le forum, Guillaume m'a sympathiquement envoyé ce script qui permet de créer un document MSWord depuis ASP. Le contenu est ici extrait d'une base MSAccess servant à une gestion de contacts/clients.

En lisant le script on pourra retenir les principes généraux :
  • Premier principe : avoir Word sur le serveur, mais ça, vous l'aviez sans doute deviné :-)) Si ce n'est pas le cas vous aurez une erreur sur la méthode CreateObject
  • Deuxième principe : pour pouvoir accéder à WORD en ASP, word doit avoir été utilisé sur le serveur par le compte utilisé lors de l'accès web. Dans word, il faut ouvrir l'éditeur VBA, puis refermer. Ca na l'air de rien, mais ça permet d'écrire un fichier par défaut, genre normal.dot, impossible à créer à distance. Si ce fichier est absent, vous aurez une erreur indiquant : "Impossible d'ouvrir la macro de stockage". Il peut être utilse de rebooter.

  • Création de l'objet Word Set WordApp = CreateObject("word.application")
  • Mise en mode invisible WordApp.Application.Visible = false
  • Création du document Set WordDoc = WordApp.Documents.Add()

  • Pour chaque paragraphe :
    <%
    ' Ajout du paragraphe
    Set newpar = WordDoc.Paragraphs.Add
    set newrange = newpar.range
    ' Définition du style du paragraphe
    with newrange
       .Bold = False
       .Italic = false
       .Font.Name = "Verdana"
       .Font.size = "12"
       .ParagraphFormat.Alignment = 1
       ' ou utilisation d'un style interne : .Style = "Titre 1"
    end with
    ' Insertion du contenu du paragraphe
    newrange.insertBefore("Mon texte dans ce paragraphe" & vbcrlf)
    ' ou d'un saut de page : newrange.insertBreak
    %>



  • Enregistrement du document WordDoc.SaveAs server.mapPath("doc/temp.doc")
  • Déconnexion de Word WordDoc.Close : WordApp.Quit


    Le script complet :

  • access2word.asp 
    <% ' Export Word pour Access - Script de Guillaume

    ' Connexion à la base de données.
    ' Pensez à remplacer db_path par votre chemin + fichier

    set db = Server.CreateObject("ADODB.Connection")
    db.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & db_path

    set rs = Server.CreateObject("ADODB.Recordset")
    rs.Open "SELECT * from Table ", db, 1, 2

    ' déclaration de deux futurs objets
    dim WordApp, WordDoc

    ' Création de l'objet application word
    Set WordApp = CreateObject("word.application")

    ' Pas la peine de démarrer Word sur le serveur, on n'y est pas !!!
    WordApp.Application.Visible = false

    ' Création du document Word
    Set WordDoc = WordApp.Documents.Add()

    ' Parcours du recordset. Pour chaque Item, création de plusieurs paragraphes contenant
    ' les informations de la base.
    ' Puis saut de page.
    ' Attention, là c'est du VBA Word, qui peut parfois être un peu étrange       
    ' Par exemple, l'opérateur := du VBA ne passe pas en ASP. Donc remplacer par 
    ' des parenthèses. 
    ' De même, les constantes VBA genre WdAlignCenter ne sont pas connues en ASP
    ' et retournent donc 0. Il faut donc utiliser leur valeur entière (0, 1, 2...)

    Do while not rs.EOF    

       Set Mypar1 = WordDoc.Paragraphs.Add
       set MyRange1 = Mypar1.range
       MyRange1.InsertBefore(rs.fields.item("Client").value & vbcrlf)       
       MyRange1.Style = "Titre 1"
       MyRange1.ParagraphFormat.Alignment = 1       

       Set newpar = WordDoc.Paragraphs.Add
       set newrange = newpar.range

       with newrange
          .Bold = False
          .Italic = false
          .Font.Name = "Verdana"
          .Font.size = "12"
       end with

       newrange.insertBefore("Téléphone standard : " & rs.fields.item("tel_standard").value & vbcrlf)
       newrange.insertBefore("Activité : " & rs.fields.item("activite").value & vbcrlf)
       newrange.insertBefore(rs.fields.item("Commune").value & vbcrlf)

       newrange.insertBefore(rs.fields.item("CP").value & vbcrlf)
       newrange.insertBefore(rs.fields.item("Adresse3").value & vbcrlf)
       newrange.insertBefore(rs.fields.item("Adresse2").value & vbcrlf)
       newrange.insertBefore(rs.fields.item("Adresse1").value & vbcrlf)

       Set Mypar2 = WordDoc.Paragraphs.Add
       set MyRange2 = Mypar2.range
       MyRange2.InsertBefore("Représentant : " & rs.fields.item("Prenom").value & " " & rs.fields.item("Nom").value)
       MyRange2.Font.Bold = true

       set Myparag2 = WordDoc.Paragraphs.add
       set Myrang2 = Myparag2.range

       with Myrang2
          .Bold = False
          .Italic = True
          .Font.Name = "Verdana"
          .Font.size = "10"
       end With

       myrang2.insertBefore("email : "& rs.fields.item("email").value & vbcrlf)
       myrang2.insertBefore("Mobile : "& rs.fields.item("mobile").value & vbcrlf)
       myrang2.insertBefore("Fax : "& rs.fields.item("fax").value & vbcrlf)
       myRang2.insertBefore("Téléphone : "& rs.fields.item("tel").value & vbcrlf)

       Set Mypar3 = WordDoc.Paragraphs.Add
       set MyRange3 = Mypar3.range
       MyRange3.InsertBefore("Date du contact : " & rs.fields.item("Date").value )
       MyRange3.Font.Bold = False

       Set Mypar4 = WordDoc.Paragraphs.Add
       set MyRange4 = Mypar4.range

       MyRange4.InsertBefore("Commentaire : " & rs.fields.item("commentaire").value )
       MyRange4.Font.Bold = False

       rs.movenext

       if not rs.EOF then
          ' Paragraphe de saut de page tant qu'il reste des enregistrements

          Set Mypar5 = WordDoc.Paragraphs.Add
          set MyRange5 = Mypar5.range
          MyRange5.InsertBreak

          Set Mypar5 = WordDoc.Paragraphs.Add
          set MyRange5 = Mypar5.range
       end if

    Loop              

    ' enregistrement du document au format word

    WordDoc.SaveAs server.mapPath("doc/temp.doc")

    ' fermeture du document
    WordDoc.Close
    ' et de Word
    WordApp.Quit
    ' et du recordSet
    rs.close
    ' et d'Access
    db.close

    Set WordDoc = Nothing
    Set WordApp = Nothing
    Set rs = Nothing
    Set db = Nothing

    ' redirection du navigateur vers le document pour le visualiser, l'imprimer et le sauvegarder en local.
    response.redirect "doc/temp.doc"
    %>


    Merci Guillaume !


    A lire aussi

    1. Création d'un document Word sans Word sur le serveur
    2. MSDN - Rich Text Format (RTF) Specification

    Pour pouvoir écrire dans ce forum, identifiez-vous !

     Lire  05/06/2003 de lmct
    la meme chose mais cote client: pour ceux qui ne pou...
  • 05/06/2003 de Ludo Ce serait l'equivalent de renommer un .html...
  • 05/06/2003 de lmct >>Ce serait l'equivalent de renommer un .ht...
  • 20/08/2003 de levnath Bonjour, Peut-on déterminer une entê...
  •   v1.3p © ASP-PHP.net 2002  

    Guillaume le 24/09/2003 (120 828 hits)
    Didier Ils l’ont fait avec SQL Server. Découvrez comment !
    Concours de programmation Flash !
    Au fil des news  
    ASP - Redimensionner Image + Picto après Upload - Galerie photos, revue de presse, ...
    But : Proposer aux visiteurs de charger des images sans se soucier du "poids" de l'image, puisqu'on ...
    Exporter et Importer un site SharePoint - Comment déplacer un site SharePoint
    Une question est très régulièrement posée à tout responsable de ferme SharePoint : Comment ...
    Bon anniversaire - Comment le souhaiter à ses membres ?
    Avoir un site, c'est bien. Avoir des inscrits, c'est mieux. Souhaiter leur anniversaire, c'est ...
    Audio & Vidéo - Multimédia dans ses pages web
    AUDIO/VIDEO : QuickTime, MediaPlayer, RealPlayer, FlashPlayer, ... : Du multimédia dans ses pages ...
    Magazines - Le Hors-Série .Net de Programmez !
    PHP - Administrer en ligne - Protection des pages
    Protéger ses pages pour administrer son site en ligne en (relative) sécurité (PHP).
    Communautés - Concours de programmation Flash !
    [MAJ] Afficher ses images à la taille voulue - Utilisation du composant IMGSIZE
    Ajout de la vérification de l'existence du fichier et d'un test d'erreur de retour du composant ...
    Protéger ses Images - Propriété intellectuelle - Vie privée
    Je me suis penché sur la question en tant qu'artiste moi-même, et concepteur de site web pour ...
    Création de miniatures - Fonction php de création
    Cette fonction sert à créer des miniatures.
    ASP - ADMINISTRER en ligne - Protection des pages
    Protéger ses pages pour administrer son site en ligne en (relative) sécurité (ASP).
    JavaScript - Numéros de ligne à gauche d'un textarea
    Protection - Sécurité - Mise au point - Précautions - Solutions
    Même sans être paranoïaque, on a tous entendu parler de failles de sécurité, piratage informatique, ...
    AspSmartUpload - Mode d'Emploi
    Le composant ASPSmartUpload (gratuit) permet de gérer les téléchargements de FICHIERS ou de ...
    JavaScript - Contrôler une date saisie dans un formulaire
    HTML - Ajouter un fichier multimédia dans une page web
    HTML - Musique de Fond sur son site
    Afficher ses images à la taille voulue - Utilisation du composant IMGSIZE
    Devant la diversité des formats d'image actuels, il est parfois nécessaire de connaître les ...
    CSS - Icône Personnalisée sur son site
    JavaScript - Interdire Clic Droit et message d'alerte
    CSS - Curseur Personnalisé sur son site
    JavaScript - Fenêtre à la Dimension de l'Ecran
    La gouvernance SharePoint - Partie 1 - Première partie sur la gouvernance dans Sharepoint
    Un projet de mise en place de ferme SharePoint est un projet important pour toute structure ...
    ASP - Redimensionner Image + Picto après Upload
    ASP - Administration en ligne : Protection des Pages
    PHP - Administration en ligne : Protection des Pages
    PHP - Redimensionner Image + Picto après Upload
    ASP - Boutons ON OFF pour tout type de musique
    PHP - Boutons ON OFF pour tout type de musique
    SharePoint et OpenSearch - Utiliser l'option OpenSearch avec SharePoint
    Nous avons maintenant un site SharePoint fonctionnel associé à un moteur de recherche efficace. Il ...
    Magazines - Le n°109 de Programmez est disponible
    SharePoint et PowerShell - Utilisation de PowerShell pour un script d'admin
    PowerShell est le nouveau moteur de script de Microsoft. Il permet tout comme VBScript de créer des ...
    [MAJ] [PHP] - Validation de formulaire - Gestion des erreurs via style CSS
    Ajout de la sécurité anti sql injection de premier niveau.
    Adobe - Adobe propose 3 nouvelles versions bêta publiques
    VBScript - Interroger un serveur MYSQL
    Divers - Web developpement
    PHP5 - Copie de fichiers distants
    Les stratégies de Backup dans WSS V3 - Quelles sont les différentes solutions de BackUp
    Nous avons vu au travers des précédents articles différents sujets pour Windows SharePoint Services ...
    Création d'une solution de déploiement SharePoint - Créer la solution pour notre composant SharePoint
    Après avoir suivi toutes les étapes pour la création de notre composant (Feature) SharePoint, il ...
    Magazines - Le n°108 de Programmez est disponible
    Tutorial : HTML | Scripting | ASP-PHP | ASP.net | SQL Server | XML
    Sharepoint | XAML | Pocket | Dreamweaver | VML | Divers
      Scripts : Scripting | ASP-PHP | ASP.net | Divers
      Boutique | Annuaire | Bannières | Météo | Tribune | Partenariats
    v3 © Didier 2003   
     

    Corpo Sciences de Reims Partitions gratuites Carte, météo, annonces
     Codes Sources DotNet Project The Inquirer FR TechNet Groupes Utilisateurs Microsoft El Roubio ASP-magazine MVP Wygwam CodePPC