Soubory XLS, import dat |
Top Previous Next |
Seznam témat:
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
|