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 :

Autre moyen d'exporter un datagridview


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Analyse système
    Inscrit en
    Juin 2013
    Messages
    976
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 976
    Par défaut Autre moyen d'exporter un datagridview
    bonjour,

    sur l'une de mes applications en c#, j'exporte un datagridview au format excel à l'aide d'un bouton ( à l'effigie d'une disque ) et je remarque les limites de la dll InteroExcel, je m'explique.
    Je suis amené à executer des requetes sql, qui s'affiche dans mon datagrid, certaines requetes me donnent un nombre de résultat potable ( entre 100 et 200lignes) et j'arrive à enregistrer facilement mon fichier excel.
    Or nous avons découvert que lorsque la requête renvoie 4000 voir 5000 lignes, lorsque nous cliquons sur la petite disquette pour enregistrer au format excel, nous avons le message suivant (voir pièce jointe ) :
    system.runetime.interopService.ComException etc.... Hresult 0x800A03EC.

    Nous n'arrivons donc pas à enregistrer le datagridview au format excel.

    Existe il un autre moyen qui nous permettrais d'éviter ce genre d'erreur?

    Voici le code du bouton c# utilisé pour enregistrer au format excel :

    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
     
    private void BtnSave_Click(object sender, EventArgs e)
    {
    if (datagrid.RowCount > 0)
    {
    	String path = ".....";
    	DialogResult res = fbdExportExcel.ShowDialog();
    	if (res == DialogResult.OK)
    	{
    		path = fbdExportExcel.SelectedPath;
    		String title = "";
    		if (panParam.Visible == false)
    		{
    			title = lblTitle.Text;
    		}
    		else
    		{
    			title = lblTitle.Text;
    		}
    		classe.fonctionExporter(madatagrid, path + @"\" + title + ".xlsx", "Export ", 0);
    	}
    }
    }
    puis ma fonction exporter

    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
    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
    63
     
    public static void fonctionexporter(DataGridView dgView, String unFichier, string strEnteteDeFichier, int startColumn)
    {
    int i = 0;
    int j = 0;
    try
    {
     
     
    ExcelApplication excel = new ExcelApplication();
    excel.DefaultWebOptions.Encoding = Microsoft.Office.Core.MsoEncoding.msoEncodingUTF8;
     
    Workbook exbook = (Workbook)excel.Workbooks.Add(Missing.Value);
    Worksheet exsheet = (Worksheet)excel.ActiveSheet;
     
    Range r = exsheet.get_Range(Convert.ToChar(65 + i).ToString() + "1", Missing.Value);
    //formatage de lentete
    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.ToString());//ex.Message
    }
     
    }
    en gros, lorsque l'on tente de sauvegarder dans un lourd fichier, on tombe dans le msgbox :s ...
    Y a t-il une alternative?
    Merci pour votre aide

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2020
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2020
    Messages : 71
    Par défaut
    Je suis dans le même cas que toi j'aimerai exporter un dtgview mais interrop excel à aussi la limite d'être excel, du coup j'ai penser à l'exporter au format .csv standard du format grid je crois si tu réussi je veux bien ton code ^^

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/05/2008, 11h00
  2. Réponses: 2
    Dernier message: 14/04/2008, 13h27
  3. RMI & threading ou autre moyen de comm ?
    Par bgenz dans le forum Concurrence et multi-thread
    Réponses: 6
    Dernier message: 03/03/2008, 13h03
  4. Exporter une dataGridView vers Excel
    Par drayif dans le forum Windows Forms
    Réponses: 2
    Dernier message: 02/08/2007, 17h45
  5. Un autre moyen que les popups ?
    Par bdaboah dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 23/03/2005, 10h48

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