Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

remplissage de plusieurs fichiers XML depuis un fichier XLS

7 réponses
Avatar
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-instance">
<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

7 réponses

Avatar
mdnews
Mon, 7 Dec 2009 03:07:01 -0800, 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 et une chaine de caractère qui
est logonName_RDP.


Mon fichier XML (copié ci dessous) doit être rempli comme suit:



[...]

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.
Avatar
Daniel.j
Bonjour
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" a écrit dans le message de news:

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&quot;
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt;
<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




Avatar
Lyes
Salut à tous et merci pour vos réponses,

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:

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&quot;
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt;
<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




Avatar
Lotre
Salut,

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 <USER>.xml ( second champs du CVS )
' ====================================== 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:
J'ai 340 fichiers XML à créer à partir d'un modèle et à alimenter
avec fichier de données en CSV.


Avatar
Lotre
bonsoir,

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
Avatar
lyes62
Lyes a écrit le 07/12/2009 à 12h07 :
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&quot;
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt;
<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


Merci Lotre,

Je testerai ton script dès demain.
C'est en cherchant pas hasard sur google que j'ai trouvé mon message que j'ai posté sur les newsgroups ms et que j'ai constaté ta réponse.
En fait celle ci n'était pas visible depuis les newsgroups.
Sinon en posant ma question sur d'autre forum d'entraide j'ai obtenu une solution à la mode Unix à l'aide de awk & sed qui a fonctionné fort bien.
Maintenant 2 solutions valent mieux qu'une et la tienne est aussi la bienvenue.

Merci beaucoup pour ton aide


Lyes
Avatar
Michel Claveau - MVP
(envoyé via news:msnews.microsoft.commicrosoft.public.fr.scripting)

Bonjour !

Voici une solution en Python, qui va montrer la facilité de ce langage :


# -*- coding: utf-8 -*-
import win32com.client,time

#constantes
nblig40
feuille="L:data.xlsx"
range="A2:D6"
modele="L:modele.xml"
outprefixe="X"
outsuffixe=".xml"

#on ouvre Excel
ox=win32com.client.Dispatch('Excel.Application')
time.sleep(5) #attente d'Excel...
ox.visible=True
doc=ox.Workbooks.Open(feuille) #ouverture de la feuille

#on récupère les valeurs
ox.Range(range).Select()
ldata=ox.Selection.Value

#on ferme Excel
ox.Quit()


#on charge le modèle
model=open(modele,"r").read()

num=0
#pour chaque ligne:
for lig in ldata:
#on remplace à partir du modèle
data=model.replace("COMPUTER NAME", str(lig[0]))
dataÚta.replace("logonName", str(lig[1]))
dataÚta.replace("FullNAME_RDP", str(lig[3])) #inversion: chaine plus longue d'abord
dataÚta.replace("FullNAME", str(lig[2]))
#ecriture du fichier de sortie
num+=1
open(outprefixe+str(num)+outsuffixe,"w").write(data)

#C'est fini.







@-salutations
--
MCI