remplissage de plusieurs fichiers XML depuis un fichier XLS
Le
Lyes
Bonjour,
Je vous sollicite une nouvelle fois parce que j'ai une tache récurrente à
faire et j'ai mis 2 heures pour faire 20 fois cette tache.
Je cherche donc une solution scriptée.
Voilà:
J'ai approximativement 340 fichiers XML à créer et à alimenter avec des
données contenues dans un fichier excel.
Mon fichier excel comporte 4 colonnes qui sont respectivement :
le Computer Name, le LogonName, le FullName, et une chaine de caractère qui
est logonName_RDP.
Mon fichier XML (copié ci dessous) doit être rempli comme suit:
<configuration xmlns="http://xml.juniper.net/ive-sa/6.3R6.1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-in...">
<users>
<user-roles>
<user-role>
<name>FullNAME</name>
<general>
<overview>
<options>
<vlan-source-ip>false</vlan-source-ip>
<session-options>false</session-options>
<ui-options>false</ui-options>
</options>
<access-features>
<web>false</web>
<windows-files>false</windows-files>
<nfs-files>false</nfs-files>
<sam>false</sam>
<telnet-ssh>false</telnet-ssh>
<terminal-services>true</terminal-services>
<meeting>false</meeting>
<email>false</email>
<network-connect>false</network-connect>
</access-features>
</overview>
</general>
<terminal-services>
<sessions>
<session>
<name>FullNAME_RDP</name>
<description />
<parent>--none--</parent>
<auto-launch>true</auto-launch>
<wts>
<username><USER></username>
<password-type>variable</password-type>
<variable-password><PASSWORD></variable-password>
<host>COMPUTER NAME</host>
<client-port>0</client-port>
<server-port>3389</server-port>
<screen-size>fullscreen</screen-size>
<color-depth>16-bit</color-depth>
<launch-seamless>false</launch-seamless>
<alias-name />
<application-path />
<path-dir />
<connect-drives>false</connect-drives>
<connect-printers>false</connect-printers>
<connect-comports>false</connect-comports>
<allow-clipboard>false</allow-clipboard>
<experience-options>
<desktop-background>false</desktop-background>
<menu-window-animation>false</menu-window-animation>
<bitmap-caching>false</bitmap-caching>
<desktop-composition>false</desktop-composition>
<show-content-dragging>false</show-content-dragging>
<themes>false</themes>
<font-smoothing>false</font-smoothing>
</experience-options>
<connect-smartcards>false</connect-smartcards>
<sound-options>disable</sound-options>
</wts>
</session>
</sessions>
</terminal-services>
</user-role>
</user-roles>
<user-realms>
<realm>
<name>basic</name>
<role-mapping-rules>
<rule>
<name>logonName</name>
<user-name>
<test>is</test>
<user-names>logonName</user-names>
</user-name>
<roles>FullNAME</roles>
<stop-rules-processing>false</stop-rules-processing>
</rule>
</role-mapping-rules>
</realm>
</user-realms>
</users>
</configuration>
Pouvez vous m'aider ? Avez vous la solution miracle?
Merci de votre aide
Lyes
Je vous sollicite une nouvelle fois parce que j'ai une tache récurrente à
faire et j'ai mis 2 heures pour faire 20 fois cette tache.
Je cherche donc une solution scriptée.
Voilà:
J'ai approximativement 340 fichiers XML à créer et à alimenter avec des
données contenues dans un fichier excel.
Mon fichier excel comporte 4 colonnes qui sont respectivement :
le Computer Name, le LogonName, le FullName, et une chaine de caractère qui
est logonName_RDP.
Mon fichier XML (copié ci dessous) doit être rempli comme suit:
<configuration xmlns="http://xml.juniper.net/ive-sa/6.3R6.1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-in...">
<users>
<user-roles>
<user-role>
<name>FullNAME</name>
<general>
<overview>
<options>
<vlan-source-ip>false</vlan-source-ip>
<session-options>false</session-options>
<ui-options>false</ui-options>
</options>
<access-features>
<web>false</web>
<windows-files>false</windows-files>
<nfs-files>false</nfs-files>
<sam>false</sam>
<telnet-ssh>false</telnet-ssh>
<terminal-services>true</terminal-services>
<meeting>false</meeting>
<email>false</email>
<network-connect>false</network-connect>
</access-features>
</overview>
</general>
<terminal-services>
<sessions>
<session>
<name>FullNAME_RDP</name>
<description />
<parent>--none--</parent>
<auto-launch>true</auto-launch>
<wts>
<username><USER></username>
<password-type>variable</password-type>
<variable-password><PASSWORD></variable-password>
<host>COMPUTER NAME</host>
<client-port>0</client-port>
<server-port>3389</server-port>
<screen-size>fullscreen</screen-size>
<color-depth>16-bit</color-depth>
<launch-seamless>false</launch-seamless>
<alias-name />
<application-path />
<path-dir />
<connect-drives>false</connect-drives>
<connect-printers>false</connect-printers>
<connect-comports>false</connect-comports>
<allow-clipboard>false</allow-clipboard>
<experience-options>
<desktop-background>false</desktop-background>
<menu-window-animation>false</menu-window-animation>
<bitmap-caching>false</bitmap-caching>
<desktop-composition>false</desktop-composition>
<show-content-dragging>false</show-content-dragging>
<themes>false</themes>
<font-smoothing>false</font-smoothing>
</experience-options>
<connect-smartcards>false</connect-smartcards>
<sound-options>disable</sound-options>
</wts>
</session>
</sessions>
</terminal-services>
</user-role>
</user-roles>
<user-realms>
<realm>
<name>basic</name>
<role-mapping-rules>
<rule>
<name>logonName</name>
<user-name>
<test>is</test>
<user-names>logonName</user-names>
</user-name>
<roles>FullNAME</roles>
<stop-rules-processing>false</stop-rules-processing>
</rule>
</role-mapping-rules>
</realm>
</user-realms>
</users>
</configuration>
Pouvez vous m'aider ? Avez vous la solution miracle?
Merci de votre aide
Lyes

