Question Traitement dans un fichier excel (.xls)

Plus d'informations
il y a 13 ans 2 mois #13610 par Laurent Dardenne
DarKZoNe écrit:

Maintenant, est ce qu'il y a un moyen d'effacer les lignes d'un fichier si un nom complet similaire est trouvé dans l'autre avec Compare-Object?

Peut être vaut-il mieux manipuler des listes d'objet au lieu de fichiers, si la volumétrie le permet.
Une autre appproche , à vérifier si c'est le même sujet...

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 2 mois #13649 par DarKZoNe
Laurent Dardenne écrit:

DarKZoNe écrit:

Maintenant, est ce qu'il y a un moyen d'effacer les lignes d'un fichier si un nom complet similaire est trouvé dans l'autre avec Compare-Object?

Peut être vaut-il mieux manipuler des listes d'objet au lieu de fichiers, si la volumétrie le permet.
Une autre appproche , à vérifier si c'est le même sujet...

Ça commence à être un peu compliqué pour ce que je suis capable de faire présentement :( Je vais quand même y jeter un coup d'oeil. De plus, je ne suis pas capable d'utiliser Compare-Object car il me donne des résultats vraiment étrange. Par exemple, il me donne des nom seulement à partir de la lettre P dans le fichier VraiDepart.csv

[code:1function 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 '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


}




$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 ';' -Verbose -NoTypeInformation

$Employe| where ({$_.DateDepart -eq ''}) |export-csv '.\Actif.csv' -Append -Delimiter ';' -Verbose -NoTypeInformation
}

$csv1 = import-csv '.\Actif.csv'
$csv2 = import-csv '.\Depart.csv'
$Sortie = Compare-Object $csv1 $csv2 -Property \"Nom Complet\" -PassThru | where {$_.SideIndicator -eq \"=>\"} | export-csv .\VraiDepart.csv -NoTypeInformation
NettoyerFichier .\VraiDepart.csv
NettoyerFichier .\Actif.csv
NettoyerFichier .\Depart.csv
}

else {

$csv1 = Import-Csv '.\Actif.csv'
$csv2 = Import-Csv '.\Depart.csv'
$Sortie = Compare-Object $csv1 $csv2 -property \"Nom Complet\" -PassThru | where {$_.SideIndicator -eq \"=>\"} | export-csv .\VraiDepart.csv -NoTypeInformation

NettoyerFichier .\VraiDepart.csv
NettoyerFichier .\Actif.csv
NettoyerFichier .\Depart.csv
[/code:1]<br><br>Message édité par: DarKZoNe, à: 16/01/13 19:18

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 2 mois #13653 par Laurent Dardenne
DarKZoNe écrit:

Ça commence à être un peu compliqué pour ce que je suis capable de faire présentement :(

A coeur vaillant rien d'impossible. Ce n'est pas du domaine du complexe mais celui de l'inconnu.

J'ai l'impression que tu compliques ton code.
A quoi servent les appels successif -Replace ?
Comment obtients-tu ces données ? De Compare-Object ?

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 2 mois #13655 par DarKZoNe
Laurent Dardenne écrit:

DarKZoNe écrit:

Ça commence à être un peu compliqué pour ce que je suis capable de faire présentement :(

A coeur vaillant rien d'impossible. Ce n'est pas du domaine du complexe mais celui de l'inconnu.

J'ai l'impression que tu compliques ton code.
A quoi servent les appels successif -Replace ?
Comment obtients-tu ces données ? De Compare-Object ?

En fait les Replace me servent à \&quot;formater\&quot; les fichiers de la bonne manière pour qu'Excel les ouvrent correctement car l'option export-csv ajoute tout plein de \&quot;\&quot; un peu partout.

Toute mes données viennent du fichier Employés-Tous+Départs Original.csv. Ensuite j'utilise des entêtes différentes car celles de base contiennent des espaces et des accents. Je remets les entêtes originales avec la fonction Replace car les fichiers csv sera utilisé dans un autre programme et doit absolument garder les entêtes par défaut.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 2 mois #13656 par DarKZoNe
Je viens de remarquer que Compare-Object ne semble pas aimer les ;

En trouvant un exemple sur internet j'ai vu qu'en remplaçant les ; par des virgules, que compare-object est capable de traiter correctement l'option -property. Maintenant ma liste contient tout les départs dans la liste. Il ne me reste qu'à modifier ma condition dans les Compare-Object pour avoir le résultat voulu! :)

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 2 mois #13661 par DarKZoNe
J'ai finalement terminé mon script! (il ne me reste qu'à ajouter les commentaire et faire un peu le ménage dans mon code) Je vais mettre tout le code demain dans un nouveau message en espérant que ça aide quelqu'un d'autre un jour et un gros merci à Laurent Dardenne,bien que je n'ai pas utilisé ce qu'il y avait sur la page que tu as proposé. C'est à partir de certains éléments sur cette page que j'ai fait d'autres recherches et que j'ai finalement trouvé la solution!

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.051 secondes
Propulsé par Kunena