Results 1 to 8 of 8

Thread: Stringgrid naar XLSX

  1. #1
    Senior Member
    Join Date
    Sep 2004
    Location
    BELGIE(Vilvoorde)
    Posts
    671

    Question Stringgrid naar XLSX

    CodeTyphon en Lazarus in Windows 10.

    Kan men mij de code doorsturen om via een button een Stringgrid te exporteren naar Excel(xlsx)?

    Heb reeds een procedure om een Stringgrid te exporteren naar CSV

    Meeste dank.

  2. #2
    Misschien kan je hier iets mee:
    https://www.swissdelphicenter.ch/en/showcode.php?id=379

    Tevens een csv file kan je toch ook gewoon importeren in Excel of heb je specifieke celopmaak nodig (denk aan kleuren, font en/of berekeningen)?

  3. #3
    Quote Originally Posted by seghele View Post
    CodeTyphon en Lazarus in Windows 10.
    Heb reeds een procedure om een Stringgrid te exporteren naar CSV
    Nogal wiedes, die zit ingebakken in de grids unit (tenzij CT die eruit heeft gesloopt, maar dat lijkt me stug).

    Bart

  4. #4

  5. #5
    Senior Member
    Join Date
    Sep 2004
    Location
    BELGIE(Vilvoorde)
    Posts
    671

    Exclamation

    Bedankt voor de info.
    Wegens mijn laag niveau in programmeren zal ik even tijd nodig hebben om het uit te proberen.

  6. #6
    Senior Member
    Join Date
    Sep 2004
    Location
    BELGIE(Vilvoorde)
    Posts
    671

    Question

    Het pakket FPSpreadsheet is ge´nstalleerd in Lazarus 2.0.10.
    Op de form staat een Stringgrid met enkele gegevens.

    Heb echt steun nodig hoor !
    OLE of geen OLE ?
    Op mijn pc staat LibreOffice.

    Code:
    nit Unit1;
    
    {$mode objfpc}{$H+}
    
    interface
    
    uses
      Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, Grids,
      fpspreadsheetctrls;
    
    type
    
      { TForm1 }
    
      TForm1 = class(TForm)
        btnEXIT: TButton;
        btnEXPORT: TButton;
        StringGrid1: TStringGrid;
        sWorkbookSource1: TsWorkbookSource;
        procedure btnEXITClick(Sender: TObject);
        procedure btnEXPORTClick(Sender: TObject);
    
      private
    
      public
    
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.lfm}
    
    { TForm1 }
    
    procedure TForm1.btnEXITClick(Sender: TObject);
    begin
      Application.Terminate;
    end;
    
    procedure TForm1.btnEXPORTClick(Sender: TObject);
    begin
      if SaveAsExcelFile(StringGrid1,'c:\TEMP\MyExcelFile.xls') then
      ShowMessage('StringGrid saved!');
    end;
    
    procedure*XlsWriteCellLabel(XlsStream:TStream;const ACol,ARow: Word;
    const AValue:string);
    var
      L: Word;
    const
      {$J+}
      CXlsLabel:array[0..5] of Word=($204,0,0,0,0,0);
      {$J-}
    begin
      L:=Length(AValue);
      CXlsLabel[1]:=8+L;
      CXlsLabel[2]:=ARow;
      CXlsLabel[3]:=ACol;
      CXlsLabel[5]:=L;
      XlsStream.WriteBuffer(CXlsLabel,SizeOf(CXlsLabel));
      XlsStream.WriteBuffer(Pointer(AValue)^,L);
    end;
    
    function SaveAsExcelFile(AGrid:TStringGrid;AFileName:string):Boolean;
    const
      {$J+}CXlsBof:array[0..5] of Word=($809,8,00,$10,0,0);{$J-}
      CXlsEof:array[0..1] of Word=($0A,00);
    var
      FStream:TFileStream;
      I,J:Integer;
    begin
      Result:=False;
      FStream:=TFileStream.Create(PChar(AFileName),fmCreate or fmOpenWrite);
      try 
        CXlsBof[4]:=0;
        FStream.WriteBuffer(CXlsBof,SizeOf(CXlsBof));
        for i:=0 to AGrid.ColCount-1 do
        for j:=0 to AGrid.RowCount-1do
        XlsWriteCellLabel(FStream,I,J,AGrid.cells[i,j]);
        FStream.WriteBuffer(CXlsEof,SizeOf(CXlsEof));
        Result:=True;
      finally
        FStream.Free;
      end;
    end;
    
    end.

  7. #7
    Op het Lazarus forum kun denk ik sneller hulp krijgen hiervoor.
    De maintainer van FPSpreadsheet is gebruiker "wp", hij antwoord meestal snel op vragen hierover.

    Bart

  8. #8
    Seghele,
    Wanneer je gebruik maakt van FPSpreadsheet hoef je in het geheel niet met OLE te werken. Het zou ook niet werken tenzij je 'iets' van Microsoft extra installeert. Niet nodig, want met FPSpreadsheet kan je direct een werkblad vullen en bewaren.

    Laten we eerst eens kijken of we je kunnen helpen.
    Ik begrijp dat je een StringList hebt die je als spreadsheet wil bewaren.
    Zit je 'vast' aan de StringList of zou je ook een werkblad (binnen Lazarus) kunnen vullen?
    Ik heb enige jaren geleden met succes met FPSpreadsheet gewerkt. Ik moet eens zien hoe ik dat deed.
    Wanneer ik weet wat je precies wilt (dus niet hoe je het programmeert) kan ik / kunnen we je verder helpen.

    Maarten.

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
  •