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

 

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    juin 2013
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : juin 2013
    Messages : 313
    Points : 109
    Points
    109

    Par défaut Export excel impossible via logiciel

    Bonjour,
    ne sachant pas où poster le message je le met ici.

    A partir d'un logiciel qui a été developé en c#, je lance une requête de base de données, dans lequel on a un bouton Export, qui permet de sauvegardé les résultats dans un fichier excel. Seulement le problème, l'une de mes requête, retourne environ 215 227 lignes ( ça fait beaucoup oui ).

    Quand je clique sur le bouton export, il me met une erreur ( voir erreur hresult en piece jointe ) , donc impossible de générer le fichier excel.

    J'essaye donc de selectionner toutes les lignes du datagridview, je fais un CTRL+c , le curseur tourne puis il me met une erreur " system.outOfMemory exception ..... ça veut tout dire lol , donc impossible de copier mon datagridview.

    J'ai essayé de faire l'export au demarrage, supprimer des processus pour avoir de la memoire mais rien, comment je peux faire pour récupérer mes resultats ?

    Y a til un moyen de dire à l'ordi d'utiliser plus de ressource dans ma ram pour récupérer mon fichier ou que le logiciel ne plante pas ?

    Merci à vous
    Images attachées Images attachées   

  2. #2
    Expert éminent

    Homme Profil pro
    Développeur .NET
    Inscrit en
    janvier 2012
    Messages
    4 325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : janvier 2012
    Messages : 4 325
    Points : 8 997
    Points
    8 997
    Billets dans le blog
    23

    Par défaut

    Et comment fais-tu pour créer ton fichier Excel ? Automation ? OleDB comme pour une base de données ? OpenXML ?

    Out of memory, c'est dépasser la mémoire disponible.

    Si tu fais de l'automation regarde l'un l'ou l'autre. C'est à peu près la même chose et j'en ai marre de ne répéter

    https://www.developpez.net/forums/d1...l/#post9484493
    https://www.developpez.net/forums/d1...s/#post8497640

    Pour faire des fichiers Excel sans avoir Excel

    EPPlus


    ClosedXML
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    juin 2013
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : juin 2013
    Messages : 313
    Points : 109
    Points
    109

    Par défaut

    ok ,
    merci pour l'information, je regarderais ça.

    D'apres ce que j'ai vu, pour créer le fichier excel, on fait appel à une methode:

    Code c# : 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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    public static void DataGridVersExcel(DataGridView dgView, String unFichier, string strEnteteDeFichier, int startColumn)
            {
                int i = 0;
                int j = 0;
                try
                {
                    ExcelApplication excel = new ExcelApplication();
                    Workbook exbook = (Workbook)excel.Workbooks.Add(Missing.Value);
     
                    Worksheet exsheet = (Worksheet)excel.ActiveSheet;
                    //Double[] Totaux= new Double[4];
     
                    //Mise en forme de l'en-tête de la feuille Excel
     
                    Range r = exsheet.get_Range(Convert.ToChar(65 + i).ToString() + "1", Missing.Value);
     
                    foreach (DataGridViewColumn ch in dgView.Columns)
                    {
                        if (ch.Visible && ch.CellType.Name != "DataGridViewImageCell")
                        {
                            r = exsheet.get_Range(Convert.ToChar(65 + i).ToString() + "1", Missing.Value);
     
                            exsheet.Cells[1, i + 1] = ch.HeaderText.Trim();
                            r.Interior.ColorIndex = XlColorIndex.xlColorIndexAutomatic;
                            r.Font.Bold = true;
                            r.Font.Color = XlRgbColor.rgbBlue;
                            r.BorderAround(XlLineStyle.xlContinuous, XlBorderWeight.xlThin, XlColorIndex.xlColorIndexAutomatic, Missing.Value);
                            r.EntireColumn.AutoFit();
                            i++;
                        }
                    }
     
                    j = 2;
     
                    foreach (DataGridViewRow uneLigne in dgView.Rows)
                    {
                        i = 1;
                        foreach (DataGridViewColumn uneColonne in dgView.Columns)
                        {
                            if (uneColonne.Visible && uneColonne.CellType.Name != "DataGridViewImageCell")
                            {
                                r = exsheet.get_Range(Convert.ToChar(65 + i - 1).ToString() + j.ToString(), Missing.Value);
                                exsheet.Cells[j, i] = "'" + uneLigne.Cells[uneColonne.Name].Value.ToString().Trim();
                                r.BorderAround(XlLineStyle.xlContinuous, XlBorderWeight.xlThin, XlColorIndex.xlColorIndexAutomatic, Missing.Value);
                                r.EntireColumn.AutoFit();
                                i++;
                            }
                        }
                        exsheet.Columns.AutoFit();
                        j++;
                    }
                    exsheet.SaveAs(unFichier, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
                    excel.Quit();
     
     
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }

    voila ce que est fait, , y a t-il un moyen de l'optimiser pour éviter le problème concernant la mémoire ?
    merci

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

Discussions similaires

  1. [WD-2003] Formater export Excel vers Word via signet
    Par polemos dans le forum VBA Word
    Réponses: 6
    Dernier message: 24/11/2011, 14h33
  2. [AC-2007] export au format Excel impossible
    Par alassanediakite dans le forum VBA Access
    Réponses: 3
    Dernier message: 13/05/2010, 19h55
  3. Export Excel "Impossible d'agrandir la plage nommée"
    Par jean-paul lepetit dans le forum Access
    Réponses: 15
    Dernier message: 22/05/2007, 09h55
  4. [C#][EXCEL] import/export de données via excel
    Par desopedr dans le forum Windows Forms
    Réponses: 3
    Dernier message: 08/12/2006, 10h10

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