IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Recupérer les dates contenues dans un object {System.DateTime[]}


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 52
    Par défaut Recupérer les dates contenues dans un object {System.DateTime[]}
    Bonjour a tous!

    Je suis en train de créer une .dll COM en C#, que j'appelle en suite via Excel/VBA.
    Je souhaite donne en VBA un tableau de dates, que je récupere via C#. Pour cela, j'utilise le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    public void SetBankHolidaysCalendar(object holidaysCalendar) {
                DateTime[] intermediaryTable;
                List<DateTime> finalList = new List<DateTime>();
     
                try {
                    intermediaryTable = (DateTime[])holidaysCalendar; // J'essaye de caster en tableau de date une dimension
                } catch (InvalidCastException) {
                    throw new InvalidCastException("The Holidays Calendar has to be a 1-dimension array of Dates."); // Si le "castage" rate
                }
     
                foreach (DateTime dateD in intermediaryTable)
                    finalList.Add(dateD);
     
                ExchangeBankHolidaysCalendar = finalList;
            }
    Cependant ce code ne fonctionne pas, et plante au niveau du cast.
    Je ne comprends pas vraiment pourquoi, surtout que dans Visual Studio, le type de holidaysCalendar est : object {System.DateTime[]}

    De plus, je réalise un processus similaire avec des tableaux de double, et il n'y a aucune probleme. Une idée d'ou le probleme peut venir?


    Merci !

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 479
    Par défaut
    Salut,
    si ma mémoire est bonne les dates sont stockées en double dans Excel. Voila pourquoi quand tu tentes un cast directement vers Datetime il te jette.
    Tu peux caster ton object en tableau de double, itérer sur chaque item que tu pourras caster en DateTime à l'aide de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateTime.FromOADate(double);
    Tiens nous au courant.

    A+

  3. #3
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 52
    Par défaut
    Bonjour,

    J'ai des résultats assez surprenant en fait...

    Si j'essaye de créer un tableau unicolonne de double, j'obtiens le meme probleme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    intermediaryTablePlus = (double[]) holidaysCalendar;
    En regardant le type de holidaysCalendar, il s'agit en fait maintenant d'un double[*] (ou DateTime[*] dans le cas de mon premier code), et non d'un double[] (ou DateTime[]) !!!
    Une idée de de ce que peut signifier cette etoile? Il me semble que c'est normalement pour les pointeurs, mais la....


    Par contre, si j'essaye de passer un tableau de plusieurs dimensions, aucun probleme: le cast, meme DateTime, se fait parfaitement...

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 479
    Par défaut
    Salut,
    tu peux montrer le code qui récupère la valeur des cellules de Excel ?

  5. #5
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 52
    Par défaut
    Bonjour,

    Rien de tres compliqué coté VBA: je recupere un Variant, je le cast en date, et j'appelle ma fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Sub generateDates()
        Dim listDate As ExchangeHolidayCalendar '''' Classe qui contient SetBankHolidaysCalendar en C#
        Set listDate = New ExchangeHolidayCalendar
     
        Dim calendrier() As Date
        Dim rangeCal As Variant
     
        rangeCal = Range("holidayCalendar")
        ReDim calendrier(LBound(rangeCal) To UBound(rangeCal))
     
        For i = LBound(rangeCal) To UBound(rangeCal)
            calendrier(i) = CDate(rangeCal(i, 1)) '''' Je Cast
        Next
     
        listDate.SetBankHolidaysCalendar (calendrier) '''''J'envoie le tableau
    End Sub

Discussions similaires

  1. Traiter une par une les dates contenue dans une cellule
    Par wyzer dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/04/2012, 09h20
  2. Lire les fonctions contenues dans une DLL
    Par uranium-design dans le forum Windows
    Réponses: 5
    Dernier message: 06/09/2006, 11h47
  3. Réponses: 4
    Dernier message: 23/07/2006, 20h42
  4. Réponses: 15
    Dernier message: 02/12/2005, 17h12
  5. Réponses: 5
    Dernier message: 16/03/2005, 22h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo