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í, Díl, Trik, Pointer


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

Kde se bere elektřina v zásuvce? Poznejte 10 tajemství venkovních stožárů s dráty

Kde se bere elektřina v zásuvce? Poznejte 10 tajemství venkovních stožárů s dráty

Elektřina se vyrábí v elektrárnách, ale do zásuvek v našich domovech to pak má ještě hodně daleko. Dnes se na tuhle dlouhou cestu podíváme.

David Polesný | 82

Tohle tak jednou zažít: Nová vzducholoď Airlander 10 s prosklenou podlahou

Tohle tak jednou zažít: Nová vzducholoď Airlander 10 s prosklenou podlahou

** Airlander 10 nabídne plavby vzduchem v interiéru s prosklenou podlahou ** Luxusní vzducholoď byla původně vyvíjena pro vojenské účely ** Počítá se s třídenními „kochacími“ výlety za poznáním

Karel Kilián | 7

Solární panely v silnici vypadaly jako dobrý nápad. V praxi se ale neosvědčily

Solární panely v silnici vypadaly jako dobrý nápad. V praxi se ale neosvědčily

** Nápad použít na silnice místo asfaltu solární panely vypadal slibně ** Praktické testy však odhalily celou řadu nevýhod ** Nejhorší je směšná účinnost ve srovnání s fotovoltaickou elektrárnou

Karel Kilián | 62


Aktuální číslo časopisu Computer

Jak vytvořit a spravovat vlastní web

Velký test herních klávesnic a DVB-T2 tunerů

Vše o formátu RAW

Vybíráme nejlepší základní desku