Question Rediriger la sortie d'un script dans Excel(Résolu)

Plus d'informations
il y a 16 ans 8 mois #777 par Jacques Barathon
Dans Excel, tu ouvres le fichier en choisissant d'ouvrir les types de fichiers texte (dans Excel 2007 il me propose les extensions *.prn, *.txt et *.csv par défaut).

Ensuite, dans l'assistant d'importation tu choisis le format délimité (choix par défaut normalement), puis dans la fenêtre suivante tu choisis la virgule comme séparateur (\"comma\" en anglais). Tu confirmes le tout, et voilà.

On doit pouvoir automatiser tout ça à partir de l'objet COM Excel, mais là je n'ai pas pratiqué, donc si qqu'un d'autre connaît, qu'il se manifeste! :)

Janel

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 16 ans 8 mois #778 par Berfini
Oui oui qu'il se manifeste car le modifier une fois sous excel je sais faire mais le but de la manoeuvre est de le faire faire par powershell ^^

Gaby

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 16 ans 8 mois #779 par Jacques Barathon
Bon, ben je m'y suis collé :)

En grattant un peu dans MSDN j'ai fini par trouver comment faire. C'est un peu laborieux, à cause notamment des paramètres optionnels qu'on ne peut pas omettre dans PowerShell (comme dans C#) et qu'il faut donc inclure en leur passant le type [System.Type]::Missing spécialement conçu pour ça...

Bref, le code suivant devrait marcher, à ceci près qu'il ajoute des guillemets aux textes qui contiennent des espaces, alors que j'ai précisé xlTextQualifierNone qui devrait éviter ça. A creuser...

[code:1]$excel = new-object -com Excel.Application

# utile pour voir ce qu'on fait:
$excel.visible = $true

# quelques paramètres à passer, parmi ceux que j'ai vus qui paraissaient utiles:
$xlDelimited = [Microsoft.Office.Interop.Excel.xlTextParsingType]\"xlDelimited\"
$xlTextQualifierNone = [Microsoft.Office.Interop.Excel.XlTextQualifier]\"xlTextQualifierNone\"

# la valeur à passer si on veut laisser un paramètre par défaut:
$missing = [System.Type]::Missing

# le nom du fichier CSV à ouvrir, avec son chemin complet:
$file = \"c:\logs\mesfichiers.csv\"

# et enfin, la commande d'ouverture du fichier:
$csv = $excel.workbooks.opentext($file, $missing, 1, $xlDelimited, $xlTextQualifierNone, $missing, $missing, $missing, $true, $missing, $missing, $missing, $missing, $missing, $missing, $missing, $missing, $missing)[/code:1]
Tu l'auras noté, la dernière commande est particulièrement longue. Elle contient 18 paramètres qu'il faut tous renseigner. En l'occurrence, les paramètres que je renseigne effectivement sont le nom du fichier, la ligne de départ pour la lecture (1), le fait qu'il s'agisse d'un fichier délimité par des caractères séparateurs (et non pas à taille de colonne fixe), le fait que je ne veux pas de guillemets pour les champs texte, et l'utilisation de la virgule comme séparateur ($true en 9e paramètre). Pour tous les autres paramètres auxquels je ne veux pas toucher, j'utilise la variable $missing qui pointe sur le type [System.Type]::Missing.

Je te laisse compléter la suite, à savoir l'enregistrement du fichier (éventuellement dans un format XLS standard) etc.

Pour info, quelques-unes des sources que j'ai utilisées (toutes sur MSDN):

msdn2.microsoft.com/fr-fr/library/micros...op.excel(VS.80).aspx
msdn2.microsoft.com/fr-fr/library/micros...opentext(VS.80).aspx
msdn2.microsoft.com/en-us/library/ms178843(VS.80).aspx

Tiens-nous au courant, c'est intéressant comme exercice :). A l'occasion, j'écrirai un billet sur mon blog à ce sujet pour garder une trace de tout ça.

Janel<br><br>Message édité par: janel, à: 27/07/07 15:02

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.072 secondes
Propulsé par Kunena