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++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 224
    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
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    J'ai du mal à comprendre ton post.
    Peux-tu préciser exactement ce qui marche ou pas ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 224
    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
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    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 ?)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 224
    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
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    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...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 224
    Par défaut
    Up !

  8. #8
    Membre chevronné 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
    Par défaut
    tu regardes dans la doc de Qt comment tu peux extraire un const char * ou un const wchar_t * depuis ton QString et le tour est joué. autrement dit, recuperer un pointeur sur une chaine de type C (avec un '\0' pour finir la chaine)
    de préférence un const wchar_t *, ça évite des conversions ...

    @+

  9. #9
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 224
    Par défaut
    Après un passage par la rubrique "Qt" :
    Il me manquait la ligne pour la conversion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::wstring ws = tableau->item(1, 1)->text().toStdWString();
    const wchar_t *bb = ws.c_str(); //je parle de celle-ci
    Merci à tout le monde.

  10. #10
    Invité de passage
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 1
    Par défaut Ecriture dans une ou plusieurs cellules
    On peut aussi inserer du texte en masse comme ça :

    Excel::RangePtr pRange = worksheet->GetRange( _bstr_t( _T("A1") ), _bstr_t( _T("Z255" ) ) );
    pRange->Cells->PutValue2(_bstr_t( _T("TEST") ));

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

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