Pages: 1
- Sujet précédent - [ArcGis 9.2] Source d'un fichier excel servant de jointure - Sujet suivant
#1 Thu 21 February 2013 18:18
- Razorbak
- Participant assidu
- Lieu: Clermont Ferrand
- Date d'inscription: 7 Oct 2007
- Messages: 505
[ArcGis 9.2] Source d'un fichier excel servant de jointure
Bonjour,
J'ai fait une jointure attributaire entre une couche SIG et un fichier excel dans un projet mxd, sans importer directement le fichier excel dans le projet.
Comment puis-je faire pour retrouver le fichier excel que j'ai utilisé, et également l'onglet utilisé ?
Je vous remercie.
Bonne soirée
Hors ligne
#2 Thu 07 March 2013 08:23
- Razorbak
- Participant assidu
- Lieu: Clermont Ferrand
- Date d'inscription: 7 Oct 2007
- Messages: 505
Re: [ArcGis 9.2] Source d'un fichier excel servant de jointure
Bonjour,
Personne ne sait ou ma question n'est pas assez précise ?
Je récapitule :
- pour faire une jointure, on a le choix d'importer directement une feuille excel dans un projet (elle apparait alors dans l'onglet Source, et le chemin du fichier excel apparait) mais on peut également faire une jointure directement avec la même feuille excel, sans l'importer dans le mxd, en faisant Parcourir dans nos répertoires.
Si j'enregistre le mxd, la jointure est toujours présente à sa réouverture, mais pas de trace de chemin.
Dans le second cas, comment puis-je retrouver quelle feuille excel j'ai interrogé ?
Je vous remercie. Bonne journée
Hors ligne
#3 Thu 07 March 2013 10:28
Re: [ArcGis 9.2] Source d'un fichier excel servant de jointure
Bonjour,
Peut-être qu'en utilisant l'un de ces deux script VBA :
- List MXD Sources (ver.3)
- List Layer Sources/Paths
Ou en les complètant...
A+
Franck
PS : les outils mis à disposition par Kevin le font peut-être aussi : Lister des couches dans un MXD
Hors ligne
#4 Thu 07 March 2013 16:18
- Razorbak
- Participant assidu
- Lieu: Clermont Ferrand
- Date d'inscription: 7 Oct 2007
- Messages: 505
Re: [ArcGis 9.2] Source d'un fichier excel servant de jointure
Re-bonjour,
Merci.
J'ai regardé et voici les résultats :
- le premier script permet de lister les couches et les tables attributaires présentes dans le fichier mxd. On a bien leur chemin.
On récupère aussi les ensembles de définition présents ou non sur chaque couche.
Mais par contre, pas de trace des jointures.
- pour le second (c'est un dll), il y a plusieurs outils et celui qui peut potentiellement m'intéresser est censé créer une feuille excel avec toutes les infos. Mais, une fois que l'on clique sur l'outil en question, le fichier se crée a priori, mais par contre, je ne sais pas où il se situe.
Aucune trace de ce fichier.
Est-ce que quelqu'un a déjà utilisé ce 2e script ? Ou a une idée ?
Sinon, j'essaierai de contacter son auteur directement.
Merci
Hors ligne
#5 Thu 07 March 2013 18:45
Re: [ArcGis 9.2] Source d'un fichier excel servant de jointure
Bonjour,
J'ai trouvé un autre outil pour documenter les MXD (et aussi les GDB dans ce cas) : GDB XRay 4.1.
Mais toujours pas de trace des jointures sur les couches...
Je commence à me demander s'il est possible d'accès à cette information dans les ArcObjects à l'aide du VBA.
Après quelques recherches, il semble que cela est possible de manipuler les tables jointes en VBA : Un exemple de suppression de la dernière jointure d'une couche ou d'une table. Il doit être possible de modifier le script en VBA pour gérer les tables jointes.
A+
Franck
Dernière modification par Franck B (Thu 07 March 2013 19:14)
Hors ligne
#6 Thu 07 March 2013 22:44
- Kevin Jousseaume
- Participant assidu
- Lieu: Nanterre, région parisienne
- Date d'inscription: 20 Mar 2006
- Messages: 217
Re: [ArcGis 9.2] Source d'un fichier excel servant de jointure
Bonsoir,
Malheureusement l'outil que j'ai créé ne prend pas en compte les tables, et encore moins les jointures . Je vais essayer de regarder si le module arcpy.mapping que j'ai utilisé permet de le faire. Mais quoiqu'il en soit, cet outil ne fonctionnera pas sous ArcGIS 9.2 : la librairie arcpy.mapping n'est disponible qu'à partir d'ArcGIS 10...
Mais si jamais j'arrive à faire quelque chose, peut-être que vous pourriez m'envoyer le MXD pour que j'exécute le traitement depuis mon poste. Je vous tiens au courant du résultat de mes tests dès que possible.
A bientôt,
Kevin
Hors ligne
#7 Fri 08 March 2013 13:19
- Meums
- Participant actif
- Lieu: Bordeaux
- Date d'inscription: 26 Mar 2009
- Messages: 98
Re: [ArcGis 9.2] Source d'un fichier excel servant de jointure
Bonjour,
C'est p-être éloigné de ta recherche (liste des sources vers lesquelles s'oriente ce post ?) mais sache qu'il est possible de retrouver la source jointe, couche par couche en affichant la propriété de chacune et en regardant dans l'onglet Jointure/Relation. On y retrouve alors le nom de la feuille jointe puis le chemin d'accès dans l'arbo. Windows.
L'inconvénient c'est lorsque tu as plusieurs liens à identifier...
Emeric
Hors ligne
#8 Fri 08 March 2013 13:47
- Kevin Jousseaume
- Participant assidu
- Lieu: Nanterre, région parisienne
- Date d'inscription: 20 Mar 2006
- Messages: 217
Re: [ArcGis 9.2] Source d'un fichier excel servant de jointure
Meums a écrit :
[...]mais sache qu'il est possible de retrouver la source jointe, couche par couche en affichant la propriété de chacune et en regardant dans l'onglet Jointure/Relation.
C'est vrai, sauf lorsque la source de données est invalide : dans ce cas rien n'est affiché dans l'onglet Jointure/Relation
Je vous confirme qu'il m'est impossible (en tout cas je n'ai pas trouvé comment faire) d'accéder aux propriétés des tables jointes avec le module arcPy.mapping. Par contre, j'ai pondu un bout de code en .NET qui me permet d'y arriver. Mais je n'ai pas le courage, ni surtout le temps, d'industrialiser ce code et de le rendre compatible avec la version 9.2 des ArcObjects (je suis en 10).
Razorbak, si tu le souhaites, tu peux me transmettre ton fichier MXD (sans les données bien sûr), et je devrais pouvoir exécuter mon code dessus pour te dire ce que ça donne.
Kevin
Dernière modification par Kevin Jousseaume (Fri 08 March 2013 13:47)
Hors ligne
#9 Fri 08 March 2013 22:19
- Kevin Jousseaume
- Participant assidu
- Lieu: Nanterre, région parisienne
- Date d'inscription: 20 Mar 2006
- Messages: 217
Re: [ArcGis 9.2] Source d'un fichier excel servant de jointure
Pour ceux que ça pourrait intéresser, voici le code que j'utilise et qui me permet, pour un MXD donné, de parcourir toutes les couches du MXD et, si une couche possède des jointures, de parcourir ses tables jointes en récupérant le nom de la table et son emplacement d'origine.
Attention, ce code n'a été testé que sur des données jointes issues d'Excel.
Code:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using ESRI.ArcGIS.esriSystem; using ESRI.ArcGIS.Framework; using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.Geodatabase; namespace ListLayers { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { UID pUID = new UIDClass(); IMapDocument pDoc = new MapDocument(); pDoc.Open(@"C:\temp\Nouveau dossier\Sans nom.mxd"); // Ouverture du mxd à tester string sSourceQueryTable = ""; for (int i = 0; i < pDoc.MapCount; i++) { IMap pMap = pDoc.get_Map(i); UID uid = new UIDClass(); uid.Value = "{40A9E885-5533-11d0-98BE-00805F7CED21}"; //IFeatureLayer // Récupération de toutes les couches de type IFeatureLayer, même au sein des groupes de couches IEnumLayer layers = pMap.get_Layers(uid, true); layers.Reset(); IFeatureLayer pFeatureLayer = (IFeatureLayer)layers.Next(); while (pFeatureLayer != null) { IDisplayTable pDisplayTable = (IDisplayTable)pFeatureLayer; ITable pTable = (ITable)pDisplayTable.DisplayTable; if (pTable != null) { sSourceQueryTable += "Couche : " + pFeatureLayer.Name + "\n"; // Récupération de la liste des tables jointes IRelQueryTable relQueryTable; ITable destinationTable; IDataset dataset; try { // lève une exception lorsqu'il n'y a pas de jointure ou lorsque que // l'on arrive à la dernière table jointe relQueryTable = (IRelQueryTable)pTable; //Boucle sur les différentes tables jointes while (relQueryTable != null) { destinationTable = relQueryTable.DestinationTable; dataset = (IDataset)destinationTable; sSourceQueryTable += "Nom de la table : " + dataset.Name + "; Emplacement du fichier source : " + dataset.Workspace.PathName + "\n"; pTable = relQueryTable.SourceTable; relQueryTable = (IRelQueryTable)pTable; } } // permet de s'échapper lorsqu'on arrive à la dernière table jointe ou s'il n'y a pas de table jointe du tout catch { relQueryTable = null; } } pFeatureLayer = (IFeatureLayer)layers.Next(); } } MessageBox.Show(sSourceQueryTable); } } }
Résultat obtenu en présence de 3 couches différentes :
- la couche "CONSEIL_QUARTIER sans jointure" sans jointure,
- la couche "CONSEIL_QUARTIER avec jointure" possédant 1 jointure avec l'onglet "Quartiers" du fichier Excel C:\temp\Nouveau dossier\CONSEIL_QUARTIER.xls
- la "CONSEIL_QUARTIER avec 2 jointures" couche possédant 2 jointures :
- une avec la plage de valeurs "Quartiers_Restreints" du fichier Excel C:\temp\Nouveau dossier\CONSEIL_QUARTIER_2.xls
- une avec l'onglet "Quartiers" du fichier Excel C:\temp\Nouveau dossier\CONSEIL_QUARTIER.xls
Couche : CONSEIL_QUARTIER sans jointure
Couche : CONSEIL_QUARTIER avec jointure
Nom de la table jointe : Quartiers$; Emplacement du fichier source : C:\\temp\\Nouveau dossier\\CONSEIL_QUARTIER.xls
Couche : CONSEIL_QUARTIER avec 2 jointures
Nom de la table jointe : Quartiers_Restreints; Emplacement du fichier source : C:\\temp\\Nouveau dossier\\CONSEIL_QUARTIER_2.xls
Nom de la table jointe : Quartiers$; Emplacement du fichier source : C:\\temp\\Nouveau dossier\\CONSEIL_QUARTIER.xls
Dernière modification par Kevin Jousseaume (Fri 08 March 2013 23:29)
Hors ligne
#10 Thu 14 March 2013 08:04
Re: [ArcGis 9.2] Source d'un fichier excel servant de jointure
Après quelques recherches, il semble que cela est possible de manipuler les tables jointes en VBA : Un exemple de suppression de la dernière jointure d'une couche ou d'une table. Il doit être possible de modifier le script en VBA pour gérer les tables jointes.
Cela est effectivement possible, le code VBA ci-dessous permet d'afficher la source de la jointure de la couche sélectionnée.
Code:
Public Sub AfficheSourceJoin() ' Get the map Dim pDoc As IMxDocument Set pDoc = ThisDocument Dim pMap As IMap Set pMap = pDoc.FocusMap ' Get the selected layer or table Dim pSelItem As IUnknown Set pSelItem = pDoc.SelectedItem If Not TypeOf pSelItem Is IDisplayTable Then MsgBox "No Feature layer or table selected" Exit Sub End If ' Make sure the selected layer is joined Dim pDispTable As IDisplayTable Dim pTable As ITable Set pDispTable = pSelItem Set pTable = pDispTable.DisplayTable If Not TypeOf pTable Is IRelQueryTable Then MsgBox "The layer or table is not joined" Exit Sub Else Dim pRelQTab As IRelQueryTable Dim pDTable As ITable Set pRelQTab = pTable Set pDTable = pRelQTab.DestinationTable Dim pJoinDSet As IDataset Set pJoinDSet = pDTable Dim pJoinWorkspace As IWorkspace Set pJoinWorkspace = pJoinDSet.Workspace MsgBox "Join: " & pJoinWorkspace.PathName & "\" & pJoinDSet.Name End If End Sub
Le code de l'outil List MXD Sources (ver.3) est donc modifiable pour générer un fichier texte listant toutes les couches d'un document ArcMap avec leur jointure éventuelle.
A+
Franck
Hors ligne
#11 Mon 06 January 2014 11:20
- Razorbak
- Participant assidu
- Lieu: Clermont Ferrand
- Date d'inscription: 7 Oct 2007
- Messages: 505
Re: [ArcGis 9.2] Source d'un fichier excel servant de jointure
Bonjour et bonne année à tous,
Le code répond parfaitement à ce que je souhaite, mais à partir de quel endroit peut-on lancer un tel script ? Dans la fenêtre Python d'ArcMap ?
Merci
Hors ligne
#12 Wed 22 January 2014 11:19
- Razorbak
- Participant assidu
- Lieu: Clermont Ferrand
- Date d'inscription: 7 Oct 2007
- Messages: 505
Re: [ArcGis 9.2] Source d'un fichier excel servant de jointure
Bonjour,
Un petit up sur cette question SVP...
Il suffit de copier-coller ce bout de code de Frank dans le script de l'outil "List_MXD_Sources" ?
Merci beaucoup
Hors ligne
#13 Wed 22 January 2014 15:35
Re: [ArcGis 9.2] Source d'un fichier excel servant de jointure
Bonjour,
Pour utiliser le script "AfficheSourceJoin()", il faut : ouvrir l'éditeur VBA (Menu Personnaliser), copier:coller le code.
Pour utiliser le script "List_MXD_Sources", il faut : ouvrir l'éditeur VBA (Menu Personnaliser), importer le module vb.
Mais pour faire, ce que tu veux, il faut modifier le code du deuxième script à l'aide de l'exemple du premier...
Je dois l'avoir fait quelque part... si je le retrouve, le mettrait sur le forum.
A+
Franck
Hors ligne
#14 Wed 22 January 2014 16:12
- Razorbak
- Participant assidu
- Lieu: Clermont Ferrand
- Date d'inscription: 7 Oct 2007
- Messages: 505
Re: [ArcGis 9.2] Source d'un fichier excel servant de jointure
Merci beaucoup !
Ça serait super...
Hors ligne
Pages: 1
- Sujet précédent - [ArcGis 9.2] Source d'un fichier excel servant de jointure - Sujet suivant