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

VB.NET Discussion :

comment remplir un tableau sous excel avec des données de DGV? [Débutant]


Sujet :

VB.NET

  1. #1
    Membre régulier Avatar de spring.time
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2011
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34

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

    Informations forums :
    Inscription : Décembre 2011
    Messages : 294
    Points : 84
    Points
    84
    Par défaut comment remplir un tableau sous excel avec des données de DGV?
    Salut,
    pourriez vous m'aider à remplir un tableau d'excel avec des données de datagridview,
    j'ai définit des noms à une colonne A,
    puis j'ai fait sur vb.net:
    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
    17
    18
    19
      Dim AppExcel As Object
            Dim Wkbk As Object
            Dim feuille As Object
            AppExcel = CreateObject("Excel.Application")
    Excel directement
            Wkbk = AppExcel.Workbooks.open("chemin\b.xlsx")
     
     
            feuille = Wkbk.Sheets.Item(1)
     
     
            AppExcel.Visible = True
     
     
            For I = 0 To grid_notes.Rows.Count - 1
     
                feuille.Range("discipline" & I).value = grid_notes.Rows(I).Cells("discipline").Value
     
            Next
    mais je ne vois rien sur excel;

    pourriez vous m'aider svp?

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    674
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 674
    Points : 1 176
    Points
    1 176
    Par défaut
    Bonjour,
    à tester avec les modif suivantes :
    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
            Dim AppExcel As xls.Application 'Object
            Dim Wkbk As xls.Workbook 'Object
            Dim feuille As xls.Worksheet 'Object
     
            'AppExcel = CType(CreateObject("Excel.Application"), Microsoft.Office.Interop.Excel.Application)
            AppExcel = New xls.Application
            'Excel(directement)
            Wkbk = AppExcel.Workbooks.open(My.Computer.FileSystem.CurrentDirectory & "\b.xlsx")
            feuille = CType(Wkbk.Sheets.Item(1), Microsoft.Office.Interop.Excel.Worksheet)
     
            AppExcel.Visible = True
     
            For I = 0 To DgvResult.Rows.Count - 1
                feuille.Range("discipline" & I).Value = DgvResult.Rows(I).Cells("Recipe").Value
            Next
    En adaptant à ton appli bien sur :
    1) l'import, ici xls :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Imports xls = Microsoft.Office.Interop.Excel
    2) Le chemin du fichier xlsx.
    3) les noms de DGV et de la colonne visée.

  3. #3
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 442
    Points
    4 442
    Par défaut
    Bonjour spring.time

    Comme dit par chrismonoye .......mais il faut mettre ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    For I = 0 To grid_notes.Rows.Count - 1
     
    '----------------rectifie cette ligne
    '            feuille.Range("discipline" & I).value = grid_notes.Rows(I).Cells("discipline").Value
    '--------------- comme ceci
          feuille.Range("discipline" & I).value = grid_notes.Rows(I).Cells("discipline").Value.ToString
     
            Next
    car le format interne des cellules excel est un type string...............
    bon code........................

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    674
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 674
    Points : 1 176
    Points
    1 176
    Par défaut
    Bonjour MABROUKI, rencontre tu un problème sans le .ToString ?

    coté .Net la propriété Value de l'un comme de l'autre est de type Object.

    Coté Office, Value attendue ou retournée est de type Variant (pas String), similaire à Object de .Net.

    Normalement on peut envoyer tous les types courants sans problème, le "marchaleur" d'interopérabilité de l'Assembly Microsoft.Office.Interop.Excel se chargeant des équivalences.

  5. #5
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 442
    Points
    4 442
    Par défaut
    bonjour chrismonoye........
    Sache ceci pour ta culture .Net et COM:
    - value.ToString est un formatage qui informe simplement Excel qu'il doit utiliser le format standard d'affichage qui est capable d'afficher tous les types valeurs......Il ne fait aucune conversion de type....

    Ce que tu affirmes là est donc erronee.

    Concernant le "marshaleur" je ne suis un codeur qui utilise une boite noire sans la connaitre à fond .
    Et Com n'est pas .Net.......
    1/en .Net il y a les types :
    -valeurs standard boxable et unboxable en Object via leur valeur
    -types references :boxable et unboxable en Object via leurs pointeurs...

    2/en COM c'est exactement pareil....
    -les types valeurs standard
    -les types object geres par des pointeurs
    De plus pour ta culture Com sache que "variant" est une Structure-Union de tous les types valeurs ...je dis bien "types valeur"......definie en Com....
    Un Structure-Union en com est un type reference ....comme en .Net
    Il s'ensuit que un type valeur .Net-exemple un double - est transmis via la bete "variant" qui est une structure......
    Cette situation donne beaucoup de travail au marshalleur......
    Le marshaleur fait ceci :
    - type valeur est convertit en variant et transmis..
    - type valeur meme "boxe" en object est "unboxe" :
    Exemple : si tu affecte un string à un object il est d'abord "unboxe" en valeur et transmis comme un variant....
    - type object Com je dis bien "object Com" c'est plus complique encore
    Le object Com doit disposer d'une interface et d'un "GUID".... de plus doit etre engregistre sur le serveur .C'est une exigence des objets en COM(& Excel est un smple serveur .exe COM ne pas l'oublier )

    Pour le dll win 32 c'est une autre discussion et il faut gerer soi-meme le marshalling des types.....
    Mais il est bon qu'on sache ce qui se passe dans le "marshalleur" ....
    Bon code....................

  6. #6
    Membre régulier Avatar de spring.time
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2011
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34

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

    Informations forums :
    Inscription : Décembre 2011
    Messages : 294
    Points : 84
    Points
    84
    Par défaut
    je vous remercie beaucoup
    mon problème s'est résolu grâce à vous:
    MABROUKI, chrismonoye

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    674
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 674
    Points : 1 176
    Points
    1 176
    Par défaut
    Bonjour MABROUKI

    Réponse tardive, hé oui, le temps …

    Citation Envoyé par MABROUKI
    - value.ToString est un formatage qui informe simplement Excel qu'il doit utiliser le format standard d'affichage qui est capable d'afficher tous les types valeurs......Il ne fait aucune conversion de type....
    Si dans Excel je tape 1.25 ou Mab et que je regarde le Type (=TYPE(maCellule))), j’ai pour le premier 1 (nombre) et pour le second 2 (texte).
    Excel n’analyse-t-il pas la valeur pour en définir son type ?

    Maintenant coté .net, je passe un Object entre les deux mondes et je regarde les types envoyés et reçus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                feuille.Range(maCellule).Value =val
                Console.WriteLine(val.GetType.Name)
                Console.WriteLine(feuille.Range(maCellule).Value.GetType.Name)
    Si j'envois 1.25 ou "Mab" ou « 1,25 » ou « 1.25 », j’ai respectivement :
    Double --> Double
    String --> String
    String --> Double
    String -->String (Respecte la culture en cours)

    Si j’écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
              feuille.Range(maCellule).Value =val.ToString
    Les types envoyés seront tous évidemment de type String, mais aucun changement de type pour les reçus.

    Si je regarde ce qu’il se passe au niveau de la transmission de la copie de la Valeur par la propriété Value de Range dans l’Assembly Microsoft.Office.Interop.Excel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Property Value(ByVal RangeValueDataType As Object) As Object
    Cette propriété effectue semble-t-il un marshaling si il y a lieu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (<[In], MarshalAs(UnmanagedType.Struct)> ByVal Optional Object
    Struct : VARIANT utilisé pour marshaler des classes et des types valeur mis en forme managés.
    A quel niveau le Type de la valeur est-il défini : Interop ou Excel ?

    Citation Envoyé par MABROUKI
    Un Structure-Union en com est un type reference ....comme en .Net
    Il s'ensuit que un type valeur .Net-exemple un double - est transmis via la bete "variant" qui est une structure......
    Cette situation donne beaucoup de travail au marshalleur......
    Là aussi je suis dubitatif, Double est un type blittable et MSDN me dit :
    La plupart des types de données ont une représentation commune à la fois dans la mémoire managée et non managée, et ne nécessitent pas de traitement particulier par le marshaleur d'interopérabilité. Ces types sont appelés des types blittables car ils ne nécessitent pas de conversion lorsqu'ils sont passés entre le code managé et le code non managé.
    Mais en résumé pas de problème avec l’ajout ou non de ToString pour les types blittables ( la plupart des types que l’on utilise en fin de compte).

    Mais là où l’ajout de ToString pose un problème est pour les types non blittables.

    Un exemple avec le plus connu d’entre eux : le booléen :
    Dans mon application .Net, j’ai des données Booléennes que je transmets à un fichier Excel.
    Dans ce fichier, je veux exploiter ces données importées et pour l’exemple, y appliquer un bonus avec la formule suivante :
    Sachant que True et False me renverrons 1 ou 0 respectivement.
    Sans ToString pas de problème je reçois un Bool, soit 1*10 ou 0*10
    Avec ToString : erreur dans la formule, normale à priori, il n’y a que des lettres (true ou false) et Excel reçoit un Str ou type la valeur reçue en Str.

    Voici mes interrogations (inutile d’y voir de fausses questions ironiquement trollesques).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. MDX sous Excel avec des paramètres
    Par julie123 dans le forum SSAS
    Réponses: 10
    Dernier message: 04/09/2013, 13h56
  2. [Débutant] création de diagramme sous C# avec des données reçues à partir des capteurs
    Par yassinesama dans le forum Windows Forms
    Réponses: 5
    Dernier message: 21/05/2013, 14h04
  3. [AC-2010] Remplir un champ de table avec des données calculées ?
    Par solteron dans le forum Access
    Réponses: 1
    Dernier message: 21/01/2010, 14h14
  4. Réponses: 1
    Dernier message: 08/10/2008, 15h30
  5. Réponses: 7
    Dernier message: 01/04/2007, 12h30

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