Question
Convertion Excel 2007 - CSV
- sebastien
- Auteur du sujet
- Hors Ligne
- Membre junior
-
- Messages : 32
- Remerciements reçus 0
J'essaye de faire un script PS qui permette de lister les fichiers excel d'un répertoire et de convertir la 3em sheet de chaque fichier au format csv. J'arrive au résultat ci-dessous :
[code:1]$ciUS = [System.Globalization.CultureInfo]'en-US'
function Invoke([object]$m, [string]$method, $parameters){
$m.PSBase.GetType().InvokeMember(
$method, [Reflection.BindingFlags]::InvokeMethod, $null, $m, $parameters,$ciUS)}
$excel = New-Object -ComObject Excel.Application
Invoke $Excel \"displayalerts\" $false
#\"displayalerts\", [Reflection.BindingFlags]::InvokeMethod, $null, $excel, $false
$Format = 6
Get-ChildItem -Path \"c:\users\\" -Filter *.xls? -Recurse | % {
$InputPath = $_.fullname
$OutputPath = $_.directory.fullname+\"\\"+$_.basename+\".csv\"
$book = Invoke $excel.Workbooks Open $InputPath
$Worksheet = $book.Worksheets.Item(3)
Invoke $Worksheet SaveAs ($OutputPath, $Format)
Invoke $book Close 0}
Invoke $excel Quit
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)
[/code:1]
Cependant, quelques problemes subsistent que je n'arrive pas à résoudre :
A la fermeture de $Excel une boite de dialogue s'ouvre me demandant si je souhaite enregistrer les changement apporter aux documents. Or je souhaiterais ne pas avoir ce message (surtout si il y a 5000 fichiers à traiter:pinch: ).
J'ai bien fait une tentative avec le : [code:1]Invoke $Excel \"displayalerts\" $false[/code:1] mais cette commande me donne une erreur :
Exception calling \"InvokeMember\" with \"6\" argument(s): \"DisplayAlerts method of Application class failed\"
At A:\POWERSHELL\xls2csv\xls2csv.ps1:3 char:37
+ $m.PSBase.GetType().InvokeMember <<<< (
+ CategoryInfo : NotSpecified: ([], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodTargetInvocation
Enfin, bien que les fichiers CVS soient bien crées, j'ai un message pour chaque fichier :
Exception calling \"InvokeMember\" with \"6\" argument(s): \"Type mismatch. (Exception from HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH))\"
At A:\POWERSHELL\xls2csv\xls2csv.ps1:3 char:37
+ $m.PSBase.GetType().InvokeMember <<<< (
+ CategoryInfo : NotSpecified: ([], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodTargetInvocation
J'ai beau chercher, je ne trouve pas de solution à ce problème. Si une bonne âme pouvez m'indiquer le voie je lui en serais reconnaissant.
Bon WE à tous
Message édité par: sebasti1, à: 2/03/12 17:19<br><br>Message édité par: sebasti1, à: 2/03/12 17:34
Connexion ou Créer un compte pour participer à la conversation.
- xyz
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 69
sebasti1 écrit:
Ne connaissant pas la version d'Excel ni de celle de PS que tu utilises, il me semble que tu peux simplifier ton code en évitant l'usage de la fonction Invoke.J'arrive au résultat ci-dessous
En passant sur ce
sebasti1 écrit:
si tu as 5000 fichiers à traiter, il va te falloir supprimer correctement tes objets COM.[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)
sebasti1 écrit:
Recherche sur le forum il me semble que ce pb y a été traité.Or je souhaiterais ne pas avoir ce message
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Convertion Excel 2007 - CSV