Excel depuis un code C#

MaximeChardonnay - Modifié le 1 mars 2022 à 12:19
Whismeril Messages postés 18292 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 mars 2023 - 11 févr. 2022 à 07:22
Bonjour, je débute dans la programmation C# et je souhaite récupérer les éléments d'un classeur Excel déjà remplit.
Je précise déjà remplit car je peux récupérer mes éléments depuis la feuille active mais je n'arrive pas à atteindre les autres feuilles.
J'utilise Microsoft.Office.Interop.Excel pour information.

Voici le code :
namespace WinFormsApp3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            appli = new Microsoft.Office.Interop.Excel.Application();
            appli.Visible = false;

            //---------- création du classeur ---------
            classeur = (Microsoft.Office.Interop.Excel._Workbook)(appli.Workbooks.Open("f:\\AA.xlsx", M, M, M, M, M, M, M, M, M, M, M, M, M, M));
            //------ activer la feuille ----------
            feuille1 = (Microsoft.Office.Interop.Excel._Worksheet)classeur.ActiveSheet;
            //Remplir les en-têtes
            feuille1.Name = "";
            feuille1.Cells[1, 1] = "";
            feuille1.Cells[1, 2] = "";
            try
            {
                int n = 2;
                while (feuille1.Cells[n, 1].Text != "")
                {
                    comboBox1.Items.Add(feuille1.Cells[n, 1].Value);
                    n++;
                }
                //----- Auto-Enregistrement ---------------
                //classeur.Close(true, M, M); // M représenter "Missing Value"
            }
            catch (Exception ex) { MessageBox.Show("L'erreur est : " + ex.Message); }
            finally
            {
                //feuille = null;
                //classeur = null;
                //appli.Quit();
                //appli = null;
            }
        }
        Microsoft.Office.Interop.Excel.Application appli;
        Microsoft.Office.Interop.Excel._Workbook classeur;
        Microsoft.Office.Interop.Excel._Worksheet feuille1;
        Microsoft.Office.Interop.Excel._Worksheet feuille2;
        Microsoft.Office.Interop.Excel._Worksheet feuille3;

        object M = System.Reflection.Missing.Value;
        object FileName = "f:\\AA.xlsx";

        public void fermeture()
        {
            classeur.Close(true, M, M); // M représenter "Missing Value"
            feuille1 = null;
            feuille2 = null;
            classeur = null;
            appli.Quit();
            appli = null;
        }

        public void button1_Click_1(object sender, EventArgs e)
        {
            feuille2.Cells[10, 1] = "essai";
            fermeture();
        }
    }
}

1 réponse

Whismeril Messages postés 18292 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 mars 2023 622
11 févr. 2022 à 07:15
Bonjour

Et pourquoi t’embêter avec l’API ?
Pour lire un fichier excel tu peux t’y connecter comme s’il s’agissait d’une base de données.
Tu peux aussi agir directement sur le fichier (s’il s’agit d’un xlsx).
Et si tu regardes dans les nugets, y’en a qui te permettent de « piocher » les données avec Linq par exemple
0
Whismeril Messages postés 18292 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 mars 2023 622
11 févr. 2022 à 07:22
Là un exemple pour écrire directement dans le fichier https://codes-sources.commentcamarche.net/source/102062-excel-avec-openxml j’ai pas implémenté la lecture parce que comme je te l’ai écrit au dessus y’a des façons plus simples, mais ça peut le faire aussi.

Et là un exemple avec l’API https://codes-sources.commentcamarche.net/source/50624-piloter-excel-via-microsoft-office-interop-excel

Mais je le pense vraiment, dans visual studio, tu vas dans la recherche de nugets tu tapes linq excel et tu auras la façon la plus simple
0
Rejoignez-nous