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 :

Interaction avec Excel : Problème utilisation tableau object[,]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Analyste Quantitatif / Ingénieur Financier
    Inscrit en
    Janvier 2008
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Analyste Quantitatif / Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2008
    Messages : 163
    Par défaut Interaction avec Excel : Problème utilisation tableau object[,]
    Bonjour,

    J'ai développé une application qui via un formulaire client extrait de l'information d'une base MySql pour l'exporter dans un fichier Excel.

    Je bloque sur l’utilisation des object[,] pour exporter plus rapidement dans excel mes données. En effet celles ci ne s'exportent pas dans un format exploitable par excel (ex : les double sont exportés en string et du coup impossible de faire un graphe sur ces données )

    Quand j'utilisais des data table (écriture cellule par cellule), j'arrivais à obtenir le bon format en convertissant ma data en double. Le problème est que compte tenue du nombre de tableaux et de leurs tailles c'est beaucoup trop long. C'est la raison pour laquelle j'essaye maintenant d'utiliser les array.

    Voici mon code :
    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
     
    deb = 1;
     
    object[,] arr_model = new object[ModelTableFinal.Rows.Count, ModelTableFinal.Columns.Count];
     
    for (int r = 0; r < ModelTableFinal.Rows.Count; r++)
    {
        DataRow dr = ModelTableFinal.Rows[r];
        for (int c = 0; c < ModelTableFinal.Columns.Count; c++)
        arr_model[r, c] = dr[c];           
    }
     
    Excel.Range c1 = (Excel.Range)oSheet.Cells[8, deb];
    Excel.Range c2 = (Excel.Range)oSheet.Cells[8 + ModelTableFinal.Rows.Count - 1, deb + ModelTableFinal.Columns.Count-1];
    Excel.Range range = oSheet.get_Range(c1, c2);
    range.Value = arr_model;
    Mon ancien code (fonctionnant avec des datatable)
    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
    20
    21
    22
    23
    24
     
    n = ModelTableFinal.Columns.Count;
    for (int i = 0; i < n; i++)
    {
       oSheet.Cells[8, deb + i] = ModelTableFinal.Columns[i].ColumnName.ToString();
       int j = 0;
      if(coltoconvert.ContainsKey(ModelTableFinal.Columns[i].ColumnName.ToString()) == false)
       {
         foreach (DataRow currow in ModelTableFinal.Rows)
         {
           oSheet.Cells[9 + j, deb + i] = currow[i].ToString();
           j++;
         }
       }
       else
       {
          foreach (DataRow currow in ModelTableFinal.Rows)
          {
            if (currow[i] != DBNull.Value)
               oSheet.Cells[9 + j, deb + i] = Convert.ToDouble(currow[i]);
            j++;
          }
       }
    }
    Je pourrais très bien utilisé un tableau de double double[,] mais il se peut que je mélange plusieurs format dans un même tableau.

    Y a t-il possibilité d'avoir un format par colonnes ?

    Merci d'avance

  2. #2
    Membre confirmé
    Homme Profil pro
    Analyste Quantitatif / Ingénieur Financier
    Inscrit en
    Janvier 2008
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Analyste Quantitatif / Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2008
    Messages : 163
    Par défaut
    Pour ceux que ça intéresse j'ai trouver une solution. En fait les object[,] peuvent stocker plusieurs formats, du coup il suffit de savoir dans quel format on veut chaque colonnes (définit dans une table de ma base).

    Voilà le code

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    public void ExcelExport(Excel.Worksheet Sheet, System.Data.DataTable dt, int rowstart, int colstart,
                SortedDictionary<string, string> colformat)
            {
                object[,] arr_model = new object[dt.Rows.Count + 1, dt.Columns.Count];
     
                for (int r = 0; r < dt.Rows.Count; r++)
                {
                    DataRow dr = dt.Rows[r];
                    for (int c = 0; c < dt.Columns.Count; c++)
                    {
                        if (r == 0) arr_model[r, c] = dt.Columns[c].ColumnName.ToString();
                        if (colformat.ContainsKey(dt.Columns[c].ColumnName.ToString()))
                        {
                            if (dr[c] != DBNull.Value)
                                arr_model[r + 1, c] = Convert.ToDouble(dr[c]);
                        }
                        else
                            arr_model[r + 1, c] = dr[c];
                    }
                }
     
                Excel.Range c1 = (Excel.Range)Sheet.Cells[rowstart, colstart];
                Excel.Range c2 = (Excel.Range)Sheet.Cells[rowstart + dt.Rows.Count, colstart + dt.Columns.Count - 1];
                Excel.Range range = Sheet.get_Range(c1, c2);
                range.Value = arr_model;
     
            }

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

Discussions similaires

  1. Connexion avec Excel problème Office 10?
    Par Alexandre Sahli dans le forum VBA Access
    Réponses: 2
    Dernier message: 23/10/2013, 18h43
  2. Interaction avec excel
    Par amnorian dans le forum VBA Access
    Réponses: 5
    Dernier message: 09/06/2011, 14h29
  3. problème utilisation Ole de Excel avec borland
    Par Invité dans le forum C++Builder
    Réponses: 7
    Dernier message: 27/03/2009, 13h36
  4. Problème avec Excel et tableau croisé dynamique
    Par françois62 dans le forum VBScript
    Réponses: 9
    Dernier message: 19/11/2006, 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