Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Excel-tabelle in Mfc-programm einlesen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
23.05.2003, 00:54 Uhr
~storyteller
Gast


Hallo Zusammen


Ich habe ein riesiges Problem, das mich fast zum Wahnsinn treibt.

Mit Hilfe von CDatabase lese ich eine Excel-Tabelle in mein Programm ein.


C++:
CString cszExcelFile= ...
CString    cszDriver    = "MICROSOFT EXCEL DRIVER (*.XLS)";
CString cszSql;
cszSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;DBQ=%s", cszDriver, cszExcelFile, cszExcelFile);

CDatabase database;
if( database.OpenEx(cszSql,CDatabase::noOdbcDialog) )
{
....



Jetzt habe ich 3 Excel-Files. Scheinbar sind sie alle genau gleich,
aber nur mit einem funktioniert mein Programm.


File1: "Test-Fehler beim Oeffnen.xls"
-------------------------------------
schon beim OpenEx() tritt ein Fehler auf!


File2: "Test-letzen 8 Spalten nicht.xls"
-------------------------------------
die letzten 8 Spalten werden nicht eingelesen!


File3: "Test-alles funktioniert.xls"
-------------------------------------
hier wird alles korrekt eingelesen!


Warum funktionieren File1 + File2 nicht?

!Wenn mir jemand helfen möchte, müsste ich ihm die 3 Excel-Files mailen!


Für Hilfe wäre ich sehr dankbar

Gruß
storyteller

+++++++++++++++++++++++++
Excel 2000
MFC Visual C++ 6.0
Windows 2000 Prof.
+++++++++++++++++++++++++

Dieser Post wurde am 23.05.2003 um 08:09 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
23.05.2003, 08:08 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hallo,
dies hat mir mal ein Forumbenutzer zugeschickt, bin aber noch nicht dazugekommen es in die FAQ zu stecken:


C++:
#import <mso9.dll> no_namespace rename("DocumentProperties", "DocumentPropertiesXL")  
#import "C:\Programme\Gemeinsame Dateien\Microsoft Shared\VBA\VBA6\vbe6ext.olb" no_namespace  
#import <excel9.olb> rename("DialogBox", "DialogBoxXL") rename("RGB", "RBGXL") rename("DocumentProperties", "DocumentPropertiesXL") no_dual_interfaces

#pragma warning (disable:4192)
#pragma warning (disable:4146)


#include <stdio.h>
#include <tchar.h>

void dump_com_error(_com_error &e)
{
    _tprintf(_T("Oops - hit an error!\n"));
    _tprintf(_T("\a\tCode = %08lx\n"), e.Error());
    _tprintf(_T("\a\tCode meaning = %s\n"), e.ErrorMessage());
    _bstr_t bstrSource(e.Source());
    _bstr_t bstrDescription(e.Description());
    _tprintf(_T("\a\tSource = %s\n"), (LPCTSTR) bstrSource);
    _tprintf(_T("\a\tDescription = %s\n"), (LPCTSTR) bstrDescription);
}


struct StartOle {
    StartOle() { CoInitialize(NULL); }
    ~StartOle() { CoUninitialize(); }
} _inst_StartOle;



void main()
{
    using namespace Excel;

    _ApplicationPtr pXL;
    try {
    
    if (pXL.GetInterfacePtr() == NULL) pXL.CreateInstance(L"Excel.Application.9"); //check ob es schon laeuft
    
    pXL->Visible = VARIANT_TRUE;
//    pXL->Visible = VARIANT_FALSE;

    WorkbooksPtr pBooks;
    _WorkbookPtr pBook;    
    WorksheetsPtr pSheets;
    _WorksheetPtr pSheet;


    pBooks= pXL->Workbooks;
    pBook = pBooks->Add((long)Excel::xlWorksheet);    //vohandenes Dokument mit pBooks->Open("c:\\test.xls"); öffnen
    pSheets = pBook->GetWorksheets();
//    pSheets->Add();                                    //Blatt hinzufuegen
    pSheet=pBook->ActiveSheet;
    pSheet->Name="test";                            //Blattname ändern
    //pSheets->Delete();                            //Blatt löschen

    double q=354.6;
    pXL->Range["test!A7"]->Value2=q;            
    pXL->Range["test!A8"]->Value2=q+3;            

    pXL->Range["test!A9"]->Formula="=Sum(A7:A8)";        //bei Formeln englische Namen verwenden sonst Problem            
//    pXL->Range["test!D26"]->Formula="=Var(D20:D24)";            
//    pXL->Range["test!D27"]->Formula="=Average(D20:D24)";            

    pXL->Range["test!B7"]->Value2="20.03.2003";            
    pXL->Range["test!B8"]->Value2="13:50";

    pXL->Range["test!A7:test!A9"]->Font->Bold = true; //Fett schreiben



//    pBook->Save();    // wenn mit open geöffnet
//saveas funzt bei mir nicht so kann man das umgehen
    pBook->SaveCopyAs("c:\\test.xls");
    pBook->Close(false);    //damit der die aktuelle nicht speichert
    
    pXL->Quit();
    
    } catch(_com_error &e) {
    dump_com_error(e);

    }
}


--
class God : public ChuckNorris { };

Dieser Post wurde am 23.05.2003 um 08:09 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
23.05.2003, 09:47 Uhr
~storyteller
Gast


Hallo FloSoft


Der Compiler bringt folgenden Fehler:

#import <mso9.dll> no_namespace rename("DocumentProperties", "DocumentPropertiesXL")

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
fatal error C1083: Typbibliothek-Datei kann nicht geoeffnet werden: 'mso9.dll': No such file or directory
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


Was mache ich falsch?


Gruß
storyteller
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
23.05.2003, 10:07 Uhr
Tommix



Hallo,
die DLL steht im MS Office-Verzeichnis. Gib mal den Pfad mit an.

Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
23.05.2003, 11:51 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


Problem bei dem Programm ist das auch nur geschrieben wird. (du willst ja lesen).
Sollte aber auch gehen. Schau dir mal den Datentyp _t_variant an. Ist hilfreich den zu kennen.
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
23.05.2003, 12:07 Uhr
~Ente_Knusprig
Gast


Hi,

das schaut mir alles komplizierter aus als es sein müsste.
Mach's mit dem MFC-Typen COleVariant, da der VARIANT auf die Dauer unheimlich nerven kann :-)

Die import Files müssen tatsächlich voll qualifiziert angegeben werde sonst wird fürchterlich gemeckert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
23.05.2003, 15:00 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@ knusprige Ente

Was soll denn ann dem COleVariant leichter sein als an _variant_t
seh ich nicht, gib mir mal bitte ein beispiel.

Da du dich anscheinend damit auskennst kannst du mir ja vielleicht die Antwort zu folgendem noch unbeantworteten Thread geben. (wäre geil, ich habs einfach nicht hinbekommen)
www.fun-soft.de/index.php?file=/forum/showtopic.php?threadid=2331


Gruss Heiko

PS: Beware of the Duckhunter Spacelord
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 23.05.2003 um 15:46 Uhr von Heiko editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: