Excel Tabelle in C++ einfügen, nur wie?
Hallo, ich programmiere grade (mit c++) ein Paketverwaltungssystem. Ich möchte gerne eine Excel Tabelle dazu anlegen, in der ich dann Name/Adresse des Empfängers/Absender/Momentaner Standort und Versandstatus bearbeiten und festlegen kann. Diese Tabelle soll dann als Datenbank für das C++ Programm dienen, damit ich nicht alles in den Quelltext schreiben muss. Das Programm soll dann mittels einer Lieferscheinnummer die jeweiligen Daten auslesen und für den Nutzer sichtbar machen. Gegoogelt habe ich bereits nur hab ich nicht gefunden, was ich wirklich suche, bzw. was ich fand war für mich unverständlich. Da ich erst seit einem halben Jahr mit C++ arbeite, bin ich noch kein Weltmeister. Ich arbeite mit den Grundbefehlen. (Schleifen/conio2.h). Vielleicht könnte mir jemand ein wenig unter die Arme greifen. Ich bedanke mich schon vor ab für hilfreiche Antworten!
3 Antworten
Wenn du noch Anfänger bist, dann rate ich dir davon ab direkt Excel ankoppeln zu wollen. Das ganze ist nämlich aufgrund des Formates nicht so einfach, wie man sich das vorstellt. Die beste Möglichkeit für dich wird wahrscheinlich sein, deine Excelarbeitsmappe einfach mit Hilfe des Befehls "speichern unter" als "Tabspottgetrennte TXT" oder als "CSV" abzuspeichern. Beide Dateien könntest du dann einfach mitm Editor öffnen und sie zeigen beide eine sehr einfach Syntax zum Einlesen der Daten!! Die Programmierung wird somit Kinderleicht!
Mein Quelltext sieht momentan so aus: http://pastebin.com/dQWZEFyR
Is zwar schon ewig her, aber wüßte keine Art mit der das so wie dus beschreibst funktioieren würde. Du kannst allerdings eine Excel Tabelle benutzen, um eine selbst geschriebene Datenbank damit zu füllen. Dazu würde ich die Excel Tabelle als csv abspeichern und dann über eine entsprechende Funktion in deine Datenbank importieren. Bei einer csv Datei sind die einzelnen Daten immer durch ein ganz bestimmtes Zeichen (z.B. ;) getrennt, so das du die Daten beim Einlesen einfach anhand der Position zuordnen kannst. Also z.B. Lieferscheinnr.;Name;Vorname;Straße;.... Wäre mein Ansatz, aber da kommen bestimmt noch nen paar...
Danke schonmal für die Antwort. Mein Projekt muss in c++ geschrieben werden. Die Vorgaben unsres Lehrers ware: 500 Quellcode-Zeilen, Schleifen ohne Eingabe- und Wiedergabewert und ein Thema nach Wahl. Wäre es den möglich irgendwie die Daten aus einer normalen textdatei zu "importieren"?
edit: hab die Antwort dadrüber nicht gesehen^^ Somit beantwortet sich meine Frage von selbst!
Schau dir mal die Bibliothek fstream.h an. Dort kannst du via ifstream (input filestream), eine Textdatei einlesen, kann natürlich auch eine mit Excel exportierte csv sein. Via Stringverarbeitung entsprechend bearbeiten und damit die Tabelle in C++ ausgeben oder bei Bedarf sogar bearbeiten, via ofstream.
Werd ich mir mal anschauen, danke. Ich möchte, wenn die Lieferscheinnummer z.B. 123456789 ist die zu gehörigen Datein auslesen. Geht das denn, wenn alle Daten in einer Textdatei sind oder muss ich dafür jeweils ein seperates Textdokument anlegen?
Wenn du Daten in Excel in eine CSV speicherst in der Aufbau in etwa so
ArtikelNr;Artikelname;Preis
1;Wurst;1,20
2;Käse;2,20
3;Brot;2,30
Dann kannst du in dieser Datei die entsprechenden Zeilen einlesen und anhand des ; festmachen, an welcher Stelle du dich befindest. Mit einen String könntest du mit der Funktion getline() eine ganze Zeile einlesen könnte bei einem fstream so aussehen:
#include <fstream>
#include <iostream>
#include <string>
int main() {
string input;
ifstream fin; // fin in Anlehnung an cin
fin.open("C:\\Beispielordner\\Datensatz.csv");
while (fin) {
getline(fin, input);
}
return 0;
}
Nur als kleines Beispiel. Innerhalb der While-Schleife nach dem getline() könntest du nun mit der entsprechenden Zeile, welche nun in input gespeichert ist weiterarbeiten. Via String-Funktionen wie Find oder SubString könntest du den String nun zerschnibbeln in einzelne Teile (entsprechend nach dem Trennzeichen, in dem Fall ein Semikolon, suchen) und es z.B. in ein Array oder einer verketteten Liste abbilden.
Natürlich kannst du die Ausgabe einfach so reinposten oder sofern du grafisch arbeitest z.B. mit VCL Komponenten ein StringGrid benutzen.
Seh gerade was du schon hast, ist halt viel Spielerei und wenig funktionelles. Nicht böse gemeint aber spätestens wenn Funktionen und Klassen kommen, wirst du sehen dass es erstmal wichtig ist eine Art Bauplan für ein Programm zu entwerfen und die entsprechenden Werte rauszukriegen und so Geschichten wie dieser Ladebalken dann erstmal für Verwirrung sorgen bzw. wenn zum Schluss kommen.
Ein für sich brauchst du nur fstream und die Stringmethoden substr() und find(). Mit Hilfe dieser Methoden wäre dein Problem zu realisieren.
Kommt halt drauf an wieviel Zeit du hast, da du dich schon ein wenig damit auseinander setzen musst und auf einige kleine Probleme stoßen wirst, welche du umgehen musst z.B. das find gern ein Index liefert der OutofRange ist und abgefangen werden muss via Exception oder if(find(';',position) < find.length())
In wie fern würde denn dann der Quelltext aussehen? Könntest du mir ein kleines "Tutorial" machen mit Kommentagen, was die jeweilige Quellzeile "macht"? Danke