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 SubDerniè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


