Question Modification format colonnes Excel

Plus d'informations
il y a 1 semaine 2 jours - il y a 1 semaine 2 jours #34607 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:
# 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
Propulsé par Kunena