Mappage XML

Mappage XML - XML/XSL - Programmation

Marsh Posté le 28-06-2010 à 11:02:03    

Bonjour,
 
J'importe des données XML dans un classeur excel avec un mappage.  
Je dispose de plusieurs fichiers XML qui contiennent les mêmes attributs.
J'aimerais savoir comment faire pour importer des données a partir d'un autre fichier XML sans avoir a redefinir le mappage.  
 
Idéalement je souhaiterais créer une macro permettant:
-de permettre a l'utilisateur de localiser un fichier XML dans un dossier prédéfini
-d'appliquer un mappage prédéfini
 
Est-ce possible? Et si oui, comment
Je vous remercie par avance.
 
 

Reply

Marsh Posté le 28-06-2010 à 11:02:03   

Reply

Marsh Posté le 29-06-2010 à 12:25:20    

J'ai finalement un début de solution a mon premier problème:
 
Sub GetPath()
       XmlFile = Application.GetOpenFilename("XML File,*.xml" )
       MsgBox XmlFile
End Sub
 
Voici l'arborescence de mon dossier:
 
Racine/Dossier1/Dossier11: fichier.xml
Racine/Dossier2/Dossier21: fichier.xls
 
Actuellement la macro GetPath() permet de choisir un fichier dans le dossier: Racine/Dossier2/Dossier21
Je voudrais savoir comment modifier la macro GetPath() pour qu'elle choisisse le dossier: Racine/Dossier1/Dossier11
Je précise que la racine n'est pas connue car le fichier excel peut se trouver sur un disque quelconque sur n'importe quel PC.
 
Je bute également toujours sur l'application d'un mappage prédéfini. Je me suis sans doute mal exprimé:
Je souhaite faire correspondre,par exemple, les balises <balise1> a la colonne A de ma feuille 2 et les balises <balise2> a la case B613 de ma feuille 1.
 
Je vous remercie de votre aide.

Reply

Marsh Posté le 30-06-2010 à 10:33:15    

Bonjour,
 
J'ai un probleme avec la commande Xpath.SetValue.
Voici mon code:
 
Sub ImportXML()
 
ChDir ActiveWorkbook.Path
ChDir ".."
ChDir ".."
ChDir "QMS"
 
XmlFile = Application.GetOpenFilename("XML File,*.xml" )
     
Dim mMap As Xmlmap
Dim i As String
Dim n As XPath
Set mMap = ActiveWorkbook.XmlMaps.Add(XmlFile)
i = "/tbl_Acquisition/Project/Vessel"
Worksheets("Test" ).Range("A10" ).XPath.SetValue mMap, i
 
Le XPath n'est pas valide.
 
Mon fichier XML se presente comme suit:
 
<?xml version="1.0" encoding="ISO-8859-1"?>
<tbl_Acquisition>
<Project Name="DCA" Identifier="" Vessel="GEMINI" Operator="DCA">
<Activitycode>DCA</Activitycode>
</tbl_Acquisition>
 
Le but est d'effectuer un mappage entre "Vessel" et la cellule "A10" de la feuille "Test"
 
Pourriez vous m'aider SVP?
 
Je vous remercie
 
 

Reply

Marsh Posté le 30-06-2010 à 11:11:12    

Vessel est un attribut, donc i = "/tbl_Acquisition/Project/@Vessel", si je ne m'abuse


Message édité par Paulp le 30-06-2010 à 11:11:24
Reply

Marsh Posté le 30-06-2010 à 11:20:34    

Merci beaucoup!

Reply

Marsh Posté le 30-06-2010 à 12:12:29    

Je souhaite extraire une heure dans la chaine de caractere de l'attribut "StartTime" du fichier XML suivant:
 
<tbl_Acquisition>
<Project Name="DCA" Identifier="" Vessel="GEMINI" Operator="DCA">
<tbl_ReplayTimes>
<UTC StartTime="2010-06-25T07:59:23.440+00:00"  
 
Je voudrais recuperer l'heure 07:59:23 de l'attribut StartTime ci-dessus.
 
J'ai essaye
start_time = "/tbl_Acquisition/Project/tbl_ReplayTimes/UTC/@StartTime"
start_time_regex = Application.WorksheetFunction.Mid(start_time, Application.WorksheetFunction.Find("T", start_time) + 1, 8)
 
J'ai une erreur de type: "Object doesn't support that method"
 
Auriez-vous une idee?
Cordialement.

Reply

Marsh Posté le 30-06-2010 à 13:59:03    

Je ferai ça avec une expression régulière, mais je ne sais pas comment ça se fait en VB.
 
En tous cas, avec le code que tu donnes, start_time vaut le xpath "/tbl_Acquisition/Project/tbl_ReplayTimes/UTC/@StartTime" et pas "2010-06-25T07:59:23.440+00:00"

Reply

Marsh Posté le 01-07-2010 à 11:54:31    

Bonjour,
 
Au lieu d'utiliser des expressions régulières il est est possible d'utiliser un filtre.
Je dispose d'une colonne C contenant des données de la forme: 2010-06-25T07:59:23.440+00:00
Je filtre ces données dans la colonne D avec: D1=IF(C1<>"",MID(C1,FIND("T",C1)+1,8),"" ),idem pour D2, D3...
En D1 j'écris donc: 07:59:23
 
J'aimerais le faire en VBA:
J'ai essaye:
 
For i = 1 To 15
    If Worksheets("1" ).Range("C" & i).Value <> "" Then
        Worksheets("1" ).Range("D" & i).Value = Application.WorksheetFunction.Mid(Worksheets("1" ).Range("C" & i).Value, Application.WorksheetFunction.Find("T", Cellule.Value) + 1, 8)
         
End If
Next i
 
Problème: cette fonction n'écrit rien....
Auriez-vous une solution a mon problème?
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed