Question Fusionner plusieurs fichiers xslx

Plus d'informations
il y a 5 ans 3 mois #28000 par alman
Bonjour,

Je débute en Powershell, je sollicite votre aide.

J'ai 10 fichiers excel (xslx) sous forme de table avec le même nom de colonne, la même structure (2 feuilles où la première ligne est inutile..c'est l'entête) et ce, dans 10 dossiers différents.

Je souhaite consolider/fusionner les 10 fichiers dans 2 fichiers (1 par feuille) au format CSV.


J'ai trouvé ça sur un site mais j'avoue ne pas comprendre grand chose.

[code:1]$ExcelObject=New-Object -ComObject excel.application
$ExcelObject.visible=$false
$ExcelFiles=Get-ChildItem -Path C:\test1

$Workbook=$ExcelObject.Workbooks.add()
$Worksheet=$Workbook.Sheets.Item(\"sheet1\"«»)

foreach($ExcelFile in $ExcelFiles){

$Everyexcel=$ExcelObject.Workbooks.Open($ExcelFile.FullName)
$Everysheet=$Everyexcel.sheets.item(1)
$Everysheet.Copy($Worksheet)
$Everyexcel.Close()

}

$Workbook.SaveAs(\"C:\test1\RESULTAT\merge.xlsx\"«»)
$ExcelObject.Quit()
[/code:1]

Je vous remercie de l'aide que vous pourrez m'apporter.<br><br>Message édité par: Arnaud, à: 8/01/19 14:20

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

Plus d'informations
il y a 5 ans 3 mois #28004 par Philippe
salut alman69

je t'ai commenter chaque ligne pour que tu puisse comprendre ce que fais le script
[code:1]$ExcelObject = New-Object -ComObject excel.application # ouverture d'excel
$ExcelObject.visible = $false # on cache excel
$ExcelFiles = Get-ChildItem -Path C:\test1 # liste tous les fichier du dossier c:\test1

$Workbook = $ExcelObject.Workbooks.add() # creation d'un nouveau fichier(classeur) excel
$Worksheet = $Workbook.Sheets.item(1) # on se positionne sur la première feuille

foreach ($ExcelFile in $ExcelFiles) { # boucle sur la liste des fichiers trouver
$Everyexcel = $ExcelObject.Workbooks.Open($ExcelFile.FullName) # ouvre un fichier excel
$Everysheet = $Everyexcel.sheets.item(1) # ce positionne sur la 1er feuille
$Everysheet.Copy($Worksheet) # copie la feuille dans le classeur créé plus haut
$Everyexcel.Close() # ferme le fichier
}

$Workbook.SaveAs(\&quot;C:\test1\merge.xlsx\&quot;«») # enregistre le classeur créé
$ExcelObject.Quit() # quit excel
[/code:1]

a la fin du script tu a un fichier merge.xlsx qui contient 10 feuilles, les feuille des dix classeurs
si les fichier ce trouve dans des sous-dossiers de test1 il te suffit de mettre \&quot;-Recurse\&quot; a la suite de Get-ChildItem
si se n'est pas le cas ou qu'il y a d'autre fichiers dans les dossiers il faudra procédé autrement

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

Plus d'informations
il y a 5 ans 3 mois #28011 par Sebastien Maltais
Bonjour,

C'est l'ancienne mode ce que vous faite. Avec le module de powershell gallery \&quot;import-excel\&quot; ça prend 5 minutes.

1- Installer le module excel : Install-Module -Name ImportExcel

2- Le script!

[code:1]######################################################################
###################### Fusion Excel ##################################
######################################################################
### liste le dossier contenant les fichier excel
$fichiers_excel = (get-childitem -Path \&quot;c:\power\\&quot;«»).FullName
### Fichier de sortit fusionner
$fusion_excel = \&quot;C:\power\result.xlsx\&quot;
foreach($fichier in $fichiers_excel){
Import-Excel -Path $fichier -NoHeader | Export-Excel -Path $fusion_excel -Append -WorksheetName $fichier
&amp;#12288;
}
[/code:1]<br><br>Message édité par: iTork, à: 15/01/19 20:48

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

Plus d'informations
il y a 5 ans 3 mois #28025 par Laurent Dardenne
Salut,
iTork écrit:

C'est l'ancienne mode ce que vous faites.

Nous somme déjà démodés :-/ , quelle malchance .
Dit autrement, ce module évite de connaitre les détails d'implémentation ;)

Tutoriels PowerShell

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

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