Tipy a triky v Delphi, díl 82.

Minule byla řeč o zápisu tabulky do formátu Excelu a dnes si naše povídání dokončíme.
Pro připomenutí si řekněme, že minule jsme si ukazovali způsob využívající technologie OLE. To mělo tu výhodu, že o zápis souboru se vlastně postaral sám Excel a tím by měla být zaručena jistá správnost a korektnost tohoto postupu. Nevýhodou je to, že uživatel musí mít Excel nainstalován, protože jinak nemůže tento způsob fungovat.

Dnešním tématem je vlastně tentýž příklad jako minule, ale tentokrát si ukážeme variantu bez použití OLE. Možná tedy nebude tak "čistá" jako s využitím samotného Excelu, ale výhodou je právě to, že není nutné mít Excel nainstalován.

Na formulář umístíme stejné objekty jako minule a lišit se bude pouze samotná funkce pro zápis souboru:

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 SaveAsExcelFile2(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 - 1 do
        XlsWriteCellLabel(FStream, I, J, AGrid.cells[i, j]);
    FStream.WriteBuffer(CXlsEof, SizeOf(CXlsEof));
    Result := True;
  finally
    FStream.Free;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if SaveAsExcelFile2(StringGrid1, `c:\Soubor.xls`) then ShowMessage(`StringGrid ulozen!`);
end;

Všimněte si drobné změny v parametrech funkce. Při porovnání s příkladem z minula zjistíte, že nám zmizel parametr pro název listu. Další výraznou změnu objevíte, pokud porovnáte při ukládání stejné tabulky výsledné velikosti souborů vytvořených příkladem z dneška a z minula. Funkce využívající OLE produkuje "pravé" XLS soubory a proto jsou v porovnání s těmi "nepravými" vytvořenými dnešní funkcí poněkud větší.

Který ze způsobů vám bude více vyhovovat nechám na vás. Osobně bych dal přeci jen přednost metodě OLE, ale pro případ, že uživatel nemá Excel by bylo vhodné obě metody zkombinovat a nebo nechat rozhodnutí přímo na uživateli vaší aplikace.

Váš názor Další článek: Tele2 sníží výrazně ceny, aby mohla konkurovat ADSL

Témata článku: Software, Programování, Trik, Pointer, Díl


Určitě si přečtěte

Jak dopadl velký den Applu s náloží novinek: Sledujte, co letos připravil

Jak dopadl velký den Applu s náloží novinek: Sledujte, co letos připravil

** Apple večer představil novinky ** Ukáže nové operační systémy, ale čekala se i nová zařízení ** Začíná vývojářská konference Applu WWDC 2018

Karel Javůrek | 87

Alan Turing: Genius, který matematicky stvořil počítač

Alan Turing: Genius, který matematicky stvořil počítač

Řešením matematického problému se dostal k modelu teoretického stroje, který nese jeho jméno a je základem logiky univerzálních počítačů.

Pavel Tronner | 56

Nová zbraň Microsoftu proti iPadu: Levný tablet Surface Go bude stát jen deset tisíc

Nová zbraň Microsoftu proti iPadu: Levný tablet Surface Go bude stát jen deset tisíc

** Microsoft představil nový tablet Surface Go ** Nový model zaujme nízkou cenou, ale schopnostmi zařízení Surface ** Microsoft nepoužil čip ARM, ale klasický procesor od Intelu 

Karel Javůrek | 116

Šmírovačka kamerami Googlu: Koukněte se, co nového zachytily na Street View

Šmírovačka kamerami Googlu: Koukněte se, co nového zachytily na Street View

Google stále fotí celý svět do své služby Street View. A novodobou zábavou je hledat v mapách Googlu vtipné záběry. Podívejte se na výběr nejlepších!

redakce | 44

Portál občana už funguje. Na státní web vypadá až překvapivě použitelně

Portál občana už funguje. Na státní web vypadá až překvapivě použitelně

** Portál občana už funguje, vyřídíte na něm první požadavky ** Funkce se budou postupně rozšiřovat ** Web je docela moderní a přehledný

David Polesný | 65

Nechcete platit za Total Commander? Těmito bezplatnými programy ho můžete nahradit

Nechcete platit za Total Commander? Těmito bezplatnými programy ho můžete nahradit

** Total Commander je na Windows takřka legendou ** Licence však stojí více než tisíc korun ** Našli jsme pro vás deset alternativ dostupných zdarma

Karel Kilián | 140


Aktuální číslo časopisu Computer

Velký test 18 bezdrátových sluchátek

Vše o přechodu na DVB-T2

Procesory AMD opět porážejí Intel

7 NVMe M.2 SSD v přímém souboji