On peut remplir un fichier Excel avec des résultats venant de Powershell mais suivant le volume de donnée, ça peut prendre un temps conséquent.

Une astuce consiste pour injecter très rapidement ces données dans un Excel consiste à exporter le résultat dans un CSV, et le convertir en fichier Excel.

Bien évidemment il est nécessaire d’avoir Excel sur la machine depuis laquelle vous exécutez le script.

Voici un exemple:

$CSVFile  = "C:\Temp\Process.csv" # Chemin du CSV
$XlsxFile = $CSVFile -replace "\.csv$",".xlsx" # Création du nom et chemin pour le fichier xlsx en se basant sur le CSV
$TabName  = "Convertion" # Nom de la worksheet en Excel

# On liste les processus du pc et on les exporte en CSV
Get-Process | Export-CSV $CSVFile -NoTypeInformation -Encoding UTF8 -Force 

# On fait appel à Excel sans l'afficher et on ouvre le CSV
$Excel = New-Object -ComObject Excel.Application
$Excel.Visible = $False
$Workbook = $Excel.Workbooks.Open($CSVFile)

# On selectionne la worksheet et on la renomme
$Sheet = $Excel.Worksheets.Item(1)
$Sheet.Name = $TabName

# On règle l'apparence de la ligne de titre
$Head = $Sheet.UsedRange.Rows(1)
$Head.Interior.ColorIndex = 42
$Head.Borders.ColorIndex  = 2

# On règle la taille du texte, on applique un filtre et on adapte la largeur des colonnes à leurs contenus
$UsedRange = $Sheet.UsedRange
$UsedRange.Font.Size = 9
$Null = $UsedRange.AutoFilter()
$Null = $UsedRange.EntireColumn.AutoFit()

# On fige la première ligne
$ActiveWindow = $Sheet.Application.ActiveWindow
$ActiveWindow.SplitColumn = 0
$ActiveWindow.SplitRow = 1
$ActiveWindow.FreezePanes = $True

# Obligatoire pour la sauvegare en fichier Excel
$XlFixedFormat = [Microsoft.Office.Interop.Excel.XlFileFormat]::xlWorkbookDefault

# On sauvegarde en xlsx
$Workbook.SaveAs($XlsxFile, $XlFixedFormat)

# On rend Excel visible
$Excel.Visible = $True

Catégories : Astuces

0 commentaire

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *