Page 1 of 2 1 2 LastLast
Results 1 to 15 of 20

Thread: Stringgrid naar XLSX

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

    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
    685

    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
    685

    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.

  9. #9
    Senior Member
    Join Date
    Sep 2004
    Location
    BELGIE(Vilvoorde)
    Posts
    685

    Exclamation

    MaartenW bedankt voor je inzet.

    Heb een programma, dank zij het forum NLDelphi(Lazarus), dat goed werkt.
    Het hoofddeel van deze applicatie is een Stringgrig.
    Deze kan ik reeds exporteren naar een CSV bestand.
    Maar het zou boeiend zijn om rechtstreeks een 'xlsx' bestand te genereren.
    Kan persoonlijk een klein beetje programmeren zolang het zeer eenvoudig blijft.
    De code in mijn vorig bericht was een copy/paste en hoeft aangepast te worden.

    Reeds dank.
    Leo

  10. #10
    Mijn adresboek heeft een export naar xls (dus geen xlsx) functie.
    Het betreft de units XlsConvert en SimpleBiff2Writer (de laatse geschreven door wp).

    Misschien kun je er iets mee.

    Bart

  11. #11
    Senior Member
    Join Date
    Sep 2004
    Location
    BELGIE(Vilvoorde)
    Posts
    685

    Exclamation

    Bart,
    Misschien kun je er iets mee.
    Heel vriendelijk, maar te complex voor mijn niveau.
    Zonder aanpassing van mijn "unit1" zal het niet lukken.
    Deze soort code en de inplanting ervan is voor volwaardige programmeurs en niet voor liefhebbers.

    Dank voor de moeite.

  12. #12
    Quote Originally Posted by seghele View Post
    Deze soort code en de inplanting ervan is voor volwaardige programmeurs en niet voor liefhebbers.
    Ik ben ook maar een liefhebber hoor, geen volwaardige programmeur (d.w.z. programmeren is een hobby voor mij, ik heb een volslagen niet aan informatica gerelateerde baan).

    Heel lang geleden had ik een DOS/TP6 unit die naar Excel versie 2 kon schrijven.
    Allemaal procedureel, geen OOP.
    Ben bang dat ik die broncode nergens meer heb.
    Maakte toen ook onderdeel uit van mijn adresboek, dus kun je nagaan hoe lang dat ding al meegaat

    Bart

  13. #13
    Senior Member
    Join Date
    Sep 2004
    Location
    BELGIE(Vilvoorde)
    Posts
    685

    Exclamation

    Ik ben ook maar een liefhebber

    Maar dan toch met een hoog IQ.

    Misschien kan de toekomst mij meer geluk opbrengen om een goede ziel te vinden die een mini programma wil coderen.
    Er hoeft enkel een TStringgrid, met twee ingevulde lijnen en een TButton om de actie 'export naar xlsx' ui te voeren.
    Hoop doet leven !
    Bedankt Bart B.

  14. #14
    Senior Member
    Join Date
    Sep 2004
    Location
    BELGIE(Vilvoorde)
    Posts
    685

    Question

    Bart B,

    Heb alle bestanden van jouw programma in een map van mijn pc geplaatst.
    Bij het compileren krijg ik errors:
    Code:
    Hint: (11030) Start of reading config file C:\Lazarus\fpc\3.2.0\bin\x86_64-win64\fpc.cfg
    Hint: (11031) End of reading config file C:\Lazarus\fpc\3.2.0\bin\x86_64-win64\fpc.cfg
    Free Pascal Compiler version 3.2.0 [2020/07/07] for x86_64
    Copyright (c) 1993-2020 by Florian Klaempfl and others
    (1002) Target OS: Win64 for x64
    (3104) Compiling adres.lpr
    (3104) Compiling main.pp
    (3104) Compiling ControlledAddressBook.pp
    C:\LAZARUS_PROGS\TEST-Adres\ControlledAddressBook.pp(152,3) Note: (6058) Call to subroutine "function GetDebugLogger:TLazLogger;" marked as inline is not inlined
    C:\LAZARUS_PROGS\TEST-Adres\ControlledAddressBook.pp(190,3) Note: (6058) Call to subroutine "function GetDebugLogger:TLazLogger;" marked as inline is not inlined
    C:\LAZARUS_PROGS\TEST-Adres\ControlledAddressBook.pp(191,60) Note: (6058) Call to subroutine "function GetDebugLogger:TLazLogger;" marked as inline is not inlined
    C:\LAZARUS_PROGS\TEST-Adres\ControlledAddressBook.pp(192,25) Note: (6058) Call to subroutine "function GetDebugLogger:TLazLogger;" marked as inline is not inlined
    C:\LAZARUS_PROGS\TEST-Adres\ControlledAddressBook.pp(204,5) Note: (6058) Call to subroutine "function GetDebugLogger:TLazLogger;" marked as inline is not inlined
    C:\LAZARUS_PROGS\TEST-Adres\ControlledAddressBook.pp(210,5) Note: (6058) Call to subroutine "function GetDebugLogger:TLazLogger;" marked as inline is not inlined
    C:\LAZARUS_PROGS\TEST-Adres\ControlledAddressBook.pp(223,3) Note: (6058) Call to subroutine "function GetDebugLogger:TLazLogger;" marked as inline is not inlined
    C:\LAZARUS_PROGS\TEST-Adres\ControlledAddressBook.pp(231,5) Note: (6058) Call to subroutine "function GetDebugLogger:TLazLogger;" marked as inline is not inlined
    C:\LAZARUS_PROGS\TEST-Adres\ControlledAddressBook.pp(251,3) Note: (6058) Call to subroutine "function GetDebugLogger:TLazLogger;" marked as inline is not inlined
    C:\LAZARUS_PROGS\TEST-Adres\ControlledAddressBook.pp(271,3) Note: (6058) Call to subroutine "function GetDebugLogger:TLazLogger;" marked as inline is not inlined
    C:\LAZARUS_PROGS\TEST-Adres\ControlledAddressBook.pp(296,3) Note: (6058) Call to subroutine "function GetDebugLogger:TLazLogger;" marked as inline is not inlined
    C:\LAZARUS_PROGS\TEST-Adres\ControlledAddressBook.pp(356,3) Note: (6058) Call to subroutine "function GetDebugLogger:TLazLogger;" marked as inline is not inlined
    C:\LAZARUS_PROGS\TEST-Adres\ControlledAddressBook.pp(358,3) Note: (6058) Call to subroutine "function GetDebugLogger:TLazLogger;" marked as inline is not inlined
    C:\LAZARUS_PROGS\TEST-Adres\ControlledAddressBook.pp(365,3) Note: (6058) Call to subroutine "function GetDebugLogger:TLazLogger;" marked as inline is not inlined
    C:\LAZARUS_PROGS\TEST-Adres\ControlledAddressBook.pp(367,3) Note: (6058) Call to subroutine "function GetDebugLogger:TLazLogger;" marked as inline is not inlined
    C:\LAZARUS_PROGS\TEST-Adres\ControlledAddressBook.pp(373,3) Note: (6058) Call to subroutine "function GetDebugLogger:TLazLogger;" marked as inline is not inlined
    C:\LAZARUS_PROGS\TEST-Adres\ControlledAddressBook.pp(391,3) Note: (6058) Call to subroutine "function GetDebugLogger:TLazLogger;" marked as inline is not inlined
    C:\LAZARUS_PROGS\TEST-Adres\ControlledAddressBook.pp(519,3) Note: (6058) Call to subroutine "function GetDebugLogger:TLazLogger;" marked as inline is not inlined
    C:\LAZARUS_PROGS\TEST-Adres\ControlledAddressBook.pp(525,3) Note: (6058) Call to subroutine "function GetDebugLogger:TLazLogger;" marked as inline is not inlined
    C:\LAZARUS_PROGS\TEST-Adres\ControlledAddressBook.pp(531,3) Note: (6058) Call to subroutine "function GetDebugLogger:TLazLogger;" marked as inline is not inlined
    C:\LAZARUS_PROGS\TEST-Adres\ControlledAddressBook.pp(537,3) Note: (6058) Call to subroutine "function GetDebugLogger:TLazLogger;" marked as inline is not inlined
    C:\LAZARUS_PROGS\TEST-Adres\ControlledAddressBook.pp(546,3) Note: (6058) Call to subroutine "function GetDebugLogger:TLazLogger;" marked as inline is not inlined
    C:\LAZARUS_PROGS\TEST-Adres\ControlledAddressBook.pp(562,3) Note: (6058) Call to subroutine "function GetDebugLogger:TLazLogger;" marked as inline is not inlined
    C:\LAZARUS_PROGS\TEST-Adres\ControlledAddressBook.pp(573,3) Note: (6058) Call to subroutine "function GetDebugLogger:TLazLogger;" marked as inline is not inlined
    C:\LAZARUS_PROGS\TEST-Adres\ControlledAddressBook.pp(582,3) Note: (6058) Call to subroutine "function GetDebugLogger:TLazLogger;" marked as inline is not inlined
    C:\LAZARUS_PROGS\TEST-Adres\ControlledAddressBook.pp(598,3) Note: (6058) Call to subroutine "function GetDebugLogger:TLazLogger;" marked as inline is not inlined
    C:\LAZARUS_PROGS\TEST-Adres\ControlledAddressBook.pp(726,4) Fatal: (2013) Cannot open include file "navbuttons.lrs"
    Fatal: (1018) Compilation aborted
    Error: C:\Lazarus\fpc\3.2.0\bin\x86_64-win64\ppcx64.exe returned an error exitcode
    Enig idee wat er mis loopt ?

  15. #15
    In de 'foutmeldingen' wordt onderscheid gemaakt tussen 'warnings' en 'fatal errors'. Zo te zien moet er een file met de naam navbuttons.lrs worden geopend, maar wordt die file niet gevonden. De andere meldingen hebben te maken met code die op dit moment 'niet optimaal' is, maar niet onbruikbaar. Misschien dat Bart de file navbuttons.lrs ergens op zijn pc nog kan localiseren.

Page 1 of 2 1 2 LastLast

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
  •