Exportieren von ical-Datei über eine CSV-Datei zu einem Tabellenblatt in Excel
-
Ich habe Daten zeilenweise aus einer ical-Datei in eine CSV-Datei eingelesen, von welcher ein Datensatz wie unten angeführt ausgesehen hatte:
17. BEGIN:VTODO
18. DTSTAMP:20200516T011102Z
19. SUMMARY:MoM regarding epic for vcal to line conversionprogram development
20. DESCRIPTION:Agenda:\n- supported OS\n- selectedprogramming languages\n- ne
21. eded documentation\n- TBD\n\n#\n#TheEnd
22. DTSTART:20191121T223000Z
23. DUE:20200531T220000Z
24. CLASS:PUBLIC
25. STATUS:IN-PROCESS
26. PERCENT-COMPLETE:0
27. PRIORITY:5
28. UID:8f59829a-762b-4173-b921-e6079e9da650
29. CREATED:20191121T044159Z
30. LAST-MODIFIED:20200512T115303Z
31. BEGIN:VALARM
32. TRIGGER;VALUE=DATE-TIME:20200530T220000Z
33. ACTION:DISPLAY
34. DESCRIPTION:Agenda:\n- supported OS\n- selectedprogramming languages\n- ne
35. eded documentation\n- TBD\n\n#\n#TheEnd
36. END:VALARM
37. END:VTODONun will ich über eine Konsolenanwendung des Visual Studio 2019 diese Daten in eine Exceldatei einspielen! Hierbei soll es möglich sein vor dem Übertragen der Datensätze nach Excel die einzelnen Daten nach Timestamp oder Namen zu filtern und die wirklich notwendigen Datensätze nach Excel zu exportieren. Ein Datensatz beginnt wie in Zeile 17 so: >>BEGIN:VTODO<< und wird mit einem >>END:VTODO<< abgeschlossen. Es soll jeweils nach dem Datum, wie in Zeile 18 des DTSTAMP oder nach dem Inhalt der SUMMARY gefiltert werden.
Hierbei habe ich schon dem Quellcode angefertigt, wie die Übertragung aller Datensätze aus der ical-Datei in eine CSV-Datei aussehen soll, bereits angefertigt. (Der CSV-Datei habe ich auch bereits ein Timestamp verpasst):
#include <iostream>
#include <fstream>
#include <string>
#include <time.h>
#include <stdio.h>
using namespace std;const std::string currentDateTime() {
time_t now = time(0);
struct tm tstruct;
char buf[80];
tstruct = *localtime(&now);
strftime(buf, sizeof(buf), "%Y-%m-%d.%X", &tstruct);
return buf;
}int main( int argc, char *argv[]){
string file = argv[1];
string myText;
string strCsv;string newName = file + "_" + currentDateTime() + ".csv"; ofstream MyWriteFile(newName); ifstream MyReadFile(file); if(MyReadFile.is_open()){ while (getline (MyReadFile, myText)) { MyWriteFile << myText + ";"; } MyReadFile.close(); MyWriteFile.close(); } return 0;
}
Dies war die Datei zum Übertragen der Datensätze in eine CSV-Datei. Gleich folgt die Main-Routine, wo ich noch dem Filter in die CSv-Datei einbinden will:
#include <iostream>
#include <fstream>
#include <string>using namespace std;
int main( int argc, char *argv[]){
string myText; string strCsv; ifstream MyReadFile("tasks.ics"); if(MyReadFile.is_open()){ while (getline (MyReadFile, myText)) { cout << myText; strCsv.append(myText+";"); } MyReadFile.close(); } ofstream MyWriteFile("new.csv"); MyWriteFile << strCsv; MyWriteFile.close(); return 0;
}
-
In der Eile habe ich vergessen die Fragen in dem Beitrag am Ende mit beizufügen:
Wie schaffe ich es eine Routine in das bestehende Programm einzupflegen, welche mir Excel aufruft und die Spaltenüberschriften eines Datensatzes in eine Zeile und die dazugehörigen Informationen in eine Zelle darunter, also in die darunterliegende Zeile jeweils, einzutragen?!?
Hierbei muss angemerkt werden, dass ich durch C++ (also in Visual Studio 19) die Verteilung in die Zellen bereits festlegen möchte.
Ich wäre euch für eine Hilfestellung sehr dankbar, denn ich stoße gerade an meine Grenzen!
Danke in Voraus!!
-