Excel Tabelle mit visual Studio C++ auslesen

Gast #984208
Lesenswert?

Im Anhang findest du ein kleines Visual Studio 6 Projekt, das zeigt, wie 
man mit C++ auf ein Excel-Sheet zugreifen kann. Bitte erst in den Code 
reinschauen und die dort angegebene Excel Datei anlegen.
Prinzipiell kannst auf diese Art alles machen, was du auch von Hand in 
Excel machen kannst. Über die Methoden, die an den Objekten alle 
dranhängen kannst du dich bei MSDN oder Google informieren.
Angehängte Dateien:
Gast #2196166
Lesenswert?

Hallo zusammen,

hab gerade versucht das beispielprogramm ans laufen zu bekommen.
Habe dafür Visual Studie 2010 C++ genutzt und es hat leider nicht 
funktioniert. Es werden mir beim kompilieren jede menge fehler in der 
datei excel.h, die mit im Zipfile enthalten ist angezeigt.

Kann das an der von mir genutzen Version von Visual Liegen oder müsste 
ich was anderes falsch gemacht haben ?
Persönliche Seite #2196172
Lesenswert?

Stefan K. schrieb:
> Es werden mir beim kompilieren jede menge fehler in der
> datei excel.h, die mit im Zipfile enthalten ist angezeigt.

Du könntest Dir ja diese Fehlermeldungen ansehen, beginnend mit der 
ersten.

Die werden ja nicht ausgegeben, um Leute zu frustrieren, sondern sagen 
i.d.R. recht eindeutig, was ihnen nicht passt.

Eine Datei namens excel.h ist im Beispiel übrigens nicht enthalten, da 
gibt es nur eine excel8.h - meinst Du die?
Gast #2196258
Lesenswert?

ups ja genau die meinte ich,

das Ding ist nur, das bei 60 bis 70 Fehlermeldungen meistens nur 1 Punkt 
falsch ist und ich nicht der C++ überflieger bin, das zu erkennen.

Meistens steht der Fehler ja in der ersten Fehlermeldung.

Fehlermeldung:

1>C:\Programme\Microsoft 
SDKs\Windows\v7.0A\include\Excel_test\excel8.h(8): error C2504: 
'COleDispatchDriver': Basisklasse undefiniert

Springe ich nun an die stelle mit Visual, an der der Fehler sein soll, 
bzw Visual den Fehler ausgibt, habe ich den orginal code aus der zip 
datei.


In der datei wird ja nun als erstes die Klasse  wird ja nun eine 
Klassedefiniert:

class _Application : public COleDispatchDriver
{
public:
  _Application()
  {
  }    // Calls COleDispatchDriver default constructor
  _Application(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch)
  {
  }
  _Application(const _Application& dispatchSrc) : 
COleDispatchDriver(dispatchSrc)
  {
  }

....  hier stehen noch viele weiter punkte drinnen bei denen ich die 
weiteren Fehlermeldungen erhalte ...

}

Im meinem geringen Basisverständniss von C++ ist das die Defintin der 
Klasse COleDispatchDriver.der Fehler wird an der Öffungsklamemr der 
Klassendefinition angezeigt.

Die Fehlermeldung verstehe ich so, das es eine Basisclasse geben müsste 
auf der diese Definition zurückgreift.

Nun verstehe ich nicht was dann am Cod falsch sein soll bzw wo ich das 
ganze ändern muss, damit das ganze funktioniert, daher meine erste frage 
ob das ganze Programmspezisch ist oder nicht( befürchte ja nein...)
Wenn einer eine komplette Lösung des PRoblems hätte wäre das natürlich 
traumhaft.
Persönliche Seite #2196271
Lesenswert?

Stefan K. schrieb:
> 1>C:\Programme\Microsoft
> SDKs\Windows\v7.0A\include\Excel_test\excel8.h(8): error C2504:
> 'COleDispatchDriver': Basisklasse undefiniert

