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í, Díl, Drobná vada, Trik


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

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

Roboruka se 100 let učila otočit kostičku. Skutečné A.I. se možná nikdy nedočkáme

Roboruka se 100 let učila otočit kostičku. Skutečné A.I. se možná nikdy nedočkáme

** Strojové učení v posledních deseti letech dokázalo divy ** Používáme ho dnes každý den nejen ve vyhledávači ** A přesto se člověku nepřibližuje ani náznakem

Jakub Čížek | 59

Jak funguje největší akumulátor v Česku: podívejte se do elektrárny Dlouhé Stráně

Jak funguje největší akumulátor v Česku: podívejte se do elektrárny Dlouhé Stráně

** Přečerpávací vodní elektrárna Dlouhé stráně je obdivuhodné technické dílo ** Stejná turbína vyrábí elektřinu i tlačí vodu zpět do horního jezera ** Strojovna elektrárny je zabudována v podzemí

David Polesný | 35

Vyzkoušeli jsme eObčanku a přihlásili se s ní na weby úřadů. Vážně to funguje!

Vyzkoušeli jsme eObčanku a přihlásili se s ní na weby úřadů. Vážně to funguje!

** Máme eObčanku, máme čtečku, vyzkoušeli jsme přihlášení na weby úřadů. ** Objevily se drobné problémy, podařilo se nám je vyřešit. ** Používání eObčanky pro online identifikaci je velmi pohodlné.

Marek Lutonský | 35


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