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

Windows Forms Discussion :

[Excel] Remplir un fichier excel suivant un template


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Par défaut [Excel] Remplir un fichier excel suivant un template
    Bonjour

    Je recherche à remplir une feuille d'un classeur suivant un fichier template en xlt.

    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
    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
    64
    65
    66
    67
    68
     
    public bool ImportDataGridToExcel_WithTemplate(string filepath, string templatepath, int startrow, int startcolumn, DataView dv)
            {
                bool resultflag = false;
                int indexofsheetname = 0;
                //Gestion du fichier à écrire
                if (File.Exists(filepath))
                {
                    File.Delete(filepath);
                }
                try
                {
                   msExcel = new Microsoft.Office.Interop.Excel.Application();
                   if (File.Exists(templatepath))
                   {
                       //Ouverture du template 
                       workbook = msExcel.Workbooks.Open(templatepath,0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "",
                        true, false, 0, true, false, false);
                   }
                    //Sélection de la feuille
                    sheets = workbook.Sheets;
                    for (int i = 1; i <= sheets.Count; i++)
                    {
                        //sélection du worksheet courant
                        worksheet = (Worksheet)sheets.get_Item(i);
                        //Test si la feuille est la bonne
                        if (worksheet.Name.ToString().Equals("LISTE"))
                        {
                            //Oui, sauvegarde de l'index
                            indexofsheetname = i;
                        }
                    }
                    worksheet = (Worksheet)sheets.get_Item(indexofsheetname);
                    Row = startrow;
                    Col = startcolumn;
     
                    //Remplir la feuille
                    for (int i = 0; i < dv.Table.Rows.Count; i++)
                    {
     
                        for (int j = 0; j < dv.Table.Columns.Count; j++)
                        {
                            fillExcelCell(worksheet, Row, Col++, dv[i][j].ToString());
                        }
                        Col = 1;
                        Row++;
                    }
                    //Fermeture d'Excel
                    try
                    {
                        workbook.Close(true, filepath, Type.Missing);
                        msExcel.UserControl = false;
                        msExcel.Quit();
                        msExcel = null;
                        killExcel();
     
                    }
                    catch (COMException)
                    {
                        Console.WriteLine("Erreur dans la fermeture automatique d'Excel");
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Erreur :" + ex.Message);
                }
               return resultflag;;
            }
    Code pour remplir une cellule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
            private void fillExcelCell(Microsoft.Office.Interop.Excel.Worksheet worksheet, int row, int col, Object Value)
            {
                Range rng = (Range)worksheet.Cells[row, col];
                rng.Select();
                rng.Value2 = Value.ToString();
                rng.Columns.EntireColumn.AutoFit();
                rng.Borders.Weight = Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin;
                rng.Borders.LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;
                rng.Borders.ColorIndex = Microsoft.Office.Interop.Excel.XlColorIndex.xlColorIndexAutomatic;
            }
    je n'arrive pas à remplir ma fiche. Lorsque j'arrive à la sélection de la cellule
    j'ai le message d'erreur suivant :
    La méthode Select de la classe Range à échoué.
    Je n'arrive pas à solutionner le problème. Il faut savoir que la fonction fillExcelCell fonctionne correctement quand le fichier Excel est nouveau.
    Auriez vous une piste à explorer?
    Cordialement

  2. #2
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Par défaut
    Essaye de faire un msExcel.Workbooks.SaveAs() après avoir ouvert le classeur.

  3. #3
    Membre éclairé Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Par défaut
    Bonjour,

    Je te remercie de ton aide. J'ai suivi ton conseil. Malheureusement j'ai toujours la même erreur de la sélection. Par contre, mon fichier est dans la même trame que mon template.

    Cordialement

  4. #4
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Par défaut
    Ok.

    - Tu as essayé de faire un SaveAs() avec un ".xls" comme extension, on est d'accord ?

    - Si tu retires la méthode Select(), est-ce que le tout s'exécute correctement et fais ce que tu veux ? (je pense que la méthode Select() est facultative)

    - Que veux-tu dire par :
    mon fichier est dans la même trame que mon template
    - Que voulais-tu dire par :
    la fonction fillExcelCell fonctionne correctement quand le fichier Excel est nouveau
    Est-ce que le fichier Excel est un .xls dans ce cas ?

  5. #5
    Membre éclairé Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Par défaut
    Citation Envoyé par Skalp Voir le message
    Ok.

    - Tu as essayé de faire un SaveAs() avec un ".xls" comme extension, on est d'accord ?
    Oui c'est cela
    Citation Envoyé par Skalp Voir le message
    - Si tu retires la méthode Select(), est-ce que le tout s'exécute correctement et fais ce que tu veux ? (je pense que la méthode Select() est facultative)
    Tu as raison. J'ai supprimé le Select(). Tous se passe correctement
    Je n'y aurai pas pensé. Je pensais que c'était une instruction utile.
    Merci de ton aide

  6. #6
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Par défaut
    Oui, c'est bien ce que je pensais : l'objet Range est considéré comme une "sélection". C'est-à-dire que les actions que tu vas effectuer dessus ne seront valables que pour l'ensemble des cellules définies dans cet objet.


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

Discussions similaires

  1. [XL-2010] vbaexcel recherche et envoye des données de fichier excelà un autre fichier excel
    Par Marc31 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 09/08/2011, 14h42
  2. [XL-2003] Afficher un hyperlien vers fichier Excel dans un fichier Excel
    Par belgudo dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/06/2011, 16h26
  3. problème code pour remplir un fichier Excel
    Par ririrourou dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/07/2008, 09h51
  4. Réponses: 0
    Dernier message: 04/04/2008, 13h22

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