StringGrid einzelne Zelle in Excel speichern
-
Hallo,
ich habe bisher eine komplette StringGrid-Tabelle in eine CSV-Datei gespeichert, mit folgendem Code:
Beispiel_Tabelle->SaveToFile("C:\\Tabellen\\tabelle.csv");
Das klappt, ist i.O.
Gibt es eine Möglichkeit, einzelne Zellen aus StringGrid in Datei abzuspeichern, z.B. StringGridZelle[1][1] in CSV-Datei Zelle[1][1]?
Oder auch komplette Zeilen abspeichern?
danke schön
newey
-
Hallo
Du must die CSV-Datei manuell öffnen (TFileStream oder std::ofstream) und die gewünschten Werte reinschreiben. Wenn du nur einen Teil ersetzen willst, must du erstmal die Datei komplett laden, als String neu zusammensetzen und dann auf einmal speichern.
Schau dir einmal eine CSV-Datei in einem einfachen Text-Editor an.bis bald
akari
-
Hallo Akari,
vielen Dank für die Antwort, ich hab mich etwas ungenau ausgedrückt.
Ich möchte beispielsweise 5 Zeilen von meinem StringGrid in die ersten 5 Zeilen der CSV-Datei speichern --> für die ersten 5 Zeilen ist das i.O.
Ich möchte die nächsten 5 Zeilen (6...10) aus meinem StringGrid in die selbe CSV-Datei als Zeilen 6...10 nach den ersten 5 Zeilen anhängen.
Ist das möglich?
danke schön
newey
-
Hallo newey.
Ich denke was du suchst sieht in etwa so aus:
// Speicher für TStringList reservieren um die Liste in den Speicher zu laden TStringList *MyList = new TStringList(this); // Inhalt der Liste in den Speicher laden // MyList ist der Pointer auf diesen Speicherbereich MyList->LoadFromFile("C:\\Tabellen\\tabelle.csv"); // Zellen vom StringGrid ab Zeile 6 an die Liste anhängen // Achtung: Die Zählung der Spalten und Zeilen beginnt bei 0. for (int row = 5; row < Beispiel_Tabelle->RowCount; ++row) { // Beispiel_Tabelle->Cells[Col][Row] MyList->Add( Beispiel_Tabelle->Cells[0][row] ); } // Liste aus dem Speicher in die Datei schreiben MyList->SaveToFile("C:\\Tabellen\\tabelle.csv"); // Speicher freigeben delete MyList;
Hab diesen Code jetzt nicht getestet und einfach aus dem Kopf geschrieben.
Aber im Prinzip sollte das so klappen.
-
Hallo CppDude,
danke schön für Deine Antwort.
In deinem Beispiel, ähnlich hat das auch Akari beschrieben, muss ich die Daten aus der csv-Datei laden, dann die weiteren z.B. 5 Zeilen anhängen und das dann wieder in die csv-Datei abspeichern.
Gibt es keine Möglichkeit ohne das vorherige Laden der bereits vorhandenen Werte aus der CSV-Datei?
Gibt es keine Möglichkeit mit SaveToFile ab Zeile 6?
newey
-
Gibt es keine Möglichkeit mit SaveToFile ab Zeile 6?
Da 'SaveToFile' als Parameter nur den Dateipfad annimmt, geht es damit nur so wie ich es beschrieben habe.
Gibt es keine Möglichkeit ohne das vorherige Laden der bereits vorhandenen Werte aus der CSV-Datei?
Du könntest die Datei zum Beispiel mit 'fopen(<pfad>, a+)' öffnen.
Habe jetzt aber grad keinen Beispielcode dafür, müsstest du mal selbst suchen.-> a+ - Creates a new file or modifies an existing one.
-> If the file already exists: it is opened and its contents can be updated. New information written to the file would be added to the end of the file.
-> If the file does not exist: a new file is created and can be written to.
-
Aber wenn schon, dann die C++ Varianten (die akari genannt hat): TFileStream oder std::ofstream. Auch dort gibt es den Append Modus.
-
Hallo,
danke schön für Eure Tipps, hat geklappt.
newey