Meilleur auteur de réponses
powershell extract csv to xls

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
Réponses
-
Bonjour,
Roxana à trouvé un excellent lien concernant votre souscis .. J'ai regardé et lu les commentaires, et ça fonctionne a merveille..
Vous avez également d'autres liens tel:
- http://learn-powershell.net/2010/09/04/converting-csv-file-or-files-into-an-excel-workbook/
- http://www.computerperformance.co.uk/powershell/powershell_export_csv.htm
Bonne chance, Gokan
Founder of SharePoint CookBook: http://www.GokanOzcifci.be
Microsoft Certified Technology Specialist: SharePoint 2010, Configuring
Microsoft Certified Personal- Marqué comme réponse Roxana PANAITMicrosoft employee mardi 24 janvier 2012 13:05
-
Bonjour,
Vous avez consulté l’article de blog : Copy CSV Columns to an Excel Spreadsheet by Using PowerShell
(anglais)?Cordialement,
Roxana
Roxana PANAIT, MSFT
Votez! Appel à la contribution
Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.- Proposé comme réponse Gokan OzcifciMVP samedi 21 janvier 2012 17:07
- Marqué comme réponse Roxana PANAITMicrosoft employee mardi 24 janvier 2012 13:05
Toutes les réponses
-
Bonjour,
Vous avez consulté l’article de blog : Copy CSV Columns to an Excel Spreadsheet by Using PowerShell
(anglais)?Cordialement,
Roxana
Roxana PANAIT, MSFT
Votez! Appel à la contribution
Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.- Proposé comme réponse Gokan OzcifciMVP samedi 21 janvier 2012 17:07
- Marqué comme réponse Roxana PANAITMicrosoft employee mardi 24 janvier 2012 13:05
-
Bonjour,
Roxana à trouvé un excellent lien concernant votre souscis .. J'ai regardé et lu les commentaires, et ça fonctionne a merveille..
Vous avez également d'autres liens tel:
- http://learn-powershell.net/2010/09/04/converting-csv-file-or-files-into-an-excel-workbook/
- http://www.computerperformance.co.uk/powershell/powershell_export_csv.htm
Bonne chance, Gokan
Founder of SharePoint CookBook: http://www.GokanOzcifci.be
Microsoft Certified Technology Specialist: SharePoint 2010, Configuring
Microsoft Certified Personal- Marqué comme réponse Roxana PANAITMicrosoft employee mardi 24 janvier 2012 13:05
-
Bonjour,
Merci de nous tenir au courant.
Cordialement,
Roxana
Roxana PANAIT, MSFT
Votez! Appel à la contribution
Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte. -