Poser une question


[...]
Plein de solutions:
Solution programmée rapide: Exporter le fichier Excel en .CSV puis
utiliser AWK avec $1, $2, $3, $4 qui prendra donc Computer Name, le
LogonName, le FullName, logonName_RDP.
Solution vbscript ou n'importe quel langage script ou de
programmation: pareil (données en CSV et intégration dans 4 champs)
Solution bureautique: Faire comme pour un mailing avec Word et Excel,
sauf que tu enregistres la sortie du mailing comme des fichiers
uniques et en texte brut.
Cette page peut être va vous aider!
http://dj.joss.free.fr/xml.htm
Daniel
--
FAQ MPFE
http://dj.joss.free.fr/faq.htm
"Lyes"
Excusez moi j'ai mal formulé mon besoin
Salut à tous,
J'ai 340 fichiers XML à créer à partir d'un modèle et à alimenter avec
fichier de données en CSV.
Dans mon XML modèle il y a plusieurs chaines de caractères qu'il faut que
je remplace par les données de mon csv dans les fichiers xml de sortie.
J'ai bien tenté de vous faire un algorithme pour expliquer mon besoin mais
même ça je n'y arrive pas.
Quelqu'un a -t-il un script qui fasse ceci et dont je pourrais m'inspirer?
Merci de votre aide
Lyes
"Lyes" wrote:
En fait cela me parait très simple
et c'est typiquement le type de tâche inhumaine
mais assez facile à scripter.
Cependant, il me semble qu'il va manquer
la cinquième colonne pour PASSWORD , non ?
( dans le modèle ...)
enfin ... On peut modifier ce qui suit si besoin est.
J'ai tenté de mettre quelques indications
A tester ... quand même ...
Cordialement,
HB
' ================= SCRIPT ============== ' ======================================
' chemins à adapter
' ====================================== ' modèle xml
MODL = "F:documentsxmlmodele.xml"
' csv de données
FCSV = "F:documentscsvdata.csv"
' Lieu qui recevra les xml fabriqués
' avec le dernier backslash
CIBLE ="F:documentsxml"
' Ouvrir le fichier XML en VBS :
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FileExists(MODL) Then
Msgbox "Erreur: Le fichier " & _
MODL & " est introuvable."
Set fso = Nothing
Wscript.Quit(-5)
End If
Set ts = fso.OpenTextFile(MODL, ForReading)
CHXML = ts.ReadAll
ts.close
Set ts = Nothing
' ====================================== ' CHXML contient alors tout le fichier ...
' ouvrir aussi le csv ( séparateur ";" ? )
If Not fso.FileExists(FCSV) Then
Msgbox "Erreur: Le fichier " & _
FCSV & " est introuvable."
Set fso = Nothing
Wscript.Quit(-5)
End If
Set ts = fso.OpenTextFile(Fichier, ForReading)
CHCSV = ts.ReadAll
ts.close
Set ts = Nothing
' séparer le CSV en lignes
' ======================== TABLO = split(CHCSV,VbCrLf)
NB = Ubound(TABLO)
' ============================== ' Ensuite on boucle sur chaque ligne
' =================================== ' Je suppose que le csv contient une ligne d'entêtes
' Il faut donc commencer à 1 ( seconde ligne)
' sinon, remplacer 1 par 0 ;o)
for P = 1 to NB
LIGNE = TABLO(P)
CHAMPS = split(LIGNE,";")
' ========================================= ' donc là, CHAMPS est un tableau contenant les champs...
' ( de 0 à 3)
' On vérifie que le nb de valeurs est correct ;o)
' =============================================
If not Ubound(CHAMPS) = 3 then
Msgbox "Erreur: Le fichier " & _
FCSV & " n'a pas le bon format."
Set fso = Nothing
Wscript.Quit(-5)
End If
NEWXML = CHXML
' On remplace les chaines du modèle
' par les valeurs trouvées dans le csv
replace( NEWXML,"COMPUTER NAME", CHAMPS(0))
replace( NEWXML,"USER", CHAMPS(1))
replace( NEWXML,"FullNAME", CHAMPS(2))
replace( NEWXML,"FullNAME_RDP", CHAMPS(3))
' =================================================== ' ensuite on peut enregistrer ce nouveau XML mais sous quel nom...
' Le message ne le précise pas ...
' Je prends ' ====================================== Set ts2 = fso.OpenTextFile(CIBLE & _
CHAMPS(1) & ".xml", ForWriting, True)
ts2.Write NEWXML
ts2.close
ts2=Nothing
NEXT P
Set fso = Nothing
Wscript.Quit
' ====================================
Lyes wrote:
OUPS ...
il manque les affectations avec les 4 "replace" !!!
' =================================== ' On remplace les chaines du modèle
' par les valeurs trouvées dans le csv
NEWXML = replace( NEWXML,"COMPUTER NAME", CHAMPS(0))
NEWXML = replace( NEWXML,"USER", CHAMPS(1))
NEWXML = replace( NEWXML,"FullNAME", CHAMPS(2))
NEWXML = replace( NEWXML,"FullNAME_RDP", CHAMPS(3))
===================================
je n'ai pas vu d'autre sottise ...
HB