- forum
- PowerShell
- Entraide pour les débutants
- création d'une boîte de dialogue pour générer un fichier excel
Question
création d'une boîte de dialogue pour générer un fichier excel
- gertrude
- Auteur du sujet
- Hors Ligne
- Nouveau membre
- Messages : 18
- Remerciements reçus 0
Ca fait longtemps que je n'ai pas posté ici
Aujourd'hui, j'ai voulu créer pour la toute première fois une petite boîte de dialogue simple à destination de gens qui ne savent pas utiliser PowerShell qui sert à :
- créer un fichier excel avec deux colonnes : nom du client, liste des serveurs
Dans la fenêtre qui apparaît lorsqu'on démarre le script, il y a deux "boîtes de texte" (des textboxes !) : une dans laquelle on met le nom du client, et l'autre dans laquelle on met la liste des serveurs, 1 serveur par ligne.
Je rencontre plusieurs problèmes :
- c'est sensé, quand on clique sur "générer excel", créer un fichier, sauf que dans le fichier créé (qui en plus n'est pas créé correctement, il y a des bugs et je dois l'enregistrer manuellement, mais bon passons sur ça pour le moment) ne contient que les en-têtes des colonnes, et pas le texte rentré dans les textboxes.
- sûrement en lien avec le point précédent, le bouton "Ajouter une infra supplémentaire" ne fonctionne pas : ça devrait rendre les textboxes vides, alors que non : ça agrandit la fenêtre d'une façon bizarre, et cache un des boutons.
Je vous confie le code.
Par avance, merci
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
$form = New-Object System.Windows.Forms.Form
$form.Text = "Exporter vers Excel"
$form.Size = New-Object System.Drawing.Size(580, 500)
# Police des étiquettes
$fontLabels = New-Object System.Drawing.Font("Arial", 12)
# Police du texte qu'on écrit (textboxes)
$fontTextBoxes = New-Object System.Drawing.Font("Arial", 14)
# Police des boutons
$fontButtons = New-Object System.Drawing.Font("Arial", 12)
$clientTextBoxes = @()
$serverTextBoxes = @()
function Add-InfraControls {
param ($topPosition)
$clientNameLabel = New-Object System.Windows.Forms.Label
$clientNameLabel.Text = "Nom du client"
$clientNameLabel.Location = New-Object System.Drawing.Point(10, $topPosition)
$clientNameLabel.AutoSize = $true
$clientNameLabel.Font = $fontLabels
$form.Controls.Add($clientNameLabel)
$clientNameTextBox = New-Object System.Windows.Forms.TextBox
$clientNameTextBox.Location = New-Object System.Drawing.Point(200, $topPosition)
$clientNameTextBox.Size = New-Object System.Drawing.Size(330, 30) # pour modifier la taille, modifier les valeurs entre parenthèses (largeur, je ne sais pas)
$clientNameTextBox.Font = $fontTextBoxes
$form.Controls.Add($clientNameTextBox)
$clientTextBoxes += $clientNameTextBox
$serversLabel = New-Object System.Windows.Forms.Label
$serversLabel.Text = "Liste des serveurs"
$serversLabel.Location = New-Object System.Drawing.Point(10, ($topPosition + 60))
$serversLabel.AutoSize = $true
$serversLabel.Font = $fontLabels
$form.Controls.Add($serversLabel)
$serversTextBox = New-Object System.Windows.Forms.TextBox
$serversTextBox.Location = New-Object System.Drawing.Point(200, ($topPosition + 60))
$serversTextBox.Size = New-Object System.Drawing.Size(330, 220)
$serversTextBox.Multiline = $true
$serversTextBox.ScrollBars = [System.Windows.Forms.ScrollBars]::Vertical
$serversTextBox.Font = $fontTextBoxes
$form.Controls.Add($serversTextBox)
$serverTextBoxes += $serversTextBox
}
Add-InfraControls -topPosition 20
$addInfraButton = New-Object System.Windows.Forms.Button
$addInfraButton.Text = "Ajouter une infra supplémentaire"
$addInfraButton.Location = New-Object System.Drawing.Point(10, 325)
$addInfraButton.Size = New-Object System.Drawing.Size(250, 50)
$addInfraButton.Font = $fontButtons
$addInfraButton.Add_Click({
$currentTopPosition = 20 + (($clientTextBoxes.Count) * 160)
Add-InfraControls -topPosition $currentTopPosition
$generateButton.Location = New-Object System.Drawing.Point(300, ($currentTopPosition + 160))
$quitButton.Location = New-Object System.Drawing.Point(10, ($currentTopPosition + 160))
$form.Height += 160
})
$form.Controls.Add($addInfraButton)
$generateButton = New-Object System.Windows.Forms.Button
$generateButton.Text = "Générer le fichier Excel"
$generateButton.Location = New-Object System.Drawing.Point(300, 400)
$generateButton.Size = New-Object System.Drawing.Size(250, 50)
$generateButton.Font = $fontButtons
$generateButton.Add_Click({
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false
$workbook = $excel.Workbooks.Add()
$worksheet = $workbook.Worksheets.Item(1)
$worksheet.Cells.Item(1, 1) = "nom du client"
$worksheet.Cells.Item(1, 2) = "serveur"
for ($i = 0; $i -lt $clientTextBoxes.Count; $i++) {
$clientName = $clientTextBoxes[$i].Text
$servers = $serverTextBoxes[$i].Lines -join ','
[System.Windows.Forms.MessageBox]::Show("Client Name: $clientName, Servers: $servers")
$worksheet.Cells.Item($i + 2, 1) = $clientName
$worksheet.Cells.Item($i + 2, 2) = $servers
}
$outputPath = "C:\export.xlsx"
$workbook.SaveAs($outputPath)
$excel.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($worksheet) | Out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($workbook) | Out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
[System.Windows.Forms.MessageBox]::Show("Fichier Excel généré avec succès à: $outputPath")
})
$form.Controls.Add($generateButton)
$quitButton = New-Object System.Windows.Forms.Button
$quitButton.Text = "Quitter"
$quitButton.Location = New-Object System.Drawing.Point(10, 400)
$quitButton.Size = New-Object System.Drawing.Size(250, 50)
$quitButton.Font = $fontButtons
$quitButton.Add_Click({
$form.Close()
})
$form.Controls.Add($quitButton)
$form.Add_Shown({$form.Activate()})
[System.Windows.Forms.Application]::Run($form)
Connexion ou Créer un compte pour participer à la conversation.
- forum
- PowerShell
- Entraide pour les débutants
- création d'une boîte de dialogue pour générer un fichier excel
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les débutants
- création d'une boîte de dialogue pour générer un fichier excel