Question Convertion Excel 2007 - CSV

Plus d'informations
il y a 14 ans 2 mois #11253 par sebastien
Bonjour,

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 :woohoo:

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.

Plus d'informations
il y a 14 ans 2 mois #11254 par xyz
Réponse de xyz sur le sujet Re:Convertion Excel 2007 - CSV
Salut,
sebasti1 écrit:

J'arrive au résultat ci-dessous

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.
En passant sur ce
sebasti1 écrit:

[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)

si tu as 5000 fichiers à traiter, il va te falloir supprimer correctement tes objets COM.
sebasti1 écrit:

Or je souhaiterais ne pas avoir ce message

Recherche sur le forum il me semble que ce pb y a été traité.

Tutoriels PowerShell

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

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