krUst3 Geschrieben 14. September 2005 Geschrieben 14. September 2005 Hallo zusammen, ich habe eine Frage zu einem C++ Vorhaben/Aufgabe von mir. Ich möchte eine Art Schnittstellenfunktion zwischen einem Exel-sheet und einer text-datei machen. Das schreiben der Werte in einen .txt bekomme ich ja auch formatiert hin. Mein Problem ist allerdings, dass ich keine Ahnung habe, wie ich die Werte aus den einzelnen Zellen einer ExelTabelle auslesen kann... Also meine Grundidee ist es per Schleife alles Spaltenweise auszulesen in in einer .txt Datei formatiert (z.B. alles Werte durch ein Semikolon getrennt abzuspeichern, damit das gezielte Auslesen der Daten zu einem späteren Zeitpunkt möglich ist. Da ich mich erst seit kurzem in der Ausbildung befinde, fehlt mir das nötige etwas an Wissen ( :baby: ) Bin aber schon sehr fleissig dabei. Also Entwicklungsumgebung stehen mir Dev C++, Borlandbuilder und auch MS Visual 6.0 zur verfügung, was euch lieber ist. Wäre nett, wenn ihr ein paar Ansätze oder Denkanstöße bringen würdet, aus dem ich dann nen Quellcode formen könnte Zitieren
Klotzkopp Geschrieben 14. September 2005 Geschrieben 14. September 2005 Soll das eine Übungsaufgabe sein? Excel kann so etwas nämlich auch ganz gut selbst. Falls ja, gibt es noch weitere Vorgaben? Darfst du die Automatisierungsschnittstelle benutzen? Zitieren
krUst3 Geschrieben 14. September 2005 Autor Geschrieben 14. September 2005 Also, ich habe hier ein Makro in VBA, das ein Abbild einer Exeltabelle in eine txt schreibt...(habe sie von den Dateinamen her verändert ) Public dateinameneu Sub test1() Filename = ActiveWorkbook.Name PunktPos = InStr(1, Filename, ".") dateinameohne = Mid(Filename, 1, PunktPos) dateinameneu = dateinameohne & "TXT" Application.Goto Reference:=Range("A1") Do i = i + 1 Loop Until (Application.Cells(i, 1) = "") Application.Range(Cells(1, 1), Cells(i - 1, 7)).Select Selection.Copy Workbooks.Add ActiveSheet.Paste Set AktuelleArbeitsmappe = Application.ActiveWorkbook Workbooks.Open Filename:="c:\ordner\irgendeine.xls" Workbooks(AktuelleArbeitsmappe.Name).Activate Application.Run "IRGENDEINE.XLS!speichern1", dateinameneu ActiveWindow.Close SaveChanges:=False ActiveWindow.Close SaveChanges:=False End Sub[/PHP] Ich sollte aber nach möglichkeit eine kleine Anwendung in einer Konsole schreiben , die dann die Daten an ein weiteres Programm übergibt. Wie diese Übergabe später aussehen soll/muss, kann ich ja noch entscheiden. Es geht primär um das Auslesen... Wenn es geht bräuchte ich nur ein paar Ansätze, den Rest bin ich selber gewillt nachzuschlagen bzw. mir anzueignen PS.: Danke für die schnelle Antwort Zitieren
Klotzkopp Geschrieben 14. September 2005 Geschrieben 14. September 2005 Wenn es geht bräuchte ich nur ein paar Ansätze, den Rest bin ich selber gewillt nachzuschlagen bzw. mir anzueignen Ich wiederhole mich auch gern nochmal: Soll das eine Übungsaufgabe sein? Falls ja, gibt es noch weitere Vorgaben? Darfst du die Automatisierungsschnittstelle benutzen? Der Ansatz hängt von der Antwort auf diese Fragen ab. Zitieren
krUst3 Geschrieben 14. September 2005 Autor Geschrieben 14. September 2005 Tschuldigung....Ja, es ist eine reine Übungsaufgabe für mich, also keine Prüfung oder Hausaufgabe oder dergleichen... Von den Automatisierten Schnittstellen wurde mir nichts gesagt, sprich, mir wurde nicht gesagt, dass ich sie nicht benutzen darf Ansonsten sind da keine großen Vorgaben, dass macht es ja so schwer für mich. ..Ich weiss ja auch noch nicht exakt, wie die Daten später an das andere Programm übergeben werden sollen. Deshalb kam mir ja die Idee, die Werte per ";" zu trennen (innerhalb der .txt) um sie später einfach auslesen zu können. Könnte man denn die Funktion des VBA Makros in einen C++ Quellcode umwandeln, der aus einer Konsole heraus die Daten liest. (Konsole wäre mir sehr lieber, da ich MFC Dialoge nur mal kurz angeschnitten habe...) Ich hoffe ich bringe hier keinen zur Verzweiflung :hells: Zitieren
Klotzkopp Geschrieben 14. September 2005 Geschrieben 14. September 2005 Könnte man denn die Funktion des VBA Makros in einen C++ Quellcode umwandeln, der aus einer Konsole heraus die Daten liest.Könnte man. Das VBA-Programm liest allerdings nicht aus, sondern benutzt nur die interne Speicherfunktion von Excel. Wenn du die Daten anders aufbereiten oder an ein anderes Programm weitergeben willst, hilft dir das nicht. Du kannst ja mal hier reinschauen (nicht wundern, wenn da eine Antwort ohne Frage steht ) http://forum.fachinformatiker.de/showthread.php?t=20841 Das könnte auch noch helfen: http://forum.fachinformatiker.de/showthread.php?t=70912 Zitieren
krUst3 Geschrieben 15. September 2005 Autor Geschrieben 15. September 2005 sorry, aber ich scheine in der Beziehung ein absoluter n00b zu sein... Ich konnte in Visual über: "Projekt -> dem Projekt hinzufügen -> Komponenten und Steuerelemente" nicht die "EXEL9.OLB" ins Projekt einbinden. Folgende Fehlermeldung wurde ausgegeben: "Die Ausgewählte Datei ist keine identifizierbare Komponente" Sämtliche #include "..." oder include<...> Versuche wurde nicht akzeptiert, auch wenn ich die Datei ins Projektverzeichnis kopiert habe... Ich verzweifel hier noch :-( Hier noch was zum lachen für alle Könner: #include <iostream> #include <windows.h> #include <stdio.h> using namespace std; int main(int argc, char *argv[]) { FILE *TestDatei; TestDatei = fopen("C:\\test.txt", "r"); // Pfadangabe + Lesemodus /* solange das Ende der Datei nicht erreicht ist, liest und gibt das Programm zweilenweise jeden char aus... */ cout << "<<< Anfang der Ausgabe >>>\n\n"; while(!feof(TestDatei)) { cout << char(fgetc(TestDatei)); } fclose(TestDatei); cout << "\n\n<<< Ende der Ausgabe >>>"; system("PAUSE>NUL"); return 0; }[/PHP] mir ist schon klar, dass das absolut basic-wissen ist und es mit ner .xls auch nicht klappt... Zitieren
Klotzkopp Geschrieben 15. September 2005 Geschrieben 15. September 2005 Ich konnte in Visual über: "Projekt -> dem Projekt hinzufügen -> Komponenten und Steuerelemente" nicht die "EXEL9.OLB" ins Projekt einbinden.In dem verlinkten Thread stand auch nichts vom Projektmenü. Da stand: ClassWizard->Automation-Add Class->From a type library Auf Deutsch etwa: Klassenassistent -> Automatisierung-Klasse hinzufügen -> Aus einer Typbibliothek. Hier noch was zum lachen für alle Könner:Eher zum Weinen Stellst du das nur zur Unterhalten hier rein, oder möchtest du Kommentare dazu? Zitieren
krUst3 Geschrieben 15. September 2005 Autor Geschrieben 15. September 2005 Naja, den wizard als assistenten zu übersetzen, da hat selbst big MS nen Fehler gemacht. Wusste zwar was gemeint war, konnte den trotzdem in einer reinen Konsolenapplikation nicht anwählen. Hier nun kurz zu meinem Fortschritt: Hab mittels ODBC probeweise ne access db in einen mfc dialog eingebunden. Auslesen klappt zumindest hier schonmal *freu* Heute und morgen werde ich mir dann mal das selbe bei exel basteln... Nur noch eine kleine Frage: Was für eine KLasse soll ich denn aus der importierten "exel9.olb" erstellen. Da gibts ja 100 versch. möglichkeiten (wobei ich den größten Teil ja selber ausschließen kann) Wäre nett wenn ihr mir bei weitern Fragen helfen würdet, auch wenn ich eure (klotzkopp's) wertvolle Freizeit mit dummen Fragen in Anspruch nehme :-/ PS.: den geposteten code von mir bitte einfach überlesen *TaschentuchFürTränenZuKlotzkoppReich* Zitieren
Klotzkopp Geschrieben 15. September 2005 Geschrieben 15. September 2005 Hab mittels ODBC probeweise ne access db in einen mfc dialog eingebunden. Auslesen klappt zumindest hier schonmal *freu* Heute und morgen werde ich mir dann mal das selbe bei exel basteln...Wenn du ODBC benutzt, brauchst du die Automatisierungsschnittstelle nicht. Was für eine KLasse soll ich denn aus der importierten "exel9.olb" erstellen. Da gibts ja 100 versch. möglichkeiten (wobei ich den größten Teil ja selber ausschließen kann)Startpunkt ist immer _Application, wie auch in dem Beispielcode im verlinkten Thread. Zitieren
Bubble Geschrieben 15. September 2005 Geschrieben 15. September 2005 Also meine Grundidee ist es per Schleife alles Spaltenweise auszulesen in in einer .txt Datei formatiert (z.B. alles Werte durch ein Semikolon getrennt abzuspeichern, damit das gezielte Auslesen der Daten zu einem späteren Zeitpunkt möglich ist. Das kann Excel schon von Haus aus. Speichere Dein Sheet (oder die aktuelle Selektion) als CSV-Datei. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.