Manipuler Excel avec PowerShell : Part 2 – Appliquer un style à vos cellules

Envoyer Imprimer PDF

Dans le premier article, je vous ai montré comment créer votre premier fichier Excel et l’alimenter avec PowerShell pour obtenir le résultat suivant :

 

Dans cet article, on va s’attarder un peu plus sur la mise en forme.

On va commencer par fusionner les cellules A1 et B1. Pour cela, il va falloir définir une étendue ou un « Range » correspondant à ces deux cellules :

$RangeTitle = $WorkSheet.Range($WorkSheet.Cells.Item(1,1),$WorkSheet.Cells.Item(1,2))

 

Une fois l’étendue définie, on va faire appel à la propriété « MergeCells » pour fusionner les deux cellules :

$RangeTitle.MergeCells = $true

 

On peut également appliquer un style à une cellule ou à une étendue. Pour cela, il suffit simplement d’associer un style Excel existant à la propriété « Style » de notre étendue. Par contre, cela nécessite d’avoir la liste des styles existants dans Excel et de savoir à quoi ils correspondent…

Pour obtenir la liste des styles, il suffit simplement de saisir la commande « $WorkBook.Styles | ft name » qui nous retourne la liste des styles à disposition et qui est disponible également depuis « Styles de Cellules » dans Excel.

 

On va appliquer le style « Titre 2 ». Pour cela deux solutions :

#Solution 1
$RangeTitle.Style = "Titre 2"
#Solution 2
$RangeTitle.Style = ($WorkBook.Styles.Item(43)).Name

 

La première solution est la plus simple, par contre, vous aurez sans doute noté que le nom du style est en français dans mon exemple. En fait, le titre du style est traduit, il n’y a aucune solution pour y remédier (en tout cas je n’ai pas trouvé !).

La deuxième solution est donc plus adaptée sauf que les styles n’ont pas la même indexation entre les différentes versions d’Excel…

Troisième solution… Créer son propre style en s’appuyant sur un style existant. Si dessous, un nouveau style s’appuyant sur le style Excel « Titre 2 ».

$Style = $WorkBook.Styles.Add("MonTitre")
$Style.IncludeAlignment = $false
$Style.IncludeNumber = $false
$Style.IncludePatterns = $false
$Style.IncludeProtection = $false
 
# Style de police
$Style.Font.Bold = $true
$Style.Font.Color = 6968388
$Style.Font.ColorIndex = 50
$Style.Font.Size = 11
$Style.Font.ThemeColor = 4
 
# style des bordures
$Style.Borders.item(4).Color = 15123099
$Style.Borders.item(4).ColorIndex = 37
$Style.Borders.item(4).ThemeColor = 5
$Style.Borders.item(4).LineStyle = 1
$Style.Borders.item(4).Weight = -4138
$Style.Borders.item(4).TintAndShade = +0.4
 
$Style.IncludeBorder = $true

 

Vous pouvez vous appuyer sur cet exemple de style personnalisé pour appliquer une police ou une bordure particulière directement à une cellule ou à une étendue. Les propriétés sont les mêmes.

 

On peut également centrer le titre (voir la liste des valeurs possibles depuis http://msdn.microsoft.com/en-us/library/office/bb241313(v=office.12).aspx) :

$RangeTitle.HorizontalAlignment = -4108

 

Si vous avez consulté le lien ci-dessus, nous aurions pu également appeler la valeur par son nom pour un résultat équivalent.

$RangeTitle.HorizontalAlignment = [Microsoft.Office.Interop.Excel.XlHAlign]::xlHAlignCenter

 

C’est un point intéressant car de nombreuses méthodes la classe Office Interop Excel s’appuie sur ce genre d’énumération. Vous en avez la liste complète depuis http://msdn.microsoft.com/en-us/library/office/bb259481(v=office.12).aspx.

 

Pour conclure, on va définir la taille de nos colonnes sur notre étendue, histoire que le titre ne soit pas trop écrasé.

$RangeTitle.ColumnWidth = 20

 

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++
}
 
$RangeTitle = $WorkSheet.Range($WorkSheet.Cells.Item(1,1),$WorkSheet.Cells.Item(1,2))
$RangeTitle.MergeCells = $true
$RangeTitle.Style = ($WorkBook.Styles.Item(43)).Name
$RangeTitle.HorizontalAlignment = [Microsoft.Office.Interop.Excel.XlHAlign]::xlHAlignCenter
$RangeTitle.ColumnWidth = 20
 
$WorkBook.SaveAs("c:\temp\MaProductionDeBananes.xlsx")
$Excel.Visible = $true

 

On a vu dans ce deuxième article comment appliquer un style Excel existant et même créer une étendue. On verra dans le prochain article comment mettre en forme un tableau.

 

Vous pouvez consulter également mes autres articles sur le sujet:

Mise à jour le Vendredi, 25 Octobre 2013 10:00