Question Excel - Lecture et Comparaison

Plus d'informations
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]

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

Plus d'informations
il y a 10 ans 10 mois #19625 par Laurent Dardenne
Ivory écrit:

Je viens de vérifier

C'est à dire ?
L'assembly est chargée ?
Le code de test de la classe renvoi une erreur ?
L'objet COM Excel est-il créé ?
Ivory écrit:

Dois-je couper (split) $DateValidation et $DateCourante pour ne travailler que sur Jour et Mois ??

Surtout pas !
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.

Plus d'informations
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 :blush: ) 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

L'assembly est chargée ?

Le code de test de la classe renvoi une erreur ?

L'objet COM Excel est-il créé ?

<br><br>Message édité par: Ivory, à: 4/05/15 16:02

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

Plus d'informations
il y a 10 ans 10 mois #19632 par Laurent Dardenne
&gt;&gt;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]

&gt;&gt;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]

&gt;&gt;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.

Plus d'informations
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.

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

Plus d'informations
il y a 10 ans 10 mois #19634 par Laurent Dardenne
Ivory écrit:

Cela fonctionne mais il y a surement mieux...

Le TimeSpan simplifie le code.
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 \&quot;01/07/2015\&quot; -End \&quot;01/09/2015\&quot;«»).days
#62
(New-TimeSpan -start \&quot;28/02/2015\&quot; -End \&quot;30/03/2015\&quot;«»).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
Propulsé par Kunena