Question
Export vers XLS
- bordin
- Auteur du sujet
- Hors Ligne
- Membre premium
- Messages : 88
- Remerciements reçus 0
Merci Janel çà marche avec tes 2 astuces!
Je profite par la même occasion pour une petite question sur la facon de copier une feuille d'un classeurA vers un autre classeurB.
J'ai essayé çà sans succès!!
[code:1]
$excel = new-object -com Excel.Application
$classeurSource=\"c:\controlSCA\check-equipement.xls\"
$NomClasseurDestination=\"c:\ControlSCA\ControlSCA.xls\"
$ClasseurDestination = $excel.Workbooks.Open($NomclasseurDestination)
$MonClasseur = $excel.Workbooks.Open($classeurSource)
$MaFeuille=$MonClasseur.activeWorkSheet
$Mafeuille.Copy (After) $ClasseurDestination.Sheets(1)[/code:1]
Si un expert excel est dans les parages! <br><br>Message édité par: Arnaud, à: 8/08/07 17:09
Connexion ou Créer un compte pour participer à la conversation.
- bordin
- Auteur du sujet
- Hors Ligne
- Membre premium
- Messages : 88
- Remerciements reçus 0
çà marche juste un peu mieux avec çà:
[code:1]$excel = new-object -com Excel.Application
$NomclasseurSource=\"c:\controlSCA\Rapport\check-equipement.xls\"
$ClasseurDestination = $excel.Workbooks.Add()
$classeurSource=$excel.Workbooks.Open($NomclasseurSource)
$MaFeuille=$ClasseurSource.worksheets.Item(1)
Cà bug ici: $Mafeuille.Copy $classeurDestination.worksheets.item(1)
$ClasseurDEstination.saveAs(\"c:\controlSCA\rapport\test.xls\"«»)
$excel.Visible=$true
$excel.quit()[/code:1]
Mais je bug au niveau de la copie de la feuille!!
Autre chose, $excel.quit() ne tue pas le process et reste en mémoire!
Merci pour votre aide.<br><br>Message édité par: Arnaud, à: 8/08/07 17:09
Connexion ou Créer un compte pour participer à la conversation.
- Bredin Samuel
- Hors Ligne
- Membre senior
- Messages : 52
- Remerciements reçus 0
camilleB écrit:
Une idée peut être pour copier avant ta première feuille :[code:1]$excel = new-object -com Excel.Application
$NomclasseurSource=\"c:\controlSCA\Rapport\check-equipement.xls\"
$ClasseurDestination = $excel.Workbooks.Add()
$classeurSource=$excel.Workbooks.Open($NomclasseurSource)
$MaFeuille=$ClasseurSource.worksheets.Item(1)
Cà bug ici: $Mafeuille.Copy $classeurDestination.worksheets.item(1)
$ClasseurDEstination.saveAs(\"c:\controlSCA\rapport\test.xls\"«»)
$excel.Visible=$true
$excel.quit()[/code:1]
Mais je bug au niveau de la copie de la feuille!!
[code:1]
$Mafeuille.Copy($classeurDestination.worksheets.item(1),[system.type]::Missing)
[/code:1]
Après ta première feuille :
[code:1]
$Mafeuille.Copy([system.type]::Missing,$classeurDestination.worksheets.item(1))
[/code:1]
C'est vrai le processus ne se kill pas.Autre chose, $excel.quit() ne tue pas le process et reste en mémoire!
Essai :
[code:1]
Stop-process @(get-process | Where {$_.MainWindowHandle -eq $excel.Hwnd})[0].Id
[/code:1]
à la place de :
[code:1]
$excel.quit()
[/code:1]
Pour que ça fonctionne il faut que Excel soit visible, donc ajoute
[code:1]$excel.Visible = $True[/code:1]
avant le stop-process
Bonne journée
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
- Messages : 6302
- Remerciements reçus 68
Une autre approche :camilleB écrit:
C'est vrai le processus ne se kill pas.Autre chose, $excel.quit() ne tue pas le process et reste en mémoire!
Essai :
[code:1]Stop-process @(get-process | Where {$_.MainWindowHandle -eq $excel.Hwnd})[0].Id [/code:1]
[code:1]
$excel = new-object -com Excel.Application
$excel.quit()
$excel=$null
[GC]::collect()
[/code:1]
Il faut forcer la libération de l'objet COM, à priori PS garde le process d'Excel actif car la variable $excel n'est pas libérée(finalisée), et comme les objets COM se basent sur des compteurs de référence, cette variable référence tjr Excel.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Bredin Samuel
- Hors Ligne
- Membre senior
- Messages : 52
- Remerciements reçus 0
Beaucoup mieux.
Surtout que \"ma\" technique ne fonctionne pas si le script est lancé dans une tache planifiée et un compte de service n'ayant pas ouvert de session.
Dans ce cas la propriété MainWindowHandle = 0. (Pas d'interface graphique).
Merci quand même à Jamel, sa méthode m'a beaucoup servit.
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les débutants
- Export vers XLS