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 conversion

    program development
    20. DESCRIPTION:Agenda:\n- supported OS\n- selected

    programming 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- selected

    programming languages\n- ne
    35. eded documentation\n- TBD\n\n#\n#TheEnd
    36. END:VALARM
    37. END:VTODO

    Nun 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!!




Log in to reply