Tipy a triky v Delphi, díl 81.

Často je potřeba data z našich aplikací uložit do takového formátu, aby šla zpracovávat i v jiných aplikacích. Dnes si ukážeme, jak vytvořit soubor Excelu.
Jako zdroj dat nám poslouží komponenta StringGrid, která celkem věrně připomíná tabulku Excelu, takže export dat právě z této komponenty bude asi nejčastější a nejpoužívanější. Proto vložte na formulář právě tuto komponentu a její vzhled si klidně upravte dle libosti, na něm nezáleží.

Tabulku je samozřejmě nutné naplnit daty, jinak nemá celkem smysl ji nikam exportovat. V buňkách mohou být uloženy nejen přímo hodnoty či texty, ale rovněž vzorce či přímo funkce, které Excel obsahuje. V samotné komponentě StringGrid pochopitelně výsledky výpočtů funkcí neuvidíte, ale po vyexportování tabulky do souboru XLS a otevření v Excelu bude vše fungovat. Pokud jste ovšem neudělali chybu v zápisu funkce.

A dostáváme se k hlavní části programu a sice k samotnému uložení dat do XLS souboru. To lze provést jako obvykle několika způsoby. První z nich využívá technologii OLE, kterou snad nemusím zbytečně popisovat a k fungování našeho příkladu tím pádem bude nutné mít Excel v počítači nainstalován. To je bohužel drobná vada na kráse tohoto způsobu, ale na druhou stranu lze zase předpokládat, že uživatel, který bude chtít z vaší aplikace data vyexportovat právě do Excelu, jej má i nainstalován. Zároveň je zde jistá záruka správnosti výsledného souboru, když jej vlastně vytváří sám Excel. Příště si ukážeme i variantu exportu dat, ke které nebude Excel potřeba.

Ale to až příště, teď zpět k našemu zdrojovému kódu. Jako obvykle se bude skládat z hlavní funkce (a jedné pomocné) a dále ukázky použití v podobě události stisku tlačítka. Poslední nutnou věcí je knihovna ComObj, kterou přidejte do seznamu.

function RefToCell(ARow, ACol: Integer): string;
begin
  Result := Chr(Ord(`A`) + ACol - 1) + IntToStr(ARow);
end;

function SaveAsExcelFile(AGrid: TStringGrid; const ASheetName, AFileName: string): Boolean;
const
  xlWBATWorksheet = -4167;
var
  Row, Col: Integer;
  GridPrevFile: string;
  XLApp, Sheet, Data: OLEVariant;
  i, j: Integer;
begin
  Data := VarArrayCreate([1, AGrid.RowCount, 1, AGrid.ColCount], varVariant);
  for i := 0 to AGrid.ColCount - 1 do
    for j := 0 to AGrid.RowCount - 1 do
      Data[j + 1, i + 1] := AGrid.Cells[i, j];
  Result := False;
  XLApp := CreateOleObject(`Excel.Application`);
  try
    XLApp.Visible := False;
    XLApp.Workbooks.Add(xlWBatWorkSheet);
    Sheet := XLApp.Workbooks[1].WorkSheets[1];
    Sheet.Name := ASheetName;
    Sheet.Range[RefToCell(1, 1), RefToCell(AGrid.RowCount, AGrid.ColCount)].Value := Data;
    try
      XLApp.Workbooks[1].SaveAs(AFileName);
      Result := True;
    except
      ShowMessage(`Chyba pri ukladani dat!`)
    end;
  finally
    if not VarIsEmpty(XLApp) then
    begin
      XLApp.DisplayAlerts := False;
      XLApp.Quit;
      XLAPP := Unassigned;
      Sheet := Unassigned;
    end;
  end;
end;

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

Parametry funkce jsou myslím dostatečně jasné. Prvním z nich je StringGrid, který chceme uložit. Druhý parametr je název listu, který bude vytvořen v sešitu Excelu. Třetím parametrem není nic jiného než název vyexportovaného souboru.

A to je pro dnešek vše. Příště si tedy zkusíme podobný příklad, ale tentokrát už bez Excelu.

Diskuze (13) Další článek: Konec WinAmpu 3 a návrat WinAmpu 2.x?

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


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

Nový iPhone a další novinky Applu: sledujte, na co se zase budou stát fronty

Nový iPhone a další novinky Applu: sledujte, na co se zase budou stát fronty

** Apple dnes představuje nové produkty v čele s novými iPhony ** Nemusí zůstat jen u telefonů, čekají se i další novinky ** Úvodní přednáška začíná v 19:00 našeho času

David Polesný | 57

Co udělat s novým počítačem s Windows, než ho začnete používat

Co udělat s novým počítačem s Windows, než ho začnete používat

** Čerstvě zakoupený počítač je vhodné trochu připravit ** Věnujte pozornost instalaci a předinstalovaným aplikacím ** Zamyslete se nad zálohou a antivirem

David Polesný | 83

Nejlepší hardware: Skládáme nenáročnou sestavu i extrém na hry

Nejlepší hardware: Skládáme nenáročnou sestavu i extrém na hry

** Poradíme, jaký se teď vyplatí koupit hardware ** Procesory, desky, paměti, grafické karty... je z čeho vybírat ** Počítač ale nemusíte skládat, ukážeme i výhodné hotové počítače

Stanislav Janů | 8

Osudová havárie Concordu: Před 18 lety přišel konec nadzvukových dopravních letadel

Osudová havárie Concordu: Před 18 lety přišel konec nadzvukových dopravních letadel

** Concorde byl nejrychlejším dopravním letadlem ** Atlantik dokázal přeletět za cca 3 až 3,5 hodiny ** Před osmnácti lety tragická havárie provoz těchto letadel prakticky ukončila

David Polesný, Jiří Černý | 39



Aktuální číslo časopisu Computer

Jak nastavit a ochránit nový mobil

Velký test bezdrátových klávesnicí a myší

Počítače v roce 2019

Srovnání barevných laserových multifunkcí