Announcement

Collapse
No announcement yet.

Excel bearbeiten

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Excel bearbeiten

    Hallo,

    ich weis das man mit folgendem Code eine Exceldatei öffnen kann:

    Excel = Variant::CreateObject("Excel.Application");
    Excel.OlePropertyGet("WorkBooks").OleFunction("Ope n","C:\\test.xls");
    Excel.OlePropertySet("Visible",1);

    Nun weis ich nicht:
    -wie greife ich auf das erste Tabellenblatt zu?
    -wie kann ich herausfinden wie viele Zeilen beschrieben sind?
    - ...

    Im Prinzip ist das ganze für folgende Aufgabe (siehe Anhang):
    1. vorhandene Exceldatei öffnen (es existiert nur Tabelle1)
    2. auf dieses erste Tabellenblatt zugreifen
    3. In Spalte F sind wiederkehrende Inhalte, in diesem Fall 5 verschiedene. Die Zeilen dieser Inhalte sollen in vom Programm neu angelegten Tabellenblättern (Tabellenblatt 2-6) mit dem jeweiligen Namen kopiert werden. Die Überschriften sind in jedem Blatt gleich
    4. Datei speichern

    Kann mir hier jemand helfen?
    Ein Programmcode wäre für mich sehr hilfreich.

    Danke!
    Attached Files
    Gruß
    Silvio

  • #2
    Excel bearbeiten (jetzt richtige Anlage)

    Hallo,

    ich weis das man mit folgendem Code eine Exceldatei öffnen kann:

    Excel = Variant::CreateObject("Excel.Application");
    Excel.OlePropertyGet("WorkBooks").OleFunction("Ope n","C:\\test.xls");
    Excel.OlePropertySet("Visible",1);

    Nun weis ich nicht:
    -wie greife ich auf das erste Tabellenblatt zu?
    -wie kann ich herausfinden wie viele Zeilen beschrieben sind?
    - ...

    Im Prinzip ist das ganze für folgende Aufgabe (siehe Anhang):
    1. vorhandene Exceldatei öffnen (es existiert nur Tabelle1)
    2. auf dieses erste Tabellenblatt zugreifen
    3. In Spalte F sind wiederkehrende Inhalte, in diesem Fall 5 verschiedene. Die Zeilen dieser Inhalte sollen in vom Programm neu angelegten Tabellenblättern (Tabellenblatt 2-6) mit dem jeweiligen Namen kopiert werden. Die Überschriften sind in jedem Blatt gleich
    4. Datei speichern

    Kann mir hier jemand helfen?
    Ein Programmcode wäre für mich sehr hilfreich.

    Danke!
    Attached Files
    Gruß
    Silvio

    Comment


    • #3
      Naja, beschreiben kannst du die Zellen folgendermaßen:
      (ich importiere Daten aus einem Stringgrid und prügel sie ins excelsheet rein)

      try
      {
      // Starte Excel (oder verbinde mit bestehendem)
      ExcelApplication->Connect();
      }
      catch(Exception& e)
      {
      Application->MessageBox(e.Message.c_str(),"OLE-Error",MB_ICONERROR);
      return;
      }
      // Mache das Fenster sichtbar
      ExcelApplication->set_Visible(0,1);
      // Erzeuge neue Arbeitsmappe
      ExcelApplication->Workbooks->Add();
      // Verbinde Komponente mit Tabelle
      //ExcelWorksheet->ConnectTo(ExcelApplication->ActiveSheet);
      tagVARIANT mycol,myrow,myval,mycolwidth;
      //und dann in vt den Typ zuzuweisen
      mycol.vt = VT_UINT;
      mycolwidth.vt=VT_UINT;
      myrow.vt = VT_UINT;
      myval.vt=VT_R8;


      mycolwidth.intVal=8;
      ExcelApplication->Cells->set_ColumnWidth(mycolwidth);

      smom=0;
      zmom=0;


      for(z=zmom;z<(maxz+zmom+1);z++){
      for(s=smom;s<(maxs+smom+1);s++){
      mycol.intVal=s;
      myrow.intVal=z;
      txt=(AnsiString)StringGrid1->Cells[s][z];
      if(!(txt==""))
      ExcelApplication->Cells->set_Item(myrow,mycol,TVariant(txt));
      }
      }


      Allerdings scheint mir das reichlich unelegant, denn das ist saulangsam... bei größeren Feldern schläft man da schon fast ein.
      Vielleicht kennt jemand einen schnelleren Weg? So ne Art memcpy, mit dem ich komplette Felder übergeben kann?

      Comment


      • #4
        Oh mann, sorry, hab nicht geahnt das da alle whitespaces gelöscht werden...
        Desweitern hab ich noch die inits vergessen:

        unsigned int smom,zmom,s,z,maxz,maxs;
        AnsiString txt;

        Comment


        • #5
          Schau mal bei
          http://www.c-plusplus.de/forum/viewt...-is-39259.html
          da hab ich mir auch etwas tippartbeit gespart ;-) funktioniert gut evtl. noch
          etwas anpassen.

          Comment


          • #6
            Vielen Dank für Eure Antworten.
            Ich werde mir das alles mal anschauen. Es scheint doch etwas schwieriger zu sein als ich dachte.
            Gruß
            Silvio

            Comment


            • #7
              Hallo, wollte meine obige Frage nochmals anstossen...
              Kennt jemand einen Weg wie ich ganze Felder ins Excel übergeben kann, ohne dass ich auf SetItem angewiesen bin? Ich würde gerne das Sheet wesentlich schneller beschreiben...

              Danke!

              Comment

              Working...
              X