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 :

dialogue Excel cSharp


Sujet :

C#

  1. #1
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut dialogue Excel cSharp
    Bonjour

    A mon avis j'ai du louper quelque chose dans ma recherche car en faisant une recherche avancée avec le mot clef Excel je n'obtiens aucub résultat ??

    Je cherchais un exemple ou un toto sur le baba d'acces a un fichier excel a partir de Csharp


    Faut-il travailler avec un connecteur ?
    Ou en OLE ?

    Si quelqu'un a des suggestions ?

    Merci beaucoup

  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
    Citation Envoyé par olibara Voir le message
    Je cherchais un exemple ou un toto sur le baba d'acces a un fichier excel a partir de Csharp

    Faut-il travailler avec un connecteur ?
    Ou en OLE ?

    Si quelqu'un a des suggestions ?

    Merci beaucoup
    Tout dépend de ce que tu veux faire.
    Si tu comptes manipuler Excel comme une base de données, tu peux effectivement passer par une connexion OLE, avec ADO.NET.
    Si tu comptes mettre en forme le fichier, tu devras passer par un pilotage COM/Interop.

    [EDIT 12/04/2010] Plus d'infos dans la FAQ : Comment lire dans un fichier Excel ?

  3. #3
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Merci Skalp


    Voila des bonnes pistes d'investigations !

  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
    Citation Envoyé par olibara Voir le message
    Merci Skalp
    Mais je t'en prie
    N'oublie pas le tag

  5. #5
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Bonsoir Skalp

    J'essaye d'executer ton exemple de Excell automation en Csharp2008
    J'ai fais un petit workbook en Excell 2000 9.????

    Mais quand j'essaye de l'ouvrir j'ai un message d'erreur

    Comprends tu la raison ?

    System.Runtime.InteropServices.COMException was unhandled
    Message="Old format or invalid type library. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD))"
    Source="Interop.Excel"
    ErrorCode=-2147319784
    StackTrace:
    at Excel.ApplicationClass.set_DisplayAlerts(Boolean RHS)
    at AutomationExcel.ExcelReader.Open(String FilePath, String WorksheetName) in D:\projets\excel\AutomationExcelSolution\AutomationExcel\ExcelReader.cs:line 258
    at AutomationExcel.ExcelReader.Open(String FilePath) in D:\projets\excel\AutomationExcelSolution\AutomationExcel\ExcelReader.cs:line 244
    at AutomationExcelTest.Program.Main(String[] args) in D:\projets\excel\AutomationExcelSolution\AutomationExcelTest\Program.cs:line 15
    at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
    at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
    at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
    at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
    at System.Threading.ThreadHelper.ThreadStart()

  6. #6
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut Un truc de FOU !!
    Salut Skalp

    J'ai +/- trouvé la cause du problème grace a un article sur MSDN


    http://forums.microsoft.com/MSDN/Sho...68710&SiteID=1


    Mais c'es du vrai délire !!

    En gros le problème vient de de la configuration regionale du systéme qui différe de la version d'excell

    J'ai un Excell US
    Mon systeme est Belgique French

    Si je mets mon systeme en English et Pays USA alors ton app fonctionne
    MAIS : tous les excel deja sauvé ne s'ouvrent plus en double click, je dois les ouvrir explicitement avec excell ouvert

    Par contre les xls crees avec ton app s'ouvrent en shortcut
    Si je rechange le regional setting c'est l'inverse

    L'article expliquait une methode pour adapter le setting sur l'Excell application apres l'instanciation
    Mais je te laisse l'arbitrage

    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
    // i found the cause of the problem, it's because the user local settings are different from the office version, i use the english version and after setting language to english us, and country to united states in the reagional and language settings under control panel it worked fine
     
    // an other option is to use this code:
     
    Dim oApp As New Excel.Application()
    oApp.Visible = True
    oApp.UserControl = True
    Dim oBooks As Object = oApp.Workbooks
    Dim ci As System.Globalization.CultureInfo = New System.Globalization.CultureInfo("en-US")
    oBooks.GetType().InvokeMember("Add", Reflection.BindingFlags.InvokeMethod, Nothing, oBooks, Nothing, ci)
     
     
    // or this one:
     
    Dim oApp As New Excel.Application()
    oApp.Visible = True
    oApp.UserControl = True
    Dim oldCI As System.Globalization.CultureInfo = _
        System.Threading.Thread.CurrentThread.CurrentCulture
    System.Threading.Thread.CurrentThread.CurrentCulture = _
        New System.Globalization.CultureInfo("en-US")
    oApp.Workbooks.Add()
    System.Threading.Thread.CurrentThread.CurrentCulture = oldCI

  7. #7
    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
    Effectivement, il y a de quoi se taper la tête contre les murs !

    Bravo pour avoir trouvé la raison !
    Mais quel arbitrage attends-tu de ma part ?

  8. #8
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Salut Skalp

    Vraissemblablement, il y a moyen de forcer le cultureinfo de l'app excell au niveau CSharp

    http://support.microsoft.com/default...b;en-us;320369

    Mais je ne me suis pas aventuré a bricoler ton code proprement écrit

    Je voulais dire que si tu voyais une maniere propre de resoudre ce problème dans to code il est préférable que tu en garde la maitrise.

    Je peux aussi te confirmer que TOUS les codes que j'ai trouvé souffrent du meme probleme

    Normal : le melange des culture ca fait tojours des problème si on n'a pas les idées larges

  9. #9
    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
    Citation Envoyé par olibara Voir le message
    Vraissemblablement, il y a moyen de forcer le cultureinfo de l'app excell au niveau CSharp : http://support.microsoft.com/default...b;en-us;320369
    Mais je ne me suis pas aventuré a bricoler ton code proprement écrit
    Mon code est fait pour être bricolé ! J'ai écrit un moteur le plus simple possible, il ne faut pas hésiter à le modifier et à le compléter selon les besoins et les particularités de chacun.

    Citation Envoyé par olibara Voir le message
    Je voulais dire que si tu voyais une maniere propre de resoudre ce problème dans to code il est préférable que tu en garde la maitrise.
    Je peux aussi te confirmer que TOUS les codes que j'ai trouvé souffrent du meme probleme
    Les soucis de culture sont relativement rares avec l'automation Excel. De plus, gérer les problèmes de culture est très délicat et le code perd en lisibilité, c'est pour ces raisons que je ne l'ai pas inclu (et que je ne l'incluerai pas) dans mon article.

    Citation Envoyé par olibara Voir le message
    Normal : le melange des culture ca fait tojours des problème si on n'a pas les idées larges
    Oui L'avantage en informatique, c'est qu'on peut mettre tout le monde d'accord... Ce qui n'est pas le cas dans la vraie vie

  10. #10
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Les soucis de culture sont relativement rares avec l'automation Excel. De plus, gérer les problèmes de culture est très délicat et le code perd en lisibilité, c'est pour ces raisons que je ne l'ai pas inclu (et que je ne l'incluerai pas) dans mon article.



    Je comprends
    Cependant n'etant pas encore bien familier de ton code et encore moins avec automation Excel et culture info la maniere d'intervenir dans ton code pour contourner le problème ne m'a pas sauté au yeux

    Aurais-tu a l'occasion quelques intants pour me mettre en piste ?

    Merci en tout cas.

  11. #11
    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
    Citation Envoyé par olibara Voir le message
    Cependant n'etant pas encore bien familier de ton code et encore moins avec automation Excel et culture info la maniere d'intervenir dans ton code pour contourner le problème ne m'a pas sauté au yeux

    Aurais-tu a l'occasion quelques intants pour me mettre en piste ?
    Ok, je vois. Tu veux que je te donne le code, en fait ?

    Bon allez, comme c'est joliment dit, essaye donc de rajouter ces deux lignes dans les méthodes Open() (ExcelReader et ExcelWriter), entre "Ouvrir le classeur" et "Sélectionner la feuille" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    // Changer la culture dans Excel :
    System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("fr-BE");
    this.m_Application.Workbooks.GetType().InvokeMember("Add", System.Reflection.BindingFlags.InvokeMethod, null, this.m_Application.Workbooks, null, ci);
    La culture est "fr-BE" pour toi, si j'ai bien suivi ?

    Je n'ai pas testé, donc ne t'attend pas à un miracle

  12. #12
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Salut Skalp

    Helas, j'ai toujours +/- la meme erreur (ci dessous)

    PAR CONTRE :

    Si je mets l'instruction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.m_Application.Workbooks.GetType().InvokeMember("Add", System.Reflection.BindingFlags.InvokeMethod, null, this.m_Application.Workbooks, null, ci);
    AVANT le WorkBooks.Open, l'erreur se produit sur l'instruction
    Si je la mets APRES, l'erreur se produit sur le WorkBooks.open

    Mon systeme est en fr-BE mon Excell est en en-US
    Mais j'ai essayé les deux pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new System.Globalization.CultureInfo("fr-BE");

    System.Runtime.InteropServices.COMException was unhandled
    Message="Old format or invalid type library. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD))"
    Source="Interop.Excel"
    ErrorCode=-2147319784
    StackTrace:
    at Excel.ApplicationClass.set_DisplayAlerts(Boolean RHS)
    at AutomationExcel.ExcelReader.Open(String FilePath, String WorksheetName) in D:\projets\excel\AutomationExcelSolution\AutomationExcel\ExcelReader.cs:line 262
    at AutomationExcel.ExcelReader.Open(String FilePath) in D:\projets\excel\AutomationExcelSolution\AutomationExcel\ExcelReader.cs:line 248
    at AutomationExcelTest.Program.Main(String[] args) in D:\projets\excel\AutomationExcelSolution\AutomationExcelTest\Program.cs:line 50
    at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
    at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
    at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
    at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
    at System.Threading.ThreadHelper.ThreadStart()

  13. #13
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Bonsoir Skalp

    Bon c'est pas encore tout a fait gagné mais ca avance
    Voici ce que j'ai fait a ton bébé (je me suis inspiré de solutions proposées sur le net)

    1- J'integre cette petite classe


    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
      class ExcelUILanguageHelper : IDisposable
      {
        private CultureInfo m_CurrentCulture;
        public ExcelUILanguageHelper()
        {
          // save current culture and set culture to en-US 
          m_CurrentCulture = Thread.CurrentThread.CurrentCulture;
          Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
        }
        #region IDisposable Members
        public void Dispose()
        {
          // return to normal culture 
          Thread.CurrentThread.CurrentCulture = m_CurrentCulture;
        }
        #endregion
      }
    Et puis j'embale le corps de la fonction open dans un using de cette classe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
       public void Open(string FilePath, string WorksheetName)
        {
          using (new ExcelUILanguageHelper())
          {
    // :::
          }
        }
    Miracle ca passe !!
    Mais j'ai bien peur qu'a cause de cette notion de thread (que je ne maitrise pas encore bien) c'est toute ta classe qu'il faut revoir !

    Qu'en pense tu ?

  14. #14
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut cayé ! ca marche


    Bon voila

    J'ai donc ajouté une classe au projet

    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
    using System;
    using System.Globalization;
    using System.Threading;
     
    namespace AutomationExcel
    {
      public class ExcelUILanguageHelper : IDisposable
      {
        private CultureInfo m_CurrentCulture;
     
        public ExcelUILanguageHelper()
        {
          // save current culture and set culture to en-US 
          m_CurrentCulture = Thread.CurrentThread.CurrentCulture;
          Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
        }
        #region IDisposable Members
        public void Dispose()
        {
          // return to normal culture 
          Thread.CurrentThread.CurrentCulture = m_CurrentCulture;
        }
        #endregion
      } 
    }
    Et j'ai tout emballé dans le main
    Et HOP !!
    C'était je pense la maniere la plus elegante de faire

    Mais quelle de de M. ce truc

    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
          using (new ExcelUILanguageHelper())
          {
     
            ExcelReader ER = new ExcelReader();
     
            ER.Open(@"C:\tc.xls");
     
            // Afficher les valeurs :
            while (ER.Peek() >= 0)
            {
              Console.WriteLine(ER.ReadLine());
            }
     
            // Ne pas oublier de fermer le lecteur :
            ER.Close();
          }

  15. #15
    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
    Citation Envoyé par olibara Voir le message
    Mon systeme est en fr-BE mon Excell est en en-US
    Mais j'ai essayé les deux pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new System.Globalization.CultureInfo("fr-BE");
    Je pensais pouvoir forcer Excel à respecter la culture du poste (ici, fr-BE), mais d'après tes tests, il semblerait qu'il faille faire l'inverse en forçant le thread courant à en-US. Je pense que le code que je t'ai donné fonctionnerait avec en-US au lieu de fr-BE.

    Citation Envoyé par olibara Voir le message
    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
      class ExcelUILanguageHelper : IDisposable
      {
        private CultureInfo m_CurrentCulture;
        public ExcelUILanguageHelper()
        {
          // save current culture and set culture to en-US 
          m_CurrentCulture = Thread.CurrentThread.CurrentCulture;
          Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
        }
        #region IDisposable Members
        public void Dispose()
        {
          // return to normal culture 
          Thread.CurrentThread.CurrentCulture = m_CurrentCulture;
        }
        #endregion
      }
    Et puis j'embale le corps de la fonction open dans un using de cette classe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
       public void Open(string FilePath, string WorksheetName)
        {
          using (new ExcelUILanguageHelper())
          {
    // :::
          }
        }
    Miracle ca passe !!
    Mais j'ai bien peur qu'a cause de cette notion de thread (que je ne maitrise pas encore bien) c'est toute ta classe qu'il faut revoir !

    Qu'en pense tu ?
    Je pense que si tu utilises la solution de modifier la culture du thread courant, le plus simple et moins couteux est de le faire dans la classe qui utilise ExcelReader ou ExcelWriter, tout le temps que tu les utiliseras.
    Exemple :
    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
    using (new ExcelUILanguageHelper())
    {
        /*** EXCELWRITER ***/
        // Déclarer et ouvrir l'écrivain :
        ExcelWriter EW = new ExcelWriter();
        EW.Open(@"C:\Classeur2.xls");
     
        string[] mesValeurs = new string[6] { "Pilotage", "de", "l'application", "Office", "Excel", "(Automation Excel)" };
     
        // Je peux parcourir ce tableau pour renseigner mon fichier Excel :
        foreach (string str in mesValeurs)
        {
            EW.Write(str);
            EW.NewLine();
        }
     
        // Je peux envoyer le tableau entier pour écrire une ligne :
        EW.WriteLine(mesValeurs);
     
        // Ne pas oublier de fermer l'écrivain, c'est là qu'il enregistre :
        EW.Close();
    }
    Attention dans ce cas si tu fais d'autres traitement dans le using, rappelle-toi que la culture est modifiée.

  16. #16
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Salut Skalp

    Tu n'a pas du lire mon dernier post car en définitive, c'est ce que je fais au niveau du main

    mais pour info j'avais essayé ta proposition en adaptant "fr-BE" et "en-US" dant tous les sens, ca ne marchait pas ??

  17. #17
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Bonjour Skalp

    Bon maintenant ke suis content avec ta source et le petit embalage de cultureque j'ai fai, je peux lire et ecrire un Excel

    Mais !!

    N'existe-t-il pas une methode plus abstraite genre connecteur pour lire un e worksheet comme une datatable ?

  18. #18
    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
    Citation Envoyé par olibara Voir le message
    Salut Skalp

    Tu n'a pas du lire mon dernier post car en définitive, c'est ce que je fais au niveau du main
    Oui, j'ai raté ton dernier post. Tu n'as pas eu besoin de moi finalement ! ^^ Bien joué

    Citation Envoyé par olibara Voir le message
    mais pour info j'avais essayé ta proposition en adaptant "fr-BE" et "en-US" dant tous les sens, ca ne marchait pas ??
    Ok. La méthode donnée par le support msdn me semble un peu improbable, cela ne métonne pas.

    Citation Envoyé par olibara Voir le message
    N'existe-t-il pas une methode plus abstraite genre connecteur pour lire un e worksheet comme une datatable ?
    Si ! Cf. mon premier post :
    Citation Envoyé par Skalp Voir le message
    Si tu comptes manipuler Excel comme une base de données, tu peux effectivement passer par une connexion OLE : Lire et écrire dans les classeurs Excel fermés

  19. #19
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Salut Skalp

    J'ai été voir l'article concernant Le lien SQL vers Excel

    Malheureusement :

    1- C'est du VBA et les parametres cSharp sont un peu différent mais pas documentés
    2- La reference a ajouter au projet n'est pas tres explicite, j'ai ajouté ADO Data Control 6.0 OLEDB
    Mais il y avait aussi ADO Ext. 2.8 etc...

    3- Ma requete traduite en Csharp s'execute mais sans aucun résultat

    La voici

    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
        private void TestConnection_V2()
        {
          ADODB.Connection Cn = new  ADODB.Connection();
          String Fichier;
     
        // Définit le classeur fermé servant de base de données
          Fichier = "C:/nocoo.xls";
     
     
     
          Cn.Provider = "MSDASQL";
          string ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" 
                            + "DBQ="
                            + Fichier 
                            + "; ReadOnly=False;";
     
          Cn.Open(ConnectionString,"","",0);
     
          string SQL = "select * from [nocoo$]";
     
          ADODB.Recordset rs = new ADODB.Recordset();
          int opt = 0;
          Object o=5;
          rs = Cn.Execute(SQL, out o, opt);
     
          Cn.Close();
        }
    Aurais-tu une petite lumiere pour moi ?

    Merci beaucoup

  20. #20
    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
    Citation Envoyé par olibara Voir le message
    1- C'est du VBA et les parametres cSharp sont un peu différent mais pas documentés
    2- La reference a ajouter au projet n'est pas tres explicite, j'ai ajouté ADO Data Control 6.0 OLEDB
    Mais il y avait aussi ADO Ext. 2.8 etc...
    3- Ma requete traduite en Csharp s'execute mais sans aucun résultat
    Aurais-tu une petite lumiere pour moi ?
    Euh, ouais, effectivement ce code VBA est assez bizarre à adapter en C#.

    Mais si tu prends un peu de recul, c'est comme si tu voulais te connecter à une base de données. J'imagine que tu as déjà fait ça pour une base Oracle ou SQL server. Ca donne quelque chose dans le même esprit, avec un fichier 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
    OleDbConnection cnx = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\Classeur1.xls;Extended Properties=\"Excel 8.0;HDR=No;IMEX=1\";");
    OleDbCommand cmd = new OleDbCommand("SELECT * FROM [Feuil1$]");
    cmd.Connection = cnx;
     
    cnx.Open();
    OleDbDataReader reader = cmd.ExecuteReader();
    if (reader.HasRows)
    {
        while (reader.Read())
        {
            // Ici, tu récupères tes valeurs...
            // Par exemple :
            Console.WriteLine(reader.GetString(0) + reader.GetString(1));
        }
    }
    reader.Close();
    cnx.Close();
    Ici, j'interroge la feuille Feuil1 du fichier Excel suivant D:\Classeur1.xls.

    Pour plus d'informations sur la chaîne de connexion Excel, tu peux aller sur ConnectionStrings.Com

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Afficher une boite de dialogue Excel via une macro
    Par SebastienM dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 28/01/2009, 09h36
  2. boite de dialogue excel automatique
    Par marinef dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/07/2008, 13h47
  3. Feuille de dialogue Excel
    Par GreatDeveloperOnizuka dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/07/2008, 22h45
  4. Comment utiliser une boite de dialogue Excel ?
    Par mamou30 dans le forum Delphi
    Réponses: 6
    Dernier message: 18/06/2007, 00h24
  5. [VBA] Paramètres boite de dialogue Excel
    Par seb.kepka dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/01/2006, 11h19

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