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 :

Oledb avec Excel


Sujet :

C#

  1. #1
    Invité
    Invité(e)
    Par défaut Oledb avec Excel
    Bonjour,
    J'aimerai accéder à la valeur d'une cellule de mon fichier Excel (.xlsm).
    Et au passage si quelqu'un à des tuto: un lien ou des pdf de cours, je suis preneur. Je n'ai rien trouvé sur le net.

    Merci

  2. #2
    Membre Expert Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Par défaut
    Il y a une façon relativement simple via la dll fournit par Microsoft.
    Un peu de doc ici, et un exemple :

    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
     
    using Microsoft.Office.Interop;
     
    [....]
    OpenFileDialog ofDialog = new OpenFileDialog();
     
    ofDialog.Filter = "Excel 2003 Files (.xls)|*.xls";
     
    Microsoft.Office.Interop.Excel.Application xlApp;
    Microsoft.Office.Interop.Excel.Workbook xlWorkbook;
    Microsoft.Office.Interop.Excel._Worksheet xlWorksheet;
     
    DialogResult dResult = ofDialog.ShowDialog();
    if (true)
    {
    	try
    	{
    		xlApp = new Microsoft.Office.Interop.Excel.Application();
    		xlWorkbook = xlApp.Workbooks.Open(ofDialog.FileName);
    		xlWorksheet = xlWorkbook.Sheets[1];
    		Microsoft.Office.Interop.Excel.Range xlRange = xlWorksheet.UsedRange;
     
    		int rowCount = xlRange.Rows.Count;
    		int colCount = xlRange.Columns.Count;
     
    		// Read the Excel file entirely
    		List<String> labels = new List<String>();
    		for (int i = 0; i < rowCount; i++)
    		{
    			for (int j = 0; j < colCount; j++)
    			{
    				try
    				{
    					labels.Add(xlRange.Cells[i, j].Text);
    				}
    				catch (Exception) { }
    			}
    		}
    	}
    	catch (Exception ee)
    	{
    		System.Windows.Forms.MessageBox.Show(ee.Message);
    	}
    }

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci.
    Où est ce que je rentre l'URL de mon fichier Excel? C'est dans ofDialog.Filter?
    Dans ce cas là je mets ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ofDialog.Filter = "C:\\Users\\Ziad\\Documents\\Visual Studio 2010\\Projects\\PPE\\PlaceBourciere.xlsm";
    ?
    Et aussi OpenFileDialog et DialogResult appartiennent bien à l'espace System.Windows.Forms? Quant je mets cet espace, une erreur est signalé. Windows est souligné en rouge et me dit qu'il n'existe pas dans l'espace de noms 'System'.
    Dernière modification par Invité ; 08/02/2012 à 22h43.

  4. #4
    Membre Expert Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Par défaut
    J'utilise un OpenFileDialog comme "browser" depuis une application WPF.
    Tu peux directement fourni un chemin vers ton fichier :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    xlWorkbook = xlApp.Workbooks.Open(@"C:\Temp\myExcel.xls");

  5. #5
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Sinon, pour en revenir à la question initiale, oui, avec OLEDB tu peux accéder à Excel, et chaque onglet est vu comme une table différente.

    Selon ce que tu veux faire, ça peut être beaucoup plus pratique ou largement moins qu'avec le module interopérabilité Microsoft.

    A noter que OLEDB dispense d'avoir Office sur la machine pour travailler avec les fichiers Excel, alors qu'Interop impose d'avoir Office installé (qui plus est, dans une version donnée, figée)

    http://www.connectionstrings.com/excel-2007

    http://www.connectionstrings.com/excel

  6. #6
    Invité
    Invité(e)
    Par défaut
    D'accord merci pour vos reponces.
    Génial StringBuilder j'allais justement poster une question concernant le fait qu'Office soit installé ou pas.

    À propos de ce sujet, le code de Er3van utilise bien le module d'interopérabilité de Microsoft? Et donc l'utilisateur de mon logiciel devra avoir Office :S.

    N'y a t'il pas une autre solution que celle ci pour accéder à la cellule d'un classeur Excel?

  7. #7
    Invité
    Invité(e)
    Par défaut
    Voici ce que j'ai pu faire pour l'instant:
    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
    String sConnectionString =
                "Provider=Microsoft.ACE.OLEDB.12.0;" +
                "Data Source=" + "C:\\Users\\Ziad\\Documents\\Visual Studio 2010\\Projects\\PPE\\PlaceBourciere.xlsm" + ";" +
                "Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1;MAXSCANROWS=15;READONLY=FALSE\"";
     
                OleDbConnection objConn = new OleDbConnection(sConnectionString);
     
                objConn.Open();
     
                OleDbCommand objCmdSelect = new OleDbCommand("SELECT * FROM [index$]", objConn);
     
                OleDbDataAdapter objAdapter1 = new OleDbDataAdapter();
     
                objAdapter1.SelectCommand = objCmdSelect;
     
                DataSet objDataset1 = new DataSet();
     
                objAdapter1.Fill(objDataset1);
     
                DataTableCollection dta = objDataset1.Tables;
    Et donc après pour accéder au valeur je dois passer par des requettes SQL? Il n'y a pas plus simple avec par exemple acceder par des indices [i][j]? [1][2] == B1

  8. #8
    Membre Expert

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 067
    Par défaut
    il y a de nombreuse librairie gratuite pour excel tel que Epplus, excellibrary ... que tu trouveras sur codeplex, codegoogle... elles te permettront de lire et écrire dans un fichier excel sans avoir office installé sur ta machine

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par youtpout978 Voir le message
    il y a de nombreuse librairie gratuite pour excel tel que Epplus, excellibrary ... que tu trouveras sur codeplex, codegoogle... elles te permettront de lire et écrire dans un fichier excel sans avoir office installé sur ta machine
    Epplus et excellibrary sont comparable à Oledb?

  10. #10
    Membre Expert

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 067
    Par défaut
    non plus à l'automaton (l'exemple de Er3van), ton fichier excel est un fichier de quel version d'excel?

  11. #11
    Invité
    Invité(e)
    Par défaut
    Le fichier est utilisé par Excel 2007 et 2010 sous Windows; et sous Excel 2011 sous Mac. C'est un fichier xlsm car il contient des macros que je voudrai appeler depuis mon application.

  12. #12
    Membre Expert

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 067
    Par défaut
    ah je ne sais pas s'ils permettent de faire ça par contre, je sais qu'ils fonctionnent avec les xlsx, tes macros effectuent quoi comme action (peut être pourrais-tu les réecrire en c#)

  13. #13
    Invité
    Invité(e)
    Par défaut
    Oui c'est vrai je pourrais les recoder en C#, c'est d'ailleurs une des améliorations éventuelle de mon logiciel que j'avais prévu de faire. Ces macros permet de télécharger des données depuis Yahoo Finance et de les organiser dans ma feuille Excel. Donc en gros à chaque fois que je fais appel à cette macro, j'ai les dernière valeurs boursière.

    Petit hors sujet:
    {D'ailleurs étant donné que les traitements met beaucoup de temps en VBA, est-ce que si je recode tout en C# ça sera plus rapide? Est-ce que le C# est plus rapide, en générale, que les macros VBA?}

    Tu ferai comment pour lire par exemple la valeur de la cellule B10 avec Oledb sur ton fichier xlsx? Pour une chose qui parait si simple j'arrive pas à trouver de réponse sur internet.

  14. #14
    Membre Expert

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 067
    Par défaut
    après tout dépend de qui est lent dans le traitement de ta macro, je pourrais pas t'aider au niveau d'oledb je ne l'ai jamais utilisé

  15. #15
    Invité
    Invité(e)
    Par défaut
    Et avec Epplus et excellibrary, ou autre qui permettrai de lire et écrire dans un fichier excel sans avoir office installé sur la machine?

  16. #16
    Membre Expert

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 067
    Par défaut
    tu as des exemples sur leur page dédiée mais pas sur qu'ils arrivent à lire un xlsm, à ta place j'essayerai de recoder la macro plutot que de m'amuser à lire le fichier excel pour utiliser sa macro

Discussions similaires

  1. [PowerShell] Lire un fichier Excel avec OLEDB (sans Excel)
    Par sodawillow dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 22/11/2014, 16h10
  2. [MFC] [CRecordset] Problème avec Excel
    Par Yellowmat dans le forum MFC
    Réponses: 4
    Dernier message: 20/07/2005, 15h24
  3. [MFC] OLEDB et Excel
    Par Capnader dans le forum MFC
    Réponses: 3
    Dernier message: 22/04/2005, 18h41
  4. Analyse avec Excel
    Par Ric500 dans le forum Access
    Réponses: 6
    Dernier message: 15/02/2005, 15h12
  5. [C#] [EXCEL] Travailler avec EXCEL sans ouvrir le logiciel
    Par Fabsou dans le forum Windows Forms
    Réponses: 3
    Dernier message: 16/07/2004, 10h29

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