Forum: PC-Programmierung Excel Tabelle mit visual Studio C++ auslesen


von Ali K. (lernen)


Angehängte Dateien:

Lesenswert?

Hallo
ich hätte gern eine Frage, ich würde  gern die Daten die in der 
beigefügte Datei in c++ auslesen und weiter damit arbeiten.
Kann mir jemand dabei helfen.

Danke

von Manne (Gast)


Lesenswert?

Wenns morgen noch reicht kann ich dir Beispielcode von mir rauskopieren.

von hans (Gast)


Lesenswert?

Am einfachsten ist es die Datei von Excel als CSV-Datei
speichern zu lassen.
Dann ist es eine einfache Textdatei und kann sehr einfach
eingelesen werden.
Der direkte zugriff auf Excel ist nämlich meist recht
schwierig (MS eben;)).

http://de.wikipedia.org/wiki/CSV-Datei

gruß hans

von Manne (Gast)


Lesenswert?

Nein, ist nicht schwierig, 50 Zeilen Code.

von Ali K. (lernen)


Lesenswert?

Manne wrote:
> Wenns morgen noch reicht kann ich dir Beispielcode von mir rauskopieren.

danke, wegen der Zeit ist kein thema, es wäre ganz nett von dir.

von Manne (Gast)


Angehängte Dateien:

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.

von Stefan K. (Gast)


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 ?

von Rufus Τ. F. (rufus) Benutzerseite


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?

von Stefan K. (Gast)


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.

von Rufus Τ. F. (rufus) Benutzerseite


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.

von gk (Gast)


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

von Schützenhofer. M (Gast)


Angehängte Dateien:

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

von A. F. (chefdesigner)


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.

?

von Musses unbedingt Visual Studio C++ sein?? (Gast)


Lesenswert?

Wenn es auch python tut:
http://www.python-excel.org/

von Schützenhofer. M (Gast)


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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Es gibt hier zwei Möglichkeiten. Du kannst entweder Excel per 
Automation ansteuern und darüber auf einzelne Zellen zugreifen, oder 
Du erzeugst aus Deinem Excel-Dokument eine ODBC-Datenquelle und 
greifst auf die wie auf eine Datenbank mit entsprechenden 
ODBC-Funktionen zu.

von Jo (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.