Question
Modification format colonnes Excel
- Dead
- Auteur du sujet
- Hors Ligne
- Membre senior
Réduire
Plus d'informations
- Messages : 70
- Remerciements reçus 2
il y a 1 semaine 2 jours - il y a 1 semaine 2 jours #34607
par Dead
Modification format colonnes Excel a été créé par Dead
Bonjour à tous,
J'ai fait un script qui copie des fichiers Excel issus de rapports SQL, dans un répertoire donné et sans lien ODBC. Cela fonctionne.
Cependant, dans chaque fichier, le format date jj/mm/yyyy n'est pas appliqué et je me retrouve avec des nombres. Pour le moment je corrige manuellement.
Chaque colonne qui doit être au format date a un nom spécifique, mais contient "DAT" pour date. On se retrouve avec des noms différents dans les fichiers, mais toujours avec "DAT" dans le nom des colonnes concernés.
A noté que ce script supprime des feuilles Excel issues du premier script de copie de données.
J'ai tenté ce bout de script, mais cela ne fonctionne pas:
J'ignore si cela est possible...
Je vous remercie pour précieuse aide
J'ai fait un script qui copie des fichiers Excel issus de rapports SQL, dans un répertoire donné et sans lien ODBC. Cela fonctionne.
Cependant, dans chaque fichier, le format date jj/mm/yyyy n'est pas appliqué et je me retrouve avec des nombres. Pour le moment je corrige manuellement.
Chaque colonne qui doit être au format date a un nom spécifique, mais contient "DAT" pour date. On se retrouve avec des noms différents dans les fichiers, mais toujours avec "DAT" dans le nom des colonnes concernés.
A noté que ce script supprime des feuilles Excel issues du premier script de copie de données.
J'ai tenté ce bout de script, mais cela ne fonctionne pas:
# Fonction pour définir le format de date
function Set-DateFormatForDATColumns {
param (
[object]$worksheet
)
try {
$columns = $worksheet.UsedRange.Columns
for ($i = 1; $i -le $columns.Count; $i++) {
$columnHeader = $worksheet.Cells.Item(1, $i).Text
if ($columnHeader -like "*DAT*") {
Write-Output "Traitement de la colonne $i avec l'en-tête : $columnHeader"
$columnRange = $columns.Item($i)
# Conversion des valeurs en DateTime si possible
foreach ($cell in $columnRange.Cells) {
try {
if ($cell.Value2 -is [double]) {
$cell.Value2 = [datetime]::FromOADate($cell.Value2)
} elseif ($cell.Value2 -is [string] -and [datetime]::TryParse($cell.Value2, [ref]$null)) {
$cell.Value2 = [datetime]::Parse($cell.Value2)
}
} catch {
Write-Output "Erreur de conversion pour la cellule $($cell.Address) dans la colonne $i"
}
}
# Application du format de date
try {
$columnRange.NumberFormat = "dd/mm/yyyy"
Write-Output "Format appliqué à la colonne $i"
} catch {
Write-Output "Impossible d'appliquer le format à la colonne $i : $($_.Exception.Message)"
}
}
}
} catch {
Write-Output "Erreur lors de l'application du format de date : $($_.Exception.Message)"
}
}
# Fonction pour supprimer les feuilles spécifiques
function Remove-UnwantedSheets {
param (
[object]$workbook
)
try {
$sheetsToDelete = @("Feuil1 (1)", "Feuil1")
foreach ($sheetName in $sheetsToDelete) {
$sheet = $workbook.Sheets | Where-Object { $_.Name -eq $sheetName }
if ($null -ne $sheet) {
Write-Output "Suppression de la feuille : $sheetName"
$sheet.Delete()
}
}
} catch {
Write-Output "Erreur lors de la suppression des feuilles : $($_.Exception.Message)"
}
}
# Traitement des fichiers Excel dans le répertoire
$targetDir = "\\PATH:\Rapports SQL - format EXCEL"
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false
$excel.DisplayAlerts = $false
try {
Get-ChildItem -Path $targetDir -Filter "*.xlsx" | ForEach-Object {
$filePath = $_.FullName
Write-Output "Traitement du fichier : $filePath"
$workbook = $excel.Workbooks.Open($filePath)
# Suppression des feuilles inutiles
Remove-UnwantedSheets -workbook $workbook
# Application du format de date dans les colonnes contenant "DAT"
foreach ($worksheet in $workbook.Sheets) {
Set-DateFormatForDATColumns -worksheet $worksheet
}
# Sauvegarde et fermeture du fichier
$workbook.Save()
$workbook.Close($false)
Write-Output "Mise à jour terminée pour le fichier : $filePath"
}
} catch {
Write-Output "Erreur générale lors du traitement : $($_.Exception.Message)"
} finally {
$excel.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
Write-Output "Excel fermé proprement."
}
J'ignore si cela est possible...
Je vous remercie pour précieuse aide
Dernière édition: il y a 1 semaine 2 jours par Dead.
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.091 secondes
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les débutants
- Modification format colonnes Excel