Eben. COleDispatchDriver ist hier unbekannt. Was macht man da?

Man sieht in die Dokumentation

http://msdn.microsoft.com/de-de/library/fw39e08y%28v=vs.80%29.aspx

Und darin steht

Header: afxdisp.h

Ändere also die Headerdatei stdafx.h und trage dort #include <afxdisp.h> 
ein.
Gast #2196354
Lesenswert?

Falls es jemand interessiert, man kann so eine .xls Datei auch "zu Fuss" 
relativ einfach auslesen. Sie besteht aus einer Kette sogenannter 
Biff-Records:


 1.Record                                                 2.   n.
 |  WORD 16bit  |     WORD 16bit     |   BYTES variabel | .... |  WORD 
16bit
 | Recordnumber | Record Data Length |   Record Data    | .... | 
Recordnb.

Man liest zuerst das erste WORD und dekodiert den Typ. Falls das der 
gewünschte Typ ist, zb, 0003 für floating Point dann kann man den anhand 
der Record Data Length einlesen und dekodieren. Wenn nicht hangelt man 
sich zum nächsten Record durch usw...
gk
Gast #4898192
Lesenswert?

Hallo!

Ich weiß nicht ob ihr das noch liest aber ich könnte eure hilfe 
gebrauchen.
Wie ihr früher Ali K. geholfen habt brauch auch ich eure hilfe.

Es geht praktisch um dasselbe (Excel Tabelle auslesen) nur mit dem 
Unterschied, ich habe eine große Excel-Tabelle wo ich zunähst die 
Messgrößen  festlegen muss bzw wieviele ich habe und diese 
weiterschicke. Dann muss ich Zeile für Zeile jeden Wert abfragen und an 
einen Server schicken (der die Werte dann auf einer UI ausgibt). (C++)

Ich habe kein großartiges Programmierwissen, also könntet ihr evtl. zu 
jeder Funktionsgruppe im Code dazuschreiben was sie macht, bzw wie sie 
Funktioniert? den Rest kann ich mir selber denken, hoffe ich.


Ich wäre euch unendlich dankbar!

mit freundlichen Grüßen
Martin
Angehängte Dateien:
Gast #4899753
Lesenswert?

Geht denn sowas nicht direkt per VBA? Mir hat mal einer vorgemacht, wie 
er in ein anderen Excel reinschaut und die Daten von da holt und 
umsoritiert, um sie in einem Excel zu verrechnen und auszugeben.

?
Gast #4902650
Lesenswert?

Musses unbedingt Visual Studio C++ sein?? schrieb:
> Wenn es auch python tut:
> http://www.python-excel.org/

Nein leider muss es C++ sein und ja ich bräuchte echt eure hilfe.

Andreas F. schrieb:
> Geht denn sowas nicht direkt per VBA? Mir hat mal einer
> vorgemacht, wie
> er in ein anderen Excel reinschaut und die Daten von da holt und
> umsoritiert, um sie in einem Excel zu verrechnen und auszugeben.


Ich weiß nicht, ich hab mich mit VBA in C++ nicht auseinandergesetzt.
Kannst du mir ne Anleitung schreiben was ich tun muss um die Daten aus 
meiner Tabelle in ein Visual Studio Projekt einzulesen?

Ich bräuchte das nämlich ziemlich bald.
Dann wäre ich dir wirklich sehr dankbar.

mfg
Martin
Gast #5932015
Lesenswert?

Habe das Excel-Test Programm von Manne laufen. Nun habe ich das Problem, 
dass ich ganze Arrays einlesen muss - also mehrere tausend Spalten 
untereinander. Manne sagt dass das geht, aber die Arrays zu 
initialisieren ist für mich schon zu hoch. Könnte mir da jemand helfen?
Des weiteren wäre es gut, wenn es eine Möglichkeit gäbe schon vorab zu 
wissen, wie viel Zeilen Werte enthalten. So etwas wie getCount...
Gruss

Jo

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren