Manipuler Excel avec PowerShell : Part 1 – Créer un classeur, un feuillet et un tableau

Envoyer Imprimer PDF

Dans cette série d'articles, je vais vous montrer les bases pour générer un fichier Excel à l'aide de PowerShell.

Au préalable et surtout afin d’éviter d’obtenir une erreur de type « Old format or invalid type library » (http://support.microsoft.com/kb/320369), nous allons définir les informations culturelles sur l'anglais avant d'instancier Excel :

[System.Threading.Thread]::CurrentThread.CurrentCulture = [System.Globalization.CultureInfo] "en-US"

 

Nous pouvons, dès-lors, instancier notre objet Excel :

$Excel = New-Object -ComObject "Excel.Application"


Avec notre objet Excel, nous allons créer notre classeur:

$WorkBook = $Excel.Workbooks.Add()


Un classeur étant constitué de feuillets, ajoutons maintenant un feuillet:

$WorkSheet = $WorkBook.WorkSheets.Add()

 

Donnons-lui un nom :

$WorkSheet.Name = "Production de bananes"

 

Définissons le titre de notre futur tableau en position A1 :

$WorkSheet.Cells.Item(1,1) = "Production annuelle de bananes"

 

Remarque : Le premier chiffre correspond au numéro de ligne et le deuxième chiffre au numéro de colonne.

 

Maintenant, nous allons créer notre tableau Excel. Mais, pour cela, on va déjà commencer par stocker les éléments de notre tableau:

$ArrProduction = @((‘2010’,’4.5’),(‘2011’,’12’),(‘2012’,’11.5’),(‘2013’,’15’))

 

Nous déclarons les entêtes de notre tableau :

$WorkSheet.Cells.Item(3,1) = "Année"
$WorkSheet.Cells.Item(3,2) = "Production (en tonnes)"

 

… et les données :

$WorkSheet.Cells.Item(4,1) = $ArrProduction[0][0]
$WorkSheet.Cells.Item(4,2) = [decimal] $ArrProduction[0][1]
$WorkSheet.Cells.Item(5,1) = $ArrProduction[1][0]
$WorkSheet.Cells.Item(5,2) = [decimal] $ArrProduction[1][1]
$WorkSheet.Cells.Item(6,1) = $ArrProduction[2][0]
$WorkSheet.Cells.Item(6,2) = [decimal] $ArrProduction[2][1]
$WorkSheet.Cells.Item(7,1) = $ArrProduction[3][0]
$WorkSheet.Cells.Item(7,2) = [decimal] $ArrProduction[3][1]


Un autre méthode pour alimenter les cellules plus efficacement, dirons-nous…

$InitialRow = 4
 
for ( $i=0; $i -lt $ArrProduction.Count; $i++ )
{
 $WorkSheet.Cells.Item($InitialRow,1) = $ArrProduction[$i][0]
 $WorkSheet.Cells.Item($InitialRow,2) = [decimal] $ArrProduction[$i][1]
 $InitialRow++
}

 

Pour visualiser le fichier Excel, il faut simplement saisir la commande suivante:

$Excel.Visible = $true

 

Si vous voulez sauvegarder le classeur Excel :

$WorkBook.SaveAs("c:\temp\MaProductionDeBananes.xlsx")


Et voila le résultat!

 

Et le script au complet:

[System.Threading.Thread]::CurrentThread.CurrentCulture = [System.Globalization.CultureInfo] "en-US"
 
$Excel = New-Object -ComObject "Excel.Application"
 
$WorkBook = $Excel.Workbooks.Add()
 
$WorkSheet = $WorkBook.WorkSheets.Add()
$WorkSheet.Name = "Production de bananes"
$WorkSheet.Select()
 
$WorkSheet.Cells.Item(1,1) = "Production annuelle de bananes"
 
$ArrProduction = @((‘2010’,’4.5’),(‘2011’,’12’),(‘2012’,’11.5’),(‘2013’,’15’))
 
$WorkSheet.Cells.Item(3,1) = "Année"
$WorkSheet.Cells.Item(3,2) = "Production (en tonnes)"


 
$InitialRow = 4
 
for ( $i=0; $i -lt $ArrProduction.Count; $i++ )
{
 $WorkSheet.Cells.Item($InitialRow,1) = $ArrProduction[$i][0]
 $WorkSheet.Cells.Item($InitialRow,2) = [decimal] $ArrProduction[$i][1]
 $InitialRow++
}


 
$WorkBook.SaveAs("c:\temp\MaProductionDeBananes.xlsx")
$Excel.Visible = $true

 

On a vu dans ce premier article comment créer notre premier classeur, un feuillet et comment l’alimenter. Dans l’article suivant, nous nous attarderons un peu plus longuement sur la mise en forme.

Ci-dessous, les autres articles sur le sujet:

Mise à jour le Jeudi, 22 Mai 2014 16:14