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 :

ouvrir fichier Excel avec VC++


Sujet :

C++

  1. #1
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 224
    Points : 75
    Points
    75
    Par défaut ouvrir fichier Excel avec VC++
    Bonjour,
    Je cherche à ouvrir un fichier Excel existant sans utiliser les outils .Net.
    Le fichier ne veut pas s'ouvrir il retourne l'exception.

    Si je fais ceci ça me créé bien un fichier Excel et ça me remplit la cellule :
    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
    #include <iostream>
     
    #import "F:\Program Files\Fichiers communs\Microsoft Shared\Office10\MSO.DLL" no_namespace rename("DocumentProperties","DocumentPropertiesXL")
    #import "F:\Program Files\Fichiers communs\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB" no_namespace
    #import "F:\Program Files\Microsoft Office\Office10\Excel.exe" rename("ExitWindows", "ExitWindowsWD") rename("DialogBox", "ExcelDialogBox") rename("RGB", "ExcelRGB") no_dual_interfaces
     
    using namespace std;
     
    int main()
    {
    	// Initialize COM
    	CoInitialize(NULL);
    	try
    	{
    		Excel::_ApplicationPtr excel;
     
    		HRESULT hr = excel.CreateInstance(L"Excel.Application");
    		if(FAILED(hr))
    		{
    		char msg[1024] = {0};
    		sprintf(msg, "E: There was an error initializing Excel: %d", hr);
    		printf(msg);
    		}
    		excel->PutVisible (true);
     
    		//ajoute un workbook		
    		Excel::_WorkbookPtr workbook = excel->Workbooks->Open("F:\Documents and Settings\Jérôme\Mes documents\Visual Studio 2008\Projects\PROGRAMME_MAC_BU\PROGRAMME_MAC_BU\Debug\PROGBU.xls"); // Create the workbook
     
    		//prendre le nom de la feuille active
    		Excel::_WorksheetPtr worksheet = excel->ActiveSheet; // Get the active sheet
     
    		//nommer la feuille
    		//worksheet->PutName ("Nom de la feuille");
     
    		// on remplit une cellule
    		//worksheet->Range["A1"]->Value = "Hello";
     
    		//worksheet->SaveAs("c:\\test.xls");
    		//workbook->Close(); // Close the workbook
    		//excel->Quit(); // Quit excel
    	}
     
    	catch(_com_error &ce)
    	{
    		 MessageBox (NULL, "Erreur !!!", "Error", 0x10010);
    	}
     
    	CoUninitialize();
    }
    Pourquoi cela ne marche pas ?
    Merci de m'aider.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    J'ai du mal à comprendre ton post.
    Peux-tu préciser exactement ce qui marche ou pas ?

  3. #3
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 224
    Points : 75
    Points
    75
    Par défaut
    En fait le fichier Excel n'est pas ouvert et donc l'exception est retournée (ouverture de la MessageBox).

    Je mets le message du debugger :
    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
    'testExcel.exe' : Chargé 'F:\Documents and Settings\Jérôme\Mes documents\Visual Studio 2008\Projects\testExcel\Debug\testExcel.exe', Les symboles ont été chargés.
    'testExcel.exe' : Chargé 'F:\WINDOWS\system32\ntdll.dll'
    'testExcel.exe' : Chargé 'F:\WINDOWS\system32\kernel32.dll'
    'testExcel.exe' : Chargé 'F:\WINDOWS\system32\user32.dll'
    'testExcel.exe' : Chargé 'F:\WINDOWS\system32\gdi32.dll'
    'testExcel.exe' : Chargé 'F:\WINDOWS\system32\ole32.dll'
    'testExcel.exe' : Chargé 'F:\WINDOWS\system32\advapi32.dll'
    'testExcel.exe' : Chargé 'F:\WINDOWS\system32\rpcrt4.dll'
    'testExcel.exe' : Chargé 'F:\WINDOWS\system32\secur32.dll'
    'testExcel.exe' : Chargé 'F:\WINDOWS\system32\msvcrt.dll'
    'testExcel.exe' : Chargé 'F:\WINDOWS\system32\oleaut32.dll'
    'testExcel.exe' : Chargé 'F:\WINDOWS\WinSxS\x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_597c3456\msvcr90d.dll'
    'testExcel.exe' : Chargé 'F:\WINDOWS\system32\imm32.dll'
    'testExcel.exe' : Chargé 'F:\WINDOWS\system32\MSCTF.dll'
    'testExcel.exe' : Chargé 'F:\WINDOWS\system32\SynTPFcs.dll'
    'testExcel.exe' : Chargé 'F:\WINDOWS\system32\version.dll'
    'testExcel.exe' : Chargé 'F:\WINDOWS\system32\clbcatq.dll'
    'testExcel.exe' : Chargé 'F:\WINDOWS\system32\comres.dll'
    'testExcel.exe' : Chargé 'F:\WINDOWS\system32\msi.dll'
    'testExcel.exe' : Chargé 'F:\WINDOWS\system32\xpsp2res.dll', Le fichier binaire n'a pas été généré avec les informations de débogage.
    'testExcel.exe' : Chargé 'F:\WINDOWS\system32\sxs.dll'
    Exception de première chance à 0x7c812a5b dans testExcel.exe : Exception Microsoft C++ : _com_error à l'emplacement mémoire 0x0012f824..
    'testExcel.exe' : Chargé 'F:\WINDOWS\system32\MSCTFIME.IME'
    Le thread 'Thread de rappel RPC' (0x6f4) s'est arrêté avec le code 0 (0x0).
    Le thread 'Thread de rappel RPC' (0xd44) s'est arrêté avec le code 0 (0x0).
    Le thread 'Thread Win32' (0xddc) s'est arrêté avec le code 0 (0x0).
    Le programme '[540] testExcel.exe: Natif' s'est arrêté avec le code 0 (0x0).

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    As-tu débogué pas à pas ?
    À quel moment a lieu l'erreur exactement ? Dans le Open() ?
    Quel est le contenu de l'exception ? (HRESULT ? Message ?)

  5. #5
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 224
    Points : 75
    Points
    75
    Par défaut
    L'erreur est effectivement dans l'ouverture.
    Si je commente la ligne du Open() l'exception n'est pas retournée.
    Le message est celui de l'exception ("Erreur !!!").

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Citation Envoyé par jerome71300 Voir le message
    Le message est celui de l'exception ("Erreur !!!").
    Je pensais avoir été assez clair dans mon précédent post:
    La classe _com_error contient tout plein d'infos sur l'erreur, comme son HRESULT et une interface IErrorInfo...

  7. #7
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 224
    Points : 75
    Points
    75
    Par défaut
    J'ai mis l'intégralité du message du compilateur.
    Je ne vois pas quoi faire d'autre.

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Ben... Regarder les membres de l'objet _com_error que tu as catché, par exemple ?

  9. #9
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 224
    Points : 75
    Points
    75
    Par défaut
    J'ai vu :
    _vfptr avec pour valeur : const_com_error::'vftable'
    m_pszMsg avec pour valeur : 0x00000000 <Ptr> incorrect (CXX0030: Erreur : impossible d'évaluer l'expression).

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Appelle les fonction membre Error() et ErrorMessage() de l'objet!
    Appelle sa fonction ErrorInfo(), et les méthodes de IErrorInfo() sur le pointeur retourné! (sans oublier Release() à la fin)

  11. #11
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 224
    Points : 75
    Points
    75
    Par défaut
    Tu as raison jamais debogué avec visual c++.
    Et je suis méga débutant.

    J'ai tenté un truc et une fenêtre s'est ouverte:
    Exception non gérée à 0x00411961 dans testExcel.exe : 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.

  12. #12
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 224
    Points : 75
    Points
    75
    Par défaut
    A l'exécution VC++ fait apparaître le fichier "excel.tli"
    Il pointe une erreur sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    _com_dispatch_method(this, 0x783, DISPATCH_METHOD, VT_DISPATCH, (void*)&_result, 
            L"\x0008\x080c\x080c\x080c\x080c\x080c\x080c\x080c\x080c\x080c\x080c\x080c\x080c\x080c\x080c", (BSTR)Filename, &UpdateLinks, &ReadOnly, &Format, &Password, &WriteResPassword, &IgnoreReadOnlyRecommended, &Origin, &Delimiter, &Editable, &Notify, &Converter, &AddToMru, &Local, &CorruptLoad);

    EDIT :
    Quand je lance l'appli avec le .exe généré un message me parle de runtime mais sans préciser lequel.

  13. #13
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Essaie en remplaçant ton MessageBox par ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MessageBox (NULL, ce.ErrorMessage(), "Erreur en appel de méthode COM", MB_OK|MB_ICONERROR);

  14. #14
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 224
    Points : 75
    Points
    75
    Par défaut
    Il veut plus compiler avec une messageBox :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error C2664: 'MessageBoxW' : impossible de convertir le paramètre 3 de 'const char [31]' en 'LPCWSTR'

  15. #15
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Petite rectification:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MessageBox (NULL, ce.ErrorMessage(), TEXT("Erreur en appel de méthode COM"), MB_OK|MB_ICONERROR);

  16. #16
    Membre confirmé Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Points : 521
    Points
    521
    Par défaut
    salut,

    j'ai pas tout lu, mais un truc m'a sauté aux yeux elle est top la coloration syntaxique du forum

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Excel::_WorkbookPtr workbook = excel->Workbooks->Open("F:\Documents and Settings\Jérôme\Mes documents\Visual Studio 2008\Projects\PROGRAMME_MAC_BU\PROGRAMME_MAC_BU\Debug\PROGBU.xls"); // Create the workbook
    il faut doubler les backslashs dans le chemin indiqué sinon probleme ...

    @+

  17. #17
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Je m'en doutais, mais je voulais d'abord apprendre à jerome71300 à déboguer pour comprendre

  18. #18
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 224
    Points : 75
    Points
    75
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Petite rectification:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MessageBox (NULL, ce.ErrorMessage(), TEXT("Erreur en appel de méthode COM"), MB_OK|MB_ICONERROR);
    Erreur en appel de méthode COM :
    Unknown error 0x800A03EC

    salut,

    j'ai pas tout lu, mais un truc m'a sauté aux yeux elle est top la coloration syntaxique du forum

    Code :


    Excel::_WorkbookPtr workbook = excel->Workbooks->Open("F:\Documents and Settings\Jérôme\Mes documents\Visual Studio 2008\Projects\PROGRAMME_MAC_BU\PROGRAMME_MAC_BU\Debug\PROGBU.xls"); // Create the workbook


    il faut doubler les backslashs dans le chemin indiqué sinon probleme ...

    @+

    Quel c.. je suis !!!
    Merci à tous !

    Petite question :
    Pourquoi on ne double pas les backslashs dans la macro "#import" ?

  19. #19
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 224
    Points : 75
    Points
    75
    Par défaut
    En revanche je ne peux pas écrire dans le fichier Excel.
    il me dit "Le type ne correspond pas".

    J'ai testé en créant une chaine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string chaine = "test";

    Message du compilateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    impossible de convertir le paramètre 1 de 'std::string' en 'const _variant_t &'
    Je dois faire la conversion à la main ?
    Avec un cast ?

  20. #20
    Membre confirmé Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Points : 521
    Points
    521
    Par défaut
    fais plutot ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    _variant_t chaine(_T("ma chaine"));
    les paramètres de fonction OLE sont tous des variants, et les chaines sont de type BSTR (ici encapsulée dans un VARIANT)

    ça n'a plus rien à voir avec la STL ...

    @+

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

Discussions similaires

  1. [XL-2010] Ouvrir fichier Excel avec une partie de son nom
    Par juluseless dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/10/2014, 14h12
  2. [XL-2007] Ouvrir fichier excel avec vba
    Par Traputaca dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 25/05/2013, 16h22
  3. Ouvrir fichier excel avec accents
    Par allergique dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 20/05/2011, 14h03
  4. [OpenOffice][Tableur] Ouvrir fichier EXCEL avec OO dans IE
    Par hittony dans le forum OpenOffice & LibreOffice
    Réponses: 0
    Dernier message: 19/04/2011, 11h38
  5. Ouvrir fichier Excel avec macro
    Par zephirsoul dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 30/11/2007, 18h48

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