none
powershell extract csv to xls RRS feed

  • Question

  • Bonjour,

    Je développe depuis très peu de temps sur powershell et j'ai un besoin de pouvoir extraire un fichier csv (certaines colonnes) et traiter les données entres deux colonnes date d'ouverture et date de fermeture pour obtenir une colonne durée (jour,heure, minute), j'ai crée un script mais ce dernier ne s'alimente pas merci d'avance pour votre aide

    function FromCSV-ToXLS2()
    { # }
     
    Param(
    $csvFile = "C:\temp\glpi.csv",
    $path = "C:\temp\reporting2Out.xlsx"
     
     
    )
    # $lignes = Import-Csv -Path $csvFile
    $lignes1 = Import-CSV $csvFile -header "ID","Titre","Statut","Date d'ouverture","Date de cloture",
    "Derniere modification","Priorité","Demandeur","Attribué à - Technicien","Categorie",
    "Attribué à - Groupe","Groupe","Durée totale" -delimiter ';'# | Sort-Object "Categorie" -descending
     
    $lignes = @($lignes1[0], $lignes1 | Sort-Object "Categorie" -descending)
     
    $Excel = New-Object -ComObject excel.application
     
    $Excel.visible = $false
    $workbook = $Excel.workbooks.open($path)
    <#
    foreach ($sheet in $workbook.WorkSheets)
    {
    $sheet.Name
    }
    #>
    $worksheets = @($workbook.WorkSheets) #["Feuil1"]
     
    $worksheet = $WorkSheets | Where-Object {$_.Name -eq "Feuil1"} | Select-Object $_
    $worksheet.Cells.clear()
    $worksheet.Name
     
    # $workbook.WorkSheets | Select-Object $_.Name
    # $worksheet = $workbook.WorkSheets | Where-Object $_.Name -eq "Feuil1" | Select-Object $_.Name
     
     
     
    $i = 0
    $duree = 0
    $dateDeb = [System.DateTime]::MinValue
     
     
     
    $dateFin = [System.DateTime]::MinValue
    foreach($ligne in $lignes)
    {
    $i++
     
    # if ($i -eq 1) { continue }
    # $ligne.Demandeur {[System.DateTime]::ParseExact($_, "MM/dd/yyyy", $null)}
    $ligne
    "Demandeur ---> " + $ligne.Demandeur
    $dateDebFlag = [System.DateTime]::TryParse($ligne."Date d'ouverture", [ref]$dateDeb)
    $dateFinFlag = [System.DateTime]::TryParse($ligne."Derniere modification", [ref]$dateFin)
     
     
    # $dateFinFlag = [System.DateTime]::TryParse($ligne."Date de cloture", [ref]$dateFin)
    $duree = $dateFin - $dateDeb
    if ($dateDeb -eq [System.DateTime]::MinValue)
    {
    $duree = 0
    }
    $message = ""
     
     
    $NbJours = 0
    $NbHeures = 0
    $jours = " "
     
     
    $temps = @()
    if ($dateDebFlag -and $dateFinFlag)
    {
    [System.TimeSpan]$duree = [System.TimeSpan]($dateFin - $dateDeb)
    $msg = [System.String]::Format("{0:dd\\hh\\:mm\\:ss}", $duree)
    if ($msg.IndexOf(".") -gt -1)
    {
    $msgArr = $msg.Split(".")
    $jours = $msgArr[0] + " Jour(s) "
     
     
     
     
     
     
    $NbJours = $msgArr[0]
    $temps = $msgArr[1].Split(":")
    }
    else
     
     
    {
    $jours = " "
    $temps = $msg.Split(":")
    }
    $NbHeures = $temps[0]
    $message = $NbHeures + " heures " + $temps[1] + " minutes"
     
     
     
     
    }
    else
    {$message = "non defini"}
     
    $message
     
    "-dateDeb $dateDeb -dateFin $dateFin -duree $duree"
    $worksheet.cells.item($i,1) = $ligne.Titre
    $worksheet.cells.item($i,2) = $ligne.Demandeur
    $worksheet.cells.item($i,3) = $ligne."Priorité"
     
     
    $worksheet.cells.item($i,4) = $ligne.Statut
    $worksheet.cells.item($i,5) = $ligne.Categorie
    if($i -eq 1){
    $worksheet.cells.item($i,6) = "Duree"
     
     
     
    }else{
    $worksheet.cells.item($i,6) = $message
     
    }
     
    # $duree = [System.DateTime]::ParseExact($ligne."Date de cloture", "MM/dd/yyyy", $null) - [System.DateTime]::ParseExact($ligne."Date d'ouverture", "MM/dd/yyyy", $null)
     
     
    # $i++
    # if ($i -eq 13) { break }
     
     
    }
     
     
    $workbook.saveas($path)
    $Excel.Quit()
    Remove-Variable -Name excel
    [gc]::collect()
    [gc]::WaitForPendingFinalizers()
    }
     
    FromCSV-ToXLS2

    mardi 17 janvier 2012 10:27

Réponses

Toutes les réponses