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

Visual Studio Team System Discussion :

INTEROP EXCEL EN WINFORM FAIL ET FONCTIONNE BIEN EN WINDOWS FORM [Débutant]


Sujet :

Visual Studio Team System

  1. #1
    Candidat au Club
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Décembre 2023
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Directeur commercial
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2023
    Messages : 7
    Points : 3
    Points
    3
    Par défaut INTEROP EXCEL EN WINFORM FAIL ET FONCTIONNE BIEN EN WINDOWS FORM
    J'ai créé un programme sous Winform C# visual studio sous Window 11 Famille 64bit et Framework cible .NET 8.0.
    Ce programme a fonctionné parfaitement.
    Lorsque je l'ai repris, sans le modifier, il ne fonctionne plus sur les interop Excel et Word.

    Processeur 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 1.69 GHz
    Mémoire RAM installée 16,0*Go (15,8*Go utilisable)
    Type du système Système d’exploitation 64*bits, processeur x64

    Après maintes recherches, j'ai décidé de recréer un projet minimalise en WindowsForm, puis en Winform C#, avec le même code et le même interop Excel de COM.

    Le résultat est assez surprenant mais je retrouve l'erreur de mon programme initial !!!

    Une simple Form, un datagrid et un fichier Excel de data à charger dans le Datagrid1. Simple !

    Voici le programme winform qui bug sur Workbooks et Sheets[1] ( erreurs CS 1061)
    *********************************************************************************************

    namespace WinFormsApp1
    { using Excel = Microsoft.Office.Interop.Excel;

    public partial class Form1 : Form
    {

    public Form1()
    {
    InitializeComponent();
    }


    private void ChargerFichierExcelDansDataGridView(string filename)
    {
    Excel.Application xlApp = new Excel.Application();
    Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(filename);
    Excel.Worksheet xlWorksheet = (Excel.Worksheet)xlWorkbook.Sheets[1];

    // Obtenez le nombre de lignes et de colonnes
    int rowCount = xlWorksheet.UsedRange.Rows.Count;
    int colCount = xlWorksheet.UsedRange.Columns.Count;

    for (int i = 1; i <= rowCount; i++)
    {
    DataGridViewRow row = new DataGridViewRow();
    for (int j = 1; j <= colCount; j++)
    {
    if (i == 1) // Si c'est la première ligne, ajoutez les en-têtes de colonnes
    {
    DataGridViewTextBoxColumn column = new DataGridViewTextBoxColumn();
    column.HeaderText = ((Excel.Range)xlWorksheet.Cells[i, j]).Text;
    dataGridView1.Columns.Add(column);
    }
    else // Ajoutez les données aux lignes suivantes
    {
    row.Cells.Add(new DataGridViewTextBoxCell
    {
    Value = ((Excel.Range)xlWorksheet.Cells[i, j]).Text
    });
    }
    }
    if (i > 1)
    {
    dataGridView1.Rows.Add(row);
    }
    }

    xlWorkbook.Close(false);
    xlApp.Quit();

    // Libérez les ressources COM utilisées par Excel
    System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorksheet);
    System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkbook);
    System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);
    }

    private void Form1_Load(object sender, EventArgs e)
    {
    string filename = @"C:\PROJETS C#\PROJET ETIQUETTE BOIS ET BUCHES\ETIQUETTE DE PRODUCTION\SUIVI DE PROD M.xlsx";
    ChargerFichierExcelDansDataGridView(filename);
    }
    }
    }
    **********************************************************************************************************************
    Si quelqu'un connait l'astuce pour lever ce bug interop Excel, je l'en remercie par avance.

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 126
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 126
    Points : 1 636
    Points
    1 636
    Par défaut
    Message d'erreur complet ?

    Il y a Excel d'installer sur le PC ?

  3. #3
    Candidat au Club
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Décembre 2023
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Directeur commercial
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2023
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Oui, bien sûr ! Je travaille avec Office 365 et l'interop Excel 16.0 est bien pris en compte dans les dépendances et déclaré par un using.
    Je précise également que le même code, exactement le même, fonctionne correctement en WindowsForm C#, sur le même PC.
    Sous WinForm, j'ai également testé le programme sous Ole DB et çà tourne bien.

    Ce que je ne comprend pas, c'est pourquoi interop Excel ne fonctionne pas sous Winform C# !!!
    Je suspecte un problème de framework 8.0 et je souhaiterais savoir si vous rencontrez aussi le même problème sur vos versions de visual Studio avec le code que j'ai inscris dans mon message intial.

    Merci pour votre support,
    Guenael

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 126
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 126
    Points : 1 636
    Points
    1 636
    Par défaut
    euh tu utilisais déjà winforms en C# auparavant.
    La différence doit être au niveau de l'implémentation .NET, d'un côté .Net 8.0 et de l'autre .NET Framework 4.8 (par exemple).


    J'avais demandé le message d'erreur complet, je l'attends encore ....

  5. #5
    Candidat au Club
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Décembre 2023
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Directeur commercial
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2023
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Bonsoir Umfred,

    Oui, j'utilise Winform C# depuis quelque temps, et je pensais que c'était un gage de stabilité, par rapport à WindowsForm, avec .Net 8.0 et je te rejoins sur le fait que c'est certainement la cause du problème.

    Sur le programme initial qui est une simple Form et un datagridView, j'ai deux erreurs qui montrent que la librairie interop Excel n'est pas connecté.

    1) Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(filename);

    Erreur CS1061 'Application' ne contient pas de définition pour 'Workbooks' et aucune méthode d'extension accessible 'Workbooks' acceptant un premier argument de type 'Application' n'a été trouvée (une directive using ou une référence d'assembly est-elle manquante*?) WinFormsApp1 C:\PROJETS C#\INTEROP WORD&EXCEL\WinFormsApp1\Form1.cs 17 Actif

    2) Excel.Worksheet xlWorksheet = (Excel.Worksheet)xlWorkbook.Sheets[1];

    Erreur CS1061 'Workbook' ne contient pas de définition pour 'Sheets' et aucune méthode d'extension accessible 'Sheets' acceptant un premier argument de type 'Workbook' n'a été trouvée (une directive using ou une référence d'assembly est-elle manquante*?) WinFormsApp1 C:\PROJETS C#\INTEROP WORD&EXCEL\WinFormsApp1\Form1.cs 18 Actif

    Je place ici mon programme complet, et si tu pouvais juste le tester sur ton système pour voir si cela fonctionne, ce sera peut être plus rapide car j'ai essayé pendant deux jours de trouver le pourquoi et c'est en mettant le minimum programme que j'ai isolé le bug. Je n'ai pas d'autre PC pour savoir si c'est la configuration PC qui pourrais déclencher le problème.

    namespace WinFormsApp1
    {
    using Excel = Microsoft.Office.Interop.Excel;

    public partial class Form1 : Form
    {

    public Form1()
    {
    InitializeComponent();
    }


    private void ChargerFichierExcelDansDataGridView(string filename)
    {
    Excel.Application xlApp = new Excel.Application();
    Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(filename);
    Excel.Worksheet xlWorksheet = (Excel.Worksheet)xlWorkbook.Sheets[1];

    // Obtenez le nombre de lignes et de colonnes
    int rowCount = xlWorksheet.UsedRange.Rows.Count;
    int colCount = xlWorksheet.UsedRange.Columns.Count;

    for (int i = 1; i <= rowCount; i++)
    {
    DataGridViewRow row = new DataGridViewRow();
    for (int j = 1; j <= colCount; j++)
    {
    if (i == 1) // Si c'est la première ligne, ajoutez les en-têtes de colonnes
    {
    DataGridViewTextBoxColumn column = new DataGridViewTextBoxColumn();
    column.HeaderText = ((Excel.Range)xlWorksheet.Cells[i, j]).Text;
    dataGridView1.Columns.Add(column);
    }
    else // Ajoutez les données aux lignes suivantes
    {
    row.Cells.Add(new DataGridViewTextBoxCell
    {
    Value = ((Excel.Range)xlWorksheet.Cells[i, j]).Text
    });
    }
    }
    if (i > 1)
    {
    dataGridView1.Rows.Add(row);
    }
    }

    xlWorkbook.Close(false);
    xlApp.Quit();

    // Libérez les ressources COM utilisées par Excel
    System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorksheet);
    System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkbook);
    System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);
    }

    private void Form1_Load(object sender, EventArgs e)
    {
    string filename = @"C:\PROJETS C#\PROJET ETIQUETTE BOIS ET BUCHES\ETIQUETTE DE PRODUCTION\SUIVI DE PROD M.xlsx";
    ChargerFichierExcelDansDataGridView(filename);
    }
    }
    }

    Merci pour ton Support,
    Guénael

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 126
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 126
    Points : 1 636
    Points
    1 636
    Par défaut
    testé dans un projet en winforms .NET 8.0, en ajoutant la référence COM à Excel Interop => fonctionne sans souci
    testé dans un projet en winforms .NET Framework 4.8 en ajoutant la référence COM à Excel Interop => fonctionne sans souci
    (winforms et windows forms sont pour moi la même chose)
    Donc pour moi, il doit te manquer la référence à Excel Interop (appelé "Microsoft Excel 16.0 Object Library", le numéro de version doit être différent, j'ai la version 2016 sur mon poste)

  7. #7
    Candidat au Club
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Décembre 2023
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Directeur commercial
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2023
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Merci Umfred,

    Ca me confirme que le programme est ok et que je dois donc avoir un pb sur le PC, mais je ne sais pas ou chercher.

    J'ai déjà réinstallé le Visual studio 2022 sur le PC, mais l'erreur est persistante.

    Ce qui est bizarre, c'est qu'en Windows Form, l'interop Excel fonctionne et c'est le même que pour Winform effectivement.

    j'ai aussi essayé de changer de version de Framework, et toujours le même problème. Là, j'avoue que je sèche !

    Merci de m'avoir aidé en testant sur ton PC. Je vais continuer à investiguer et je mettrai le résultat de mes recherches sur ce blog.

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 126
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 126
    Points : 1 636
    Points
    1 636
    Par défaut
    je répète qu'il doit te manquer une référence à Excel.Interop.
    De quelle manière as-tu ajouté la référence à ton projet ? Eventuellement, supprime la référence et remet là.

  9. #9
    Candidat au Club
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Décembre 2023
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Directeur commercial
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2023
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Bonjour Umfred,

    1) Pour ajouter la référence sous Winform ou Window-Form, je fais ceci :

    - Projet / Ajouter une référence de projet / COM / Microsoft Excel 16.0 Object Library version 1.9

    La version interop Excel du fichier est 16.0.17029.20108 pour WinForm
    Bien entendu, il faut aussi l'adresser en using Excel = Microsoft.Office.Interop.Excel;

    2) Je pense effectivement que la librairie interop de Winform est la cause de mon problème.
    En effet, quand je regarde dans l'explorateur de solution du projet WindowsForm qui fonctionne, Microsoft.Office.Interop.Excel est en version 15.0.0.0. et l'emplacement de la librairie est en "C:\PROJETS C#\INTEROP WORD&EXCEL\WindowsFormsApp1\packages\Microsoft.Office.Interop.Excel.15.0.4795.1001"
    Pour WinForm, la librairie est dans cet emplacement : "C:\PROJETS C#\INTEROP WORD&EXCEL\WinFormsApp1\obj\Debug\net8.0-windows\Interop.Microsoft.Office.Interop.Excel.dll"

    Pourrais tu m'adresser ta librairie interop :Interop.Microsoft.Office.Interop.Excel.dll",
    Je vais essayer de la remplacer pour voir si cela résout mon problème.

    Merci pour ton support,
    Guenael

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 126
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 126
    Points : 1 636
    Points
    1 636
    Par défaut
    ne distingue pas tes projets en winforms et windows forms, mais en .NET8.0 et .NET Framework.

    Je mets en PJ mes 2 projets
    testExcelNetFwk.zip
    testExcelNet.zip

  11. #11
    Candidat au Club
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Décembre 2023
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Directeur commercial
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2023
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Bonjour Umfred,

    Merci pour tes deux projets. Malheureusement, je rencontre exactement les mêmes difficultés. Comme la librairie Interop est dans le package transmis, il s'agit d'autre chose!

    J'ai ensuite effacé et réinstallé Visual Studio 2022, puis comme le bug persistait, j'ai enlevé 2022 et installé 2019, idem !
    Je suis rentré dans la librairie interop de .NET 8.0 et je retrouve bien les définitions pour WorkbBooks et Sheets.

    Là, honnêtement, je ne sais plus quoi faire... Peut être voir si je peux tester sur un autre PC pendant les fêtes !
    Je te tiendrai au courant.

    Merci pour ta patience et ton support.

    Amicalement,
    Guénaël

  12. #12
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 126
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 126
    Points : 1 636
    Points
    1 636
    Par défaut
    réparer/réinstaller ton Office

  13. #13
    Candidat au Club
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Décembre 2023
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Directeur commercial
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2023
    Messages : 7
    Points : 3
    Points
    3
    Par défaut problème résolu.
    Bonsoir Umfred et meilleurs Vœux pour cette nouvelle année.

    J'ai effectivement enlevé office 365 et installé office 2019 sous .NET 6.0

    Le programme refonctionne de nouveau. Je considère donc votre solution de réinstaller Office comme ayant résolu le problème.

    Merci pour votre support et votre patience.

    Cordialement,
    Guénaël

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

Discussions similaires

  1. Surveiller l'espace mémoire libre pour que Excel fonctionne bien
    Par francis60 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 01/09/2016, 16h18
  2. Workbooks.Open Filename fonctionne bien sur excel 2000 ?
    Par emoiem dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 27/03/2008, 15h59
  3. Réponses: 4
    Dernier message: 30/08/2006, 17h52
  4. Degroupage total, ca fonctionne bien ?
    Par johnkro dans le forum Dépannage et Assistance
    Réponses: 8
    Dernier message: 20/07/2006, 13h14
  5. [VB.NET] comment installer interop.Excel.dll (11.0) ?
    Par beegees dans le forum Windows Forms
    Réponses: 24
    Dernier message: 09/06/2006, 16h19

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