Question
Excel - Lecture et Comparaison
- Ivo
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 17
- Remerciements reçus 0
il y a 10 ans 10 mois #19624
par Ivo
Réponse de Ivo sur le sujet Re:Excel - Lecture et Comparaison
Je viens de vérifier et j'ai toujours les mêmes erreurs. LE fichier se créer bien mais ce dernier est vide même lors d'un import-csv.
Je suis en train de travailler sur la comparaison de date mais je me tire un peu les cheveux...(J'ai réalisé un .csv avec 4 colonnes et 3 lignes dont celle qui indique le type de colonne. Ci-dessous l'exemple du fichier)
LASTNAME FIRSTNAME DATE INFORMATION
PLOP PLAP 150515 NEANT
Dans mon code ci-dessous, je ne sais pas trop par où passer pour faire la comparaison de date pour ensuite taper dans le \"Switch\"
Dois-je couper (split) $DateValidation et $DateCourante pour ne travailler que sur Jour et Mois ??
Ou comparer dans un premier temps le Mois et s'il est identique comparer le jour ??
Merci par avance pour vos retours.
[code:1]#Date actuelle au format ddmmyy
$DateCourante = Get-Date -UFormat %d%m%y
#Lecture du fichier csv à partir de la 2ème ligne pour ne pas prendre le nom de la colonne 3
$filecsv = get-content \"monfichier.csv\" | Select-Object -Skip 1
foreach($ligne in $filecsv)
{
#Récupération de la 3ème colonne au format ddmmyy à l'aide du séparateur \",\"
$datecsv = $ligne.split(\",\"«»)[2]
$DateValidation = $datecsv
$DateDiff = ($DateValidation - $DateCourante)
<#exemple Resultat:
$DateValidation = 100515
$DateCourant = 300415
#>
Switch ($DateDiff)
{
{$_ -eq -61} {Write-Host \"A 2 mois avant Expiration : $StrDebug\";break}
{$_ -eq -31} {Write-Host \"A 1 mois avant expiration : $StrDebug\";break}
{$_ -eq -14} {Write-Host \"A 2 semaines avant expiration : $StrDebug\";break}
default {Write-Host \"Autres cas : $StrDebug\"}
}
} [/code:1]
Je suis en train de travailler sur la comparaison de date mais je me tire un peu les cheveux...(J'ai réalisé un .csv avec 4 colonnes et 3 lignes dont celle qui indique le type de colonne. Ci-dessous l'exemple du fichier)
LASTNAME FIRSTNAME DATE INFORMATION
PLOP PLAP 150515 NEANT
Dans mon code ci-dessous, je ne sais pas trop par où passer pour faire la comparaison de date pour ensuite taper dans le \"Switch\"
Dois-je couper (split) $DateValidation et $DateCourante pour ne travailler que sur Jour et Mois ??
Ou comparer dans un premier temps le Mois et s'il est identique comparer le jour ??
Merci par avance pour vos retours.
[code:1]#Date actuelle au format ddmmyy
$DateCourante = Get-Date -UFormat %d%m%y
#Lecture du fichier csv à partir de la 2ème ligne pour ne pas prendre le nom de la colonne 3
$filecsv = get-content \"monfichier.csv\" | Select-Object -Skip 1
foreach($ligne in $filecsv)
{
#Récupération de la 3ème colonne au format ddmmyy à l'aide du séparateur \",\"
$datecsv = $ligne.split(\",\"«»)[2]
$DateValidation = $datecsv
$DateDiff = ($DateValidation - $DateCourante)
<#exemple Resultat:
$DateValidation = 100515
$DateCourant = 300415
#>
Switch ($DateDiff)
{
{$_ -eq -61} {Write-Host \"A 2 mois avant Expiration : $StrDebug\";break}
{$_ -eq -31} {Write-Host \"A 1 mois avant expiration : $StrDebug\";break}
{$_ -eq -14} {Write-Host \"A 2 semaines avant expiration : $StrDebug\";break}
default {Write-Host \"Autres cas : $StrDebug\"}
}
} [/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 10 ans 10 mois #19625
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Excel - Lecture et Comparaison
Ivory écrit:
L'assembly est chargée ?
Le code de test de la classe renvoi une erreur ?
L'objet COM Excel est-il créé ?
Ivory écrit:
Il faut transformer la string contenant la date en un type [DateTime], ensuite tu laisses dotnet faire la comparaison :
[code:1]
$DateValidation=$ObjetCourant.Date_de_validation -As [DateTime]
[/code:1]
Il faut savoir quel format de date tu utilises, ici implicitement c'est JJ/MM/YYYY, si tu en utilises un autre il faut adapter cette instruction.
La comparaison de date renvoi un objet de type TimeSpan :
Un objet TimeSpan représente un intervalle de temps (durée ou temps écoulé) qui est mesuré en nombre positif ou négatif de jours, heures, minutes, secondes et fractions de seconde.
[code:1]
(Get-Date) - (Get-Date).Adddays(1)
[/code:1]
Répond déjà à ces questions avant d'aller plus loin.
C'est à dire ?Je viens de vérifier
L'assembly est chargée ?
Le code de test de la classe renvoi une erreur ?
L'objet COM Excel est-il créé ?
Ivory écrit:
Surtout pas !Dois-je couper (split) $DateValidation et $DateCourante pour ne travailler que sur Jour et Mois ??
Il faut transformer la string contenant la date en un type [DateTime], ensuite tu laisses dotnet faire la comparaison :
[code:1]
$DateValidation=$ObjetCourant.Date_de_validation -As [DateTime]
[/code:1]
Il faut savoir quel format de date tu utilises, ici implicitement c'est JJ/MM/YYYY, si tu en utilises un autre il faut adapter cette instruction.
La comparaison de date renvoi un objet de type TimeSpan :
Un objet TimeSpan représente un intervalle de temps (durée ou temps écoulé) qui est mesuré en nombre positif ou négatif de jours, heures, minutes, secondes et fractions de seconde.
[code:1]
(Get-Date) - (Get-Date).Adddays(1)
[/code:1]
Répond déjà à ces questions avant d'aller plus loin.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Ivo
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 17
- Remerciements reçus 0
il y a 10 ans 10 mois #19631
par Ivo
Réponse de Ivo sur le sujet Re:Excel - Lecture et Comparaison
Bonjour à tous,
Suite à ton retour Laurent, j'ai utilisé le TimeSpan.
voici mon code concernant mon calcul entre la date actuelle et la date du fichier. Cela fonctionne mais il y a surement mieux...
[code:1]#Date actuelle au format dd/mm/yyyy
$DateCourante = Get-Date -Format dd/MM/yyyy
#Lecture du fichier csv à partir de la 2ème ligne pour ne pas prendre le nom de la colonne 3
$filecsv = get-content \"monfichier.csv\" | Select-Object -Skip 1
foreach($ligne in $filecsv)
{
#Récupération de la 3ème colonne au format ddmmyy à l'aide du séparateur \",\"
$DateValidation = $ligne.split(\",\"«»)[2]
$ColName = $ligne.split(\",\"«»)[0]
#write-host $ColName $DateValidation
#Calcul la différence de jour entre la date actuelle et la date du fichier
$DateDiff = (New-TimeSpan -start $dateCourante -End $DateValidation).Days
#write-host $DateDiff
Switch ($DateDiff)
{
{$_ -eq 60} {Write-Host \"2 mois avant expiration pour $ColName\";break}
{$_ -eq 30} {Write-Host \"1 mois avant expiration pour $ColName\";break}
{$_ -eq 14} {Write-Host \"2 semaines avant expiration pour $ColName\";break}
}
}[/code:1]
Comment puis-je avoir les réponses à tes questions : (Désolé je suis un peu mauvais
) Ou plutôt, quel est le type de réponse car j'ai beaucoup d'infos lors de l’exécution de tes commandes Get-Assemblies etc
Suite à ton retour Laurent, j'ai utilisé le TimeSpan.
voici mon code concernant mon calcul entre la date actuelle et la date du fichier. Cela fonctionne mais il y a surement mieux...
[code:1]#Date actuelle au format dd/mm/yyyy
$DateCourante = Get-Date -Format dd/MM/yyyy
#Lecture du fichier csv à partir de la 2ème ligne pour ne pas prendre le nom de la colonne 3
$filecsv = get-content \"monfichier.csv\" | Select-Object -Skip 1
foreach($ligne in $filecsv)
{
#Récupération de la 3ème colonne au format ddmmyy à l'aide du séparateur \",\"
$DateValidation = $ligne.split(\",\"«»)[2]
$ColName = $ligne.split(\",\"«»)[0]
#write-host $ColName $DateValidation
#Calcul la différence de jour entre la date actuelle et la date du fichier
$DateDiff = (New-TimeSpan -start $dateCourante -End $DateValidation).Days
#write-host $DateDiff
Switch ($DateDiff)
{
{$_ -eq 60} {Write-Host \"2 mois avant expiration pour $ColName\";break}
{$_ -eq 30} {Write-Host \"1 mois avant expiration pour $ColName\";break}
{$_ -eq 14} {Write-Host \"2 semaines avant expiration pour $ColName\";break}
}
}[/code:1]
Comment puis-je avoir les réponses à tes questions : (Désolé je suis un peu mauvais
<br><br>Message édité par: Ivory, à: 4/05/15 16:02L'assembly est chargée ?
Le code de test de la classe renvoi une erreur ?
L'objet COM Excel est-il créé ?
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 10 ans 10 mois #19632
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Excel - Lecture et Comparaison
>>L'assembly est chargée ?
Tu dois retrouver l'assembly Interop.Excel Dans la liste renvoyée par :
[code:1]Get-Assemblies|select location|split-path -leaf[/code:1]
>>Le code de test de la classe renvoi une erreur ?
ceci doit te renvoyer une valeur sinon une erreur (inconnu) si l'assembly n'est pas chargée :
[code:1][Microsoft.Office.Interop.Excel.xlFileFormat]::«»xlCsv
[/code:1]
>>L'objet COM Excel est-il créé ?
L'objet $Excel doit exister
[code:1]$Excel = new-object -com Excel.Application
$Excel
#renvoi qq info
[/code:1]
Tu dois retrouver l'assembly Interop.Excel Dans la liste renvoyée par :
[code:1]Get-Assemblies|select location|split-path -leaf[/code:1]
>>Le code de test de la classe renvoi une erreur ?
ceci doit te renvoyer une valeur sinon une erreur (inconnu) si l'assembly n'est pas chargée :
[code:1][Microsoft.Office.Interop.Excel.xlFileFormat]::«»xlCsv
[/code:1]
>>L'objet COM Excel est-il créé ?
L'objet $Excel doit exister
[code:1]$Excel = new-object -com Excel.Application
$Excel
#renvoi qq info
[/code:1]
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Ivo
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 17
- Remerciements reçus 0
il y a 10 ans 10 mois #19633
par Ivo
Réponse de Ivo sur le sujet Re:Excel - Lecture et Comparaison
Merci Laurent pour ton retour.
L'assembly Interop.Excel n'est pas présent dans la liste.
Du coup le code suivant renvoi une erreur
[code:1][Microsoft.Office.Interop.Excel.xlFileFormat]::«»xlCsv
Erreur : Type [Microsoft.Office.Interop.Excel.xlFileFormat] introuvable : assurez-vous que l’assembly contenant ce type est chargé.[/code:1]
L'objet COM Excel est bien présent car il me retourne des valeurs.
L'assembly Interop.Excel n'est pas présent dans la liste.
Du coup le code suivant renvoi une erreur
[code:1][Microsoft.Office.Interop.Excel.xlFileFormat]::«»xlCsv
Erreur : Type [Microsoft.Office.Interop.Excel.xlFileFormat] introuvable : assurez-vous que l’assembly contenant ce type est chargé.[/code:1]
L'objet COM Excel est bien présent car il me retourne des valeurs.
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 10 ans 10 mois #19634
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Excel - Lecture et Comparaison
Ivory écrit:
Une remarque, la date doit être au format Fr, c'est à dire respecter la culture courante déclarée.
La notion de mois n'existe pas :
[code:1]
(New-TimeSpan -start \"01/07/2015\" -End \"01/09/2015\"«»).days
#62
(New-TimeSpan -start \"28/02/2015\" -End \"30/03/2015\"«»).days
#30
[/code:1]
Ici les messages, référençant la notion de mois, ne me semble pas adaptés. Certes, c'est un détail...
Le TimeSpan simplifie le code.Cela fonctionne mais il y a surement mieux...
Une remarque, la date doit être au format Fr, c'est à dire respecter la culture courante déclarée.
La notion de mois n'existe pas :
[code:1]
(New-TimeSpan -start \"01/07/2015\" -End \"01/09/2015\"«»).days
#62
(New-TimeSpan -start \"28/02/2015\" -End \"30/03/2015\"«»).days
#30
[/code:1]
Ici les messages, référençant la notion de mois, ne me semble pas adaptés. Certes, c'est un détail...
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.046 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Excel - Lecture et Comparaison