Soubory XLS, import dat

Top  Previous  Next

Seznam témat:

řešení

 

Řešení

Příklad č.1

Je využita interní technologie pro přímý import z formátů XLS/XLSX/ODS a jiných. Aplikace MS Excel/OpenOffice nemusí být na stanici nainstalována.

 

var

 Xls: TExcelFile;

 Sheet: TExcelWorkSheet;

 Row: TExcelRow;

 I: integer;

begin

 Xls := TExcelFile.Create;

 try

   //načti soubor

   if not Xls.LoadFromFileWithDialog then Exit;

 

   //vypiš listy

   for I := 0 to Xls.WorkSheets.Count-1 do

     OKBox(Xls.WorkSheets[I].Title);

 

   //vezmi první list

   Sheet := Xls.WorkSheets[0];

 

   OKBox('Počet řádků: '+IntToStr(Sheet.Rows.Count));

   OKBox('Obsah buňky B3: '+Sheet.GetCellText(1, 2));

 

   //vezmi první řádek

   Row := Sheet.Rows[0];

 

   //vypiš hodnoty na prvním řádku

   for I := 0 to Row.Cells.Count-1 do

     OKBox(Format('Obsah buňky A%d: %s', [I+1, Row.Cells[I].Text]));

 finally

   Xls.Free;

 end;

end.

 

 

Příklad č.2

Je využita technologie OLE Automation pro načtení souboru XLS pomocí aplikace MS Excel. Tato aplikace proto musí být na stanici nainstalována.

 

const

 xlLastCell = 11; //konstanta označující poslední buňku

var

 Log: TProgressLog;

 Excel: Variant;

 Workbook,Worksheet,LastCell: Variant;

 S,FName,Kod: string;

 Cena: double;

 I,Counter: integer;

begin

 //inicializuj Excel

 try

   Excel := CreateOLEObject('Excel.Application');

 except

   ErrorBox('Na této stanici není instalován MS Excel. Skript bude ukončen.');

   Exit;

 end;

 

 Log := TProgressLog.Create('Import ceníku', 'Probíhá import...');

 try

   with TOpenDialog.Create(nil) do

   try

     DefaultExt := 'xls';

     Filter := 'Soubory MS Excel|*.xls;*.xlsx';

     if Execute then begin

       FName := FileName;

       Excel.Workbooks.Open(FName);

       Workbook := Excel.Workbooks(ExtractFileName(FName)); //zvol workbook patřící zvolenému souboru

       Log.WriteFmt('Soubor: %s', [FName]);

     end

     else

       Exit;

   finally

     Free;

   end;

 

   //zjisti z jakého worksheetu importovat (pokud jich WB obsahuje víc)

   if Workbook.Sheets.Count > 1 then begin

     S := Workbook.Sheets[1].Name;

     for I := 2 to Workbook.Sheets.Count do S := S + ';' + Workbook.Sheets[I].Name;

     I := ComboBox('Zvolte list pro import', S, 0);

     if I < 0 then Exit; //storno

   end

   else

     I := 0;

 

   Counter := 0;

   Worksheet := Workbook.Worksheets[I+1];

   LastCell := Worksheet.Cells.SpecialCells(xlLastCell);

   Log.WriteFmt('Import zahájen (%d záznamů)', [LastCell.Row]);

   for I := 1 to LastCell.Row do begin

     Kod := Worksheet.Cells(I, 'A').Value;

     Cena := StrToFloat(Worksheet.Cells(I, 'B').Value);

     Log.WriteFmt('  kód: %s, cena: %g', [Kod, Cena]);

     Inc(Counter);

   end;

 finally

   Workbook.Close; //zavři workbook

   Log.WriteFmt('Import dokončen. Importováno %d záznamů.', [Counter]);

   Log.Finish;

   Log.Free;

 end;

end.

 

Související témata