Pages: 1
- Sujet précédent - [ArcGIS 9.0] Intégration documents ArcMAP / MS Word & Cie - Sujet suivant
#1 Wed 30 November 2005 15:31
[ArcGIS 9.0] Intégration documents ArcMAP / MS Word & Cie
Bonjour à tous,
Depuis maintenant fin juillet je travaille sur une "application métier" en VBA (oui je sais apllication métier et VBA ne font pas bon ménage, mais nous avons pas encore de licence VB et appeler mon développement "des macros", sans vouloir me surestimer, serait vraiment se tromper). Bref, les modules de saisie et d'édition sont opérationnels et en fonction auprès de 4 techniciens, j'en arrive aujourd'hui au module d'impression. Ce module devrait être capable de sortir un rapport en PDF intégrant un atlas ArcMap, des tableaux de statistiques issues des données de la géodatabase (tableaux sous Word, Excel ou Etat Access je ne sais même pas quelle serait la bonne solution), des documents Word type... etc...
Et là autant je commence à avoir un certain niveau en VBA sur ArcMap pour de l'édition autant exporter des données sous autre logiciel puis réintégrer dans un même document à finalement metttre en PDF... je sèche complètement... je suis même incapable de le faire directement sous ArcMAP alors en VBA...
Quelqu'un a-t-il déjà tenter de telles manipulations, même sans passer par VBA, et si oui pourrait-il m'aiguiller au plus vite.
MERCI ENORMEMENT D'AVANCE
Dernière modification par MacGeol (Wed 30 November 2005 15:31)
____________________________________________
MacGeol
Hors ligne
#2 Wed 30 November 2005 18:46
- crevette
- Participant actif
- Lieu: Noisy Le grand
- Date d'inscription: 13 Sep 2005
- Messages: 50
Re: [ArcGIS 9.0] Intégration documents ArcMAP / MS Word & Cie
Tu fais un modele de document sous word avec une macro permettant d'inclure ton fichier image (extrait d'arcmap) dans ce document à une place défini.
Sous arcmap, tu crées une macro enregistrant la vue que tu veux en jpg (tu peux aussi ajouter la création d'un fichier texte avec les chemins des images).
La macro sous word te permet d'aller chercher l'image enregistrée et de l'insérer dans le document (tu peux aussi passer par la lecture d'un fichier texte si tu as plusieurs images à insérer ou plusieurs fiches a créer).
Et dans ta macro sous word tu rajoutes une ligne pour enregistrer le fichier en pdf.
Hors ligne
#3 Thu 01 December 2005 12:06
Re: [ArcGIS 9.0] Intégration documents ArcMAP / MS Word & Cie
Merci beaucoup chère Crevette,
Ca ce sont des bonnes idées que je vais mettre en application. Par contre j'avoue ne jamais avoir fait de VBA Word alors que j'ai désormais un certains niveau sur VBA ArcMAP d'où ma peur en ce qui concerne les macros Word.
D'autre part j'aimerais une précision sur l'utilisation d'un fichier texte, je trouve l'idée interresante, mais pourrais-tu préciser ta pensée.
Autre chose, peut-on piloter Excel ou Acces par une macro Word (interopérabilité Office?) pour intégrer directement dans Word des tableaux de statistiques?
Une autre petite précision tant qu'on y est, je comme je te disais les macros Word c'est pas mon fort donc si par exemple tu pouvais juste me dire comment on fait pour enregister le fichier en pdf sous WOrd ça serait déjà un grand pas.
MERCI vraiment beaucoup sincérement pour ton aide.
Dernière modification par MacGeol (Thu 01 December 2005 12:18)
____________________________________________
MacGeol
Hors ligne
#4 Fri 02 December 2005 10:26
- nicolas valls
- Participant assidu
- Date d'inscription: 28 Oct 2005
- Messages: 154
Re: [ArcGIS 9.0] Intégration documents ArcMAP / MS Word & Cie
Pour le VBA Word, y'a rien de plus simple. Si vous ne savez pas faire une macro, vous activez l'espion (outil==>macro==>nouvelle macro)
A partir de là word enregistre tous ce que vous faites dans un module vba. Un fois votre action terminée il faut cliquer sur le bouton d'arret.
Il ne reste plus qu'a aller dans l'éditeur VBA et le code correspondant à votre action est là.
Certes, cette solution n'est pas la meilleure (le code reste lourd) mais permet dans un premier temps de dégrossir le travail
Si seulement cet espion existait sous vba Arcmap ca faciliterai bien des choses
Nicolas Valls
nicolasvalls@ yahoo.fr
Hors ligne
#5 Fri 09 December 2005 13:41
- crevette
- Participant actif
- Lieu: Noisy Le grand
- Date d'inscription: 13 Sep 2005
- Messages: 50
Re: [ArcGIS 9.0] Intégration documents ArcMAP / MS Word & Cie
Ca des bonnes idées que je vais mettre en application. Parcontre j'avoue ne jamais avoir fait de VBA Word alors que j'ai désormais un certains niveau sur VBA ArcMAP d'où ma peur en ce qui concerne les macros Word.
// l'aide de word en vba est bien fait, tu trouves pas mal de choses dedans.
D'autre part j'aimerais une précision sur l'utilisation d'un fichier texte, je trouve l'idée interresante, mais pourrais-tu préciser ta pensée.
// en fait tu t'en sers pour inscrire le chemin de tes images dedans et dans word, ta macro lis ce fichier pour insérer les images.
Une autre petite précision tant qu'on y est, je comme je te disais les macros Word c'est pas mon fort donc si par exemple tu pouvais juste me dire comment on fait pour enregister le fichier en pdf sous WOrd ça serait déjà un grand pas.
// la je suis pas sure mais je pense qu'il faut plus faire une fonction imprimant en pdf car en enregistrant sous tu n'as pas les extensions pdf alors qu'en imprimant normalement tu as une imprimante virtuel faisant des pdf... mais que si tu as un logiciels créant des pdf sur ton ordinateur...
Hors ligne
#6 Thu 22 December 2005 15:18
- DrassCentreSSE
- Participant occasionnel
- Date d'inscription: 17 Nov 2005
- Messages: 13
Re: [ArcGIS 9.0] Intégration documents ArcMAP / MS Word & Cie
Voici un extrait de fonction de pilotage MS Word que jai créée pour ArcMap 8/9. Elle peut donner des pistes... Cela nécessite l'activation des références MS Word (97 et supérieur) et MS scripting runtime.
Code:
Public Function EditerDocumentWord(ByVal strCheminModeleWord As String, ByVal strCheminDocumentWord As String, ByRef dicMotsReserves As Dictionary) As Boolean ' Description : edite un document MS Word à partir d'un modèle MS Word et d'un dictionnaire de mots réservés et indique ' si l 'édition a été effectuée ' ' Paramètres : ' ' - strCheminDocumentWord : chemin absolu du document MS Word à éditer ' - strCheminModeleWord : chemin absolu du modèle MS Word ' - dicMotsReserves : mots réservés à insérer dans le document Word. On Error GoTo Erreur Dim pApplicationWord As Word.Application ' Application Word Dim pDocumentWord As Word.Document ' Document Word à produire Dim objShape As InlineShape ' Objet image si l'utilisateur souhaite insérer des images Dim pFileSystemObject As FileSystemObject ' Accès au système de fichier Dim pCodesMotsReserves() Dim strSignet As String ' Nom du signet Dim strCodeParametre As String ' Code du paramètre Dim i, j As Integer ' Compteur Dim intNbSignets As Integer ' Nombre de signets Dim intNbConseils As Integer ' Nombre de conseils non sélectionnés Dim numboucle As Long ' Nombre de boucles pour les chaînes de caractères de plus de 200 caractères Set pFileSystemObject = New FileSystemObject 'si le modèle n'existe pas, on arrête If Not (pFileSystemObject.FileExists(strCheminModeleWord)) Then MsgBox "Le modèle '" & strCheminModeleWord & "' est introuvable. Edition abandonnée...", vbExclamation, "Fichier introuvable" Exit Function End If 'si le document à éditer existe déjà, on demande si on veut le remplacer If pFileSystemObject.FileExists(strCheminDocumentWord) Then If MsgBox("Le fichier '" & strCheminDocumentWord & "' existe déjà." & vbCrLf & "Voulez-vous le remplacer?", _ vbExclamation + vbYesNo, "Fichier existant") = vbNo Then Exit Function End If End If ' Récupération de l'application Word Set pApplicationWord = GetWord 'on place le processus Word en tâche de fond pour ne pas ralentir l'édition pApplicationWord.Visible = False ' Copie du modèle. Cette copie devient le document à produire. pFileSystemObject.CopyFile strCheminModeleWord, strCheminDocumentWord, True 'Ouverture du document MS Word pApplicationWord.Documents.Open FileName:=strCheminDocumentWord 'Exemple de parcours de signets du document intNbSignets = pApplicationWord.ActiveDocument.Bookmarks.Count For i = 1 To intNbSignets 'on récupère le signet en majuscules strSignet = UCase(pApplicationWord.ActiveDocument.Bookmarks.Item(i).Name) 'si le signet existe dans le dictionnaire des mots réservés If dicMotsReserves.Exists(strSignet) Then 'on effectue le traitement de son choix 'sinon, on supprime ce que le signet contient Else pApplicationWord.ActiveDocument.Bookmarks(strSignet).Select 'exemple pour un tableau 'pApplicationWord.Selection.Tables(1).Delete 'exemple pour une ligne de tableau 'pApplicationWord.Selection.Rows.Delete 'exemple avec du texte Selection.Delete Unit:=wdCharacter, Count:=1 i = i - 1 End If If i = pApplicationWord.ActiveDocument.Bookmarks.Count Then Exit For End If Next i 'Injection du dictionnaire dans le document pCodesMotsReserves = dicMotsReserves.Keys For i = 0 To dicMotsReserves.Count - 1 If Not IsNull(dicMotsReserves(pCodesMotsReserves(i))) Then ' possibilité d'insérer des images 's'agit-il d'un fichier image ? (test sur l'extension censée terminer la chaine) If InStr(1, ".bmp.jpg.png.gif", Right(dicMotsReserves(pCodesMotsReserves(i)), 4)) <> 0 Then 'le fichier est-il présent sur le disque ? If pFileSystemObject.FileExists(dicMotsReserves(pCodesMotsReserves(i))) Then 'on se positionne en page 1 pApplicationWord.Selection.GoTo What:=wdGoToPage, Which:=wdGoToFirst 'on recherche le mot réservé pApplicationWord.Selection.Find.ClearFormatting With pApplicationWord.Selection.Find .Text = pCodesMotsReserves(i) .Replacement.Text = "" .Forward = True .Wrap = wdFindStop .Format = False .MatchCase = False .MatchWholeWord = False .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False End With 'on remplace le mot par une insertion d'image 'on répète l'opération tant que le mot clé est trouvé Do While pApplicationWord.Selection.Find.Execute Set objShape = pApplicationWord.Selection.InlineShapes.AddPicture(FileName:=dicMotsReserves(pCodesMotsReserves(i)), LinkToFile:=False, SaveWithDocument:=True) With objShape .LockAspectRatio = True .ScaleHeight = 100 .ScaleWidth = 100 End With Set objShape = Nothing Loop End If 'ce n'est pas une image mais du texte Else 'la chaine dépasse t'elle 200 caractères ? 'traitement nécessaire car on utilise la fonction rechercher/remplacer de MS Word qui n'accepte que 255 caractères au maximum If Len(dicMotsReserves(pCodesMotsReserves(i))) > 200 Then 'on calcule le nombre de boucles If Len(dicMotsReserves(pCodesMotsReserves(i))) Mod 200 = 0 Then numboucle = Len(dicMotsReserves(pCodesMotsReserves(i))) / 200 Else numboucle = (Len(dicMotsReserves(pCodesMotsReserves(i))) / 200) + 1 End If 'on remplace par paquet de 200 caractères auxquels on ajoute le mot réservé pour permettre le déroulement des boucles For j = 0 To (numboucle - 1) With pApplicationWord.Selection.Find .Text = pCodesMotsReserves(i) .ClearFormatting .Replacement.Text = Mid(dicMotsReserves(pCodesMotsReserves(i)), (j * 200) + 1, 200) & pCodesMotsReserves(i) .Replacement.ClearFormatting .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchAllWordForms = False .MatchWildcards = False .MatchSoundsLike = False End With pApplicationWord.Selection.Find.Execute Replace:=wdReplaceAll Next j 'on supprime le mot réservé With pApplicationWord.Selection.Find .Text = pCodesMotsReserves(i) .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False 'Non respect de la casse .MatchWholeWord = False .MatchAllWordForms = False .MatchWildcards = False .MatchSoundsLike = False End With pApplicationWord.Selection.Find.Execute Replace:=wdReplaceAll 'la chaîne de caractères n'excéde pas 200 caractères 'rechercher-remplacer classique Else With pApplicationWord.Selection.Find .Text = pCodesMotsReserves(i) .ClearFormatting .Replacement.Text = dicMotsReserves(pCodesMotsReserves(i)) .Replacement.ClearFormatting .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchAllWordForms = False .MatchWildcards = False .MatchSoundsLike = False End With pApplicationWord.Selection.Find.Execute Replace:=wdReplaceAll End If '200 caractères End If 'image ou texte End If 'non null Next i 'enregistrement du document pApplicationWord.ActiveDocument.Save 'fermeture du document pApplicationWord.ActiveDocument.Close MsgBox "Edition terminée...", vbOKOnly, "Fin de création" 'tout s'est bien passé EditerDocumentWord = True Set pApplicationWord = Nothing Set pDocumentWord = Nothing Set pFileSystemObject = Nothing Exit Function Erreur: MsgBox "Erreur " & vbCrLf & Err.Number & " : " & Err.Description, vbCritical, "Erreur" pApplicationWord.Quit SaveChanges:=wdDoNotSaveChanges Set pApplicationWord = Nothing Set pDocumentWord = Nothing Set pFileSystemObject = Nothing EditerDocumentWord = False End Function Public Function GetWord() As Object ' Description : retourne une référence sur l'application Word On Error Resume Next Dim pApplicationWord As Object Set pApplicationWord = GetObject(, "Word.Application") ' L'application n'est pas ouverte : ouverture de l'application If Err.Number <> 0 Then Set pApplicationWord = CreateObject("Word.Application") Err.Clear End If Set GetWord = pApplicationWord Set pApplicationWord = Nothing End Function Public Sub test() 'Voici un extrait de fonction de pilotage de MS Word créée sous ArcMap 8/9. Elle peut donner des pistes... Dim blnEdition As Boolean Dim dicDico As New Dictionary dicDico.Add "TITRE", "C. Iuli Caesaris Commentariorum de Bello Civili" dicDico.Add "AUTEUR", "César" dicDico.Add "CITATION", "Litteris C. Caesaris consulibus redditis aegre ab his impetratum est summa tribunorum plebis contentione, ut in senatu recitarentur; ut vero ex litteris ad senatum referretur, impetrari non potuit. Referunt consules de re publica in civitate. . Incitat. L. Lentulus consul senatu rei publicae se non defuturum pollicetur, si audacter ac fortiter sententias dicere velint; sin Caesarem respiciant atque ejus gratiam sequantur, ut superioribus fecerint temporibus, se sibi consilium capturum neque senatus auctoritati obtemperaturum: habere se quoque ad Caesaris gratiam atque amicitiam receptum. In eandem sententiam loquitur Scipio: Pompeio esse in animo rei publicae non deesse, si senatus sequatur; si cunctetur atque agat lenius, nequiquam ejus auxilium, si postea velit, senatum imploraturum." dicDico.Add "IMAGE", "chemin absolu d'accès à l'image ex : d:\images\test.jpg" blnEdition = EditerDocumentWord("le chemin absolu du modèle MS Word ex. d:\modeles\modele.doc", "le chemin de sauvegarde ex : d:\documents\test.doc", dicDico) End Sub
Dernière modification par DrassCentreSSE (Thu 22 December 2005 15:19)
Hors ligne
Pages: 1
- Sujet précédent - [ArcGIS 9.0] Intégration documents ArcMAP / MS Word & Cie - Sujet suivant