Results 1 to 6 of 6

Thread: stringgrid naar excel

  1. #1
    Senior Member
    Join Date
    Jan 2005
    Location
    Waspik
    Posts
    579

    stringgrid naar excel

    Ik ben opnieuw bezig met het maken van een exportfunctie voor stringgrid gegevens naar excel. Ik vindt met Google wel wat (niet veel). De gevonden code snap ik echter niet. Dus ik ben zelf aan het proberen.

    Onderstaande loopt vast met de melding:
    //index out of range col=5 row=76
    De stringgrid bevat echter precies 5 kolommen en 76 rijen.



    Code:
    procedure TExport_2_Xls.Safe_2_Xls;
    var
      R, C, J, i : Integer;
      ExcelApp            : OleVariant;
      Data                : Variant;
    begin
      { TODO : Progressbar inbouwen zie gbi 4 ctrl app }
      ExcelApp := CreateOleObject('Excel.Application');
      ExcelApp.Workbooks.Add;
      ExcelApp.Workbooks[1].Worksheets[1].Name := 'test'; //Main_frm.TreeView1.Selected.Text;
      R := Main_frm.StringGrid_deel_ctrl.RowCount;
      C := Main_frm.StringGrid_deel_ctrl.ColCount;
      Data := VarArrayCreate([0,R, 0,C], varvariant);
      //kopteksten stringgrid ophalen
      for j := 0 to C - 1 do
        begin
          data[0, j] :=  Main_frm.StringGrid_deel_ctrl.Cells[j,0];
        end;
    
      //de rest van de cellen ophalen --> HIER gaat het fout
     for i := 0 to R - 1 do
        begin
          for j := 0 to C - 1 do
             data[i + 1, j] := Main_frm.StringGrid_deel_ctrl.Cells[C,R];   //index out of range col=5 row=76
        end;
    
      ExcelApp.Visible := True;
      ExcelApp.range   ['A1', ExcelApp.cells[R+1, C]].value:=data;
    end;

  2. #2
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Naar mijn gevoel moet het dit worden:
    delphi Code:
    1. for j := 0 to C - 1 do
    2.          data[i, j] := Main_frm.StringGrid_deel_ctrl.Cells[C,R];
    Ik zie geen reden om 'i' weer te verhogen met 1

  3. #3
    Excel begint toch bij 1 te tellen? Dus dan moet je voor zowel de row als de col er bij Excel eentje bij optellen.
    Marcel

  4. #4
    Heb je het programma laten lopen en de fout gevonden of heb je alle debug mogelijkheden gebruikt?
    Als ik een breakpunt zet en het programma regel-voor-regel laat lopen komt bij mij dezelfde foutmelding op de genoemde regel en komt na het aanklikken van 'Break' Lazarus zelfs met de exception-regel:
    Code:
      if (Col<0) or (Row<0) or (Col>=ColCount) or (Row>=RowCount) then
        raise EGridException.CreateFmt(rsIndexOutOfRange, [Col, Row]);
    Wat kan hier je conclusie zijn?

  5. #5
    Senior Member
    Join Date
    Jan 2005
    Location
    Waspik
    Posts
    579
    Ik moet mijn telling nakijken.

    En ik moet hoognodig gaan leren hoe debuggen in lazarus werkt. Ik zal eens googelen.

  6. #6
    Googelen hoeft niet en goochelen is het ook niet:

    In de grijze marge links naast de tekst een uitvoerbare regel aanklikken, zodat deze rood weergegeven wordt. Dit heet het maken van een 'breakpoint'.
    Nu Starten | Starten (of F9) en het programma zal lopen tot de aangeklikte regel.
    Hierna kan met F8 of F7 regel-voor-regel worden langsgelopen.
    Als je wat meer wilt zien, kun met Tonen | Debug Schermen | Lokale Variabelen (of Ctrl-Alt-L) de lokale variabelen zien.

    Als het programma vastloopt (dus een fatale fout geeft) kun je het programma resetten met Starten | Stoppen (of Ctrl-F2)

    Zo heb je een eenvoudige start.

    Succes!

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •