Question
Traitement dans un fichier excel (.xls)
- DarKZoNe
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 16
- Remerciements reçus 0
il y a 13 ans 2 mois #13666
par DarKZoNe
Réponse de DarKZoNe sur le sujet Re:Traitement dans un fichier excel (.xls)
Voici le code tel que promis!
Je sais qu'il y a encore du ménage à faire dans le code mais pour l'instant je dois travailler sur autre chose! Merci encore pour l'aide!
[code:1]function NettoyerFichier {param ($FichierFormattage)
$FichierAFormater = $FichierFormattage
(get-content $FichierAFormater) | foreach-object {$_ -replace '\"\"\"','' } | Set-Content $FichierAFormater
(get-content $FichierAFormater) | foreach-object {$_ -replace ',\"=>\"','\"' } | Set-Content $FichierAFormater
(get-content $FichierAFormater) | foreach-object {$_ -replace ',\"SideIndicator\"','\"' } | Set-Content $FichierAFormater
(get-content $FichierAFormater) | foreach-object {$_ -replace '\"\"','' } | Set-Content $FichierAFormater
(get-content $FichierAFormater) | foreach-object {$_ -replace ';','\";\"' } | Set-Content $FichierAFormater
(get-content $FichierAFormater) | foreach-object {$_ -replace '\"','' } | Set-Content $FichierAFormater
(get-content $FichierAFormater) | foreach-object {$_ -replace ';',',' } | Set-Content $FichierAFormater
(get-content $FichierAFormater) | foreach-object {$_ -replace 'NumeroEmploye;NumeroSous-Service;Sous-ServiceDescription;TitreEmploi;TitreEmploiDescription;Numeroduservice;Servicedescription;Prenom;Nom;DateDepart;NomComplet','Numero Employé;Numero Sous-Service;Sous-Service Description;Titre Emploi;Titre Emploi Description;Numero du service;Service description;Prenom ;Nom;Date de départ;Nom Complet' } | Set-Content $FichierAFormater
(get-content $FichierAFormater) | foreach-object {$_ -replace \"([0-9]+)-+([0-9]+)-+([0-9]+)\", '$3/$2/$1' } | Set-Content $FichierAFormater
}
function NettoyerFichierFinal {param ($FichierFormattage)
$FichierAFormater = $FichierFormattage
(get-content $FichierAFormater) | foreach-object {$_ -replace '\"\"\"','' } | Set-Content $FichierAFormater
(get-content $FichierAFormater) | foreach-object {$_ -replace ',\"=>\"','\"' } | Set-Content $FichierAFormater
(get-content $FichierAFormater) | foreach-object {$_ -replace ',\"SideIndicator\"','\"' } | Set-Content $FichierAFormater
(get-content $FichierAFormater) | foreach-object {$_ -replace ',',';' } | Set-Content $FichierAFormater
(get-content $FichierAFormater) | foreach-object {$_ -replace '\"\"','\"' } | Set-Content $FichierAFormater
(get-content $FichierAFormater) | foreach-object {$_ -replace '\"NumeroEmploye\";\"NumeroSous-Service\";\"Sous-ServiceDescription\";\"TitreEmploi\";\"TitreEmploiDescription\";\"Numeroduservice\";\"Servicedescription\";\"Prenom\";\"Nom\";\"DateDepart\";\"NomComplet\"','Numero Employé;Numero Sous-Service;Sous-Service Description;Titre Emploi;Titre Emploi Description;Numero du service;Service description;Prenom ;Nom;Date de départ;Nom Complet' } | Set-Content $FichierAFormater
(get-content $FichierAFormater) | foreach-object {$_ -replace \"([0-9]+)/+([0-9]+)/+([0-9]+)\", '$3-$2-$1' } | Set-Content $FichierAFormater
(get-content $FichierAFormater) | foreach-object {$_ -replace '\"','' } | Set-Content $FichierAFormater
}
Function TraiterFichier {
Copy-Item .\Actif.csv \".\Employe Actif.csv\"
NettoyerFichier .\Actif.csv
NettoyerFichier .\Depart.csv
$csv1 = Import-Csv '.\Actif.csv'
$csv2 = Import-Csv '.\Depart.csv'
$Sortie = Compare-Object $csv1 $csv2 -Property 'Nomcomplet' -PassThru | where {$_.SideIndicator -eq \"=>\"} | export-csv .\VraiDepartTemp.csv -NoTypeInformation
NettoyerFichier .\VraiDepartTemp.csv
Start-Sleep -Seconds 10
$csv3 = Import-Csv '.\VraiDepartTemp.csv'
$Sortie = Compare-Object $csv1 $csv3 -Property 'Nomcomplet' -PassThru | where {$_.SideIndicator -eq \"=>\"} | export-csv .\VraiDepartNonTraite.csv -NoTypeInformation
Remove-Item .\Depart.csv
Remove-Item .\Actif.csv
}
Function ComparerDate {
$new_csv = @()
Import-CSV .\VraiDepartNonTraite.csv | sort NomComplet |
foreach {
if ($temp -eq $null){$temp = $_}
if ($_.NomComplet -ne $temp.NomComplet){
$new_csv += $temp
$temp = $_
}
elseif ([datetime]$_.DateDepart -gt [datetime]$temp.DateDepart){
$temp = $_
}
}
$new_csv += $temp
Write-host \"Vrai Depart\"
$new_csv | export-csv '.\Vrai Depart.csv' -notype
NettoyerFichierFinal '.\Vrai Depart.csv'
}
$userObjects = Import-csv '.\Employés-Tous+Départs Original.csv' -Delimiter “;” -Header NumeroEmploye,NumeroSous-Service,Sous-ServiceDescription,TitreEmploi,TitreEmploiDescription,Numeroduservice,Servicedescription,Prenom,Nom,DateDepart | Select-Object -Skip 1
$userObjects | Add-Member -MemberType NoteProperty -Name 'NomComplet' -Value $Null
if (((Test-Path '.\Depart.csv') -eq $False) -and ((Test-Path '.\Actif.csv') -eq $False)) {
foreach ($Employe in $userObjects) {
$Employe.NomComplet = ($Employe.Prenom +$Employe.Nom).Trim()
$Employe | where ({$_.DateDepart -ne ''}) | export-csv '.\Depart.csv' -Append -Delimiter ';' -NoTypeInformation
$Employe| where ({$_.DateDepart -eq ''}) |export-csv '.\Actif.csv' -Append -Delimiter ';' -NoTypeInformation
}
TraiterFichier
}
else {
TraiterFichier
}
ComparerDate
#Enleve la deuxième ligne du fichier Vrai Depart.csv car la fonction ComparerDate crée un ligne de trop après les en-têtes
(gc '.\Vrai Depart.csv') | ? {(2) -notcontains $_.ReadCount} | sc '.\Vrai Depart.csv'
NettoyerFichierFinal '.\Vrai Depart.csv'
NettoyerFichierFinal 'Employe Actif.csv'
Remove-Item \".\VraiDepartTemp.csv\"
Remove-Item \".\VraiDepartNonTraite.csv\"[/code:1]<br><br>Message édité par: DarKZoNe, à: 17/01/13 20:36
Je sais qu'il y a encore du ménage à faire dans le code mais pour l'instant je dois travailler sur autre chose! Merci encore pour l'aide!
[code:1]function NettoyerFichier {param ($FichierFormattage)
$FichierAFormater = $FichierFormattage
(get-content $FichierAFormater) | foreach-object {$_ -replace '\"\"\"','' } | Set-Content $FichierAFormater
(get-content $FichierAFormater) | foreach-object {$_ -replace ',\"=>\"','\"' } | Set-Content $FichierAFormater
(get-content $FichierAFormater) | foreach-object {$_ -replace ',\"SideIndicator\"','\"' } | Set-Content $FichierAFormater
(get-content $FichierAFormater) | foreach-object {$_ -replace '\"\"','' } | Set-Content $FichierAFormater
(get-content $FichierAFormater) | foreach-object {$_ -replace ';','\";\"' } | Set-Content $FichierAFormater
(get-content $FichierAFormater) | foreach-object {$_ -replace '\"','' } | Set-Content $FichierAFormater
(get-content $FichierAFormater) | foreach-object {$_ -replace ';',',' } | Set-Content $FichierAFormater
(get-content $FichierAFormater) | foreach-object {$_ -replace 'NumeroEmploye;NumeroSous-Service;Sous-ServiceDescription;TitreEmploi;TitreEmploiDescription;Numeroduservice;Servicedescription;Prenom;Nom;DateDepart;NomComplet','Numero Employé;Numero Sous-Service;Sous-Service Description;Titre Emploi;Titre Emploi Description;Numero du service;Service description;Prenom ;Nom;Date de départ;Nom Complet' } | Set-Content $FichierAFormater
(get-content $FichierAFormater) | foreach-object {$_ -replace \"([0-9]+)-+([0-9]+)-+([0-9]+)\", '$3/$2/$1' } | Set-Content $FichierAFormater
}
function NettoyerFichierFinal {param ($FichierFormattage)
$FichierAFormater = $FichierFormattage
(get-content $FichierAFormater) | foreach-object {$_ -replace '\"\"\"','' } | Set-Content $FichierAFormater
(get-content $FichierAFormater) | foreach-object {$_ -replace ',\"=>\"','\"' } | Set-Content $FichierAFormater
(get-content $FichierAFormater) | foreach-object {$_ -replace ',\"SideIndicator\"','\"' } | Set-Content $FichierAFormater
(get-content $FichierAFormater) | foreach-object {$_ -replace ',',';' } | Set-Content $FichierAFormater
(get-content $FichierAFormater) | foreach-object {$_ -replace '\"\"','\"' } | Set-Content $FichierAFormater
(get-content $FichierAFormater) | foreach-object {$_ -replace '\"NumeroEmploye\";\"NumeroSous-Service\";\"Sous-ServiceDescription\";\"TitreEmploi\";\"TitreEmploiDescription\";\"Numeroduservice\";\"Servicedescription\";\"Prenom\";\"Nom\";\"DateDepart\";\"NomComplet\"','Numero Employé;Numero Sous-Service;Sous-Service Description;Titre Emploi;Titre Emploi Description;Numero du service;Service description;Prenom ;Nom;Date de départ;Nom Complet' } | Set-Content $FichierAFormater
(get-content $FichierAFormater) | foreach-object {$_ -replace \"([0-9]+)/+([0-9]+)/+([0-9]+)\", '$3-$2-$1' } | Set-Content $FichierAFormater
(get-content $FichierAFormater) | foreach-object {$_ -replace '\"','' } | Set-Content $FichierAFormater
}
Function TraiterFichier {
Copy-Item .\Actif.csv \".\Employe Actif.csv\"
NettoyerFichier .\Actif.csv
NettoyerFichier .\Depart.csv
$csv1 = Import-Csv '.\Actif.csv'
$csv2 = Import-Csv '.\Depart.csv'
$Sortie = Compare-Object $csv1 $csv2 -Property 'Nomcomplet' -PassThru | where {$_.SideIndicator -eq \"=>\"} | export-csv .\VraiDepartTemp.csv -NoTypeInformation
NettoyerFichier .\VraiDepartTemp.csv
Start-Sleep -Seconds 10
$csv3 = Import-Csv '.\VraiDepartTemp.csv'
$Sortie = Compare-Object $csv1 $csv3 -Property 'Nomcomplet' -PassThru | where {$_.SideIndicator -eq \"=>\"} | export-csv .\VraiDepartNonTraite.csv -NoTypeInformation
Remove-Item .\Depart.csv
Remove-Item .\Actif.csv
}
Function ComparerDate {
$new_csv = @()
Import-CSV .\VraiDepartNonTraite.csv | sort NomComplet |
foreach {
if ($temp -eq $null){$temp = $_}
if ($_.NomComplet -ne $temp.NomComplet){
$new_csv += $temp
$temp = $_
}
elseif ([datetime]$_.DateDepart -gt [datetime]$temp.DateDepart){
$temp = $_
}
}
$new_csv += $temp
Write-host \"Vrai Depart\"
$new_csv | export-csv '.\Vrai Depart.csv' -notype
NettoyerFichierFinal '.\Vrai Depart.csv'
}
$userObjects = Import-csv '.\Employés-Tous+Départs Original.csv' -Delimiter “;” -Header NumeroEmploye,NumeroSous-Service,Sous-ServiceDescription,TitreEmploi,TitreEmploiDescription,Numeroduservice,Servicedescription,Prenom,Nom,DateDepart | Select-Object -Skip 1
$userObjects | Add-Member -MemberType NoteProperty -Name 'NomComplet' -Value $Null
if (((Test-Path '.\Depart.csv') -eq $False) -and ((Test-Path '.\Actif.csv') -eq $False)) {
foreach ($Employe in $userObjects) {
$Employe.NomComplet = ($Employe.Prenom +$Employe.Nom).Trim()
$Employe | where ({$_.DateDepart -ne ''}) | export-csv '.\Depart.csv' -Append -Delimiter ';' -NoTypeInformation
$Employe| where ({$_.DateDepart -eq ''}) |export-csv '.\Actif.csv' -Append -Delimiter ';' -NoTypeInformation
}
TraiterFichier
}
else {
TraiterFichier
}
ComparerDate
#Enleve la deuxième ligne du fichier Vrai Depart.csv car la fonction ComparerDate crée un ligne de trop après les en-têtes
(gc '.\Vrai Depart.csv') | ? {(2) -notcontains $_.ReadCount} | sc '.\Vrai Depart.csv'
NettoyerFichierFinal '.\Vrai Depart.csv'
NettoyerFichierFinal 'Employe Actif.csv'
Remove-Item \".\VraiDepartTemp.csv\"
Remove-Item \".\VraiDepartNonTraite.csv\"[/code:1]<br><br>Message édité par: DarKZoNe, à: 17/01/13 20:36
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.037 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Traitement dans un fichier excel (.xls)