Autor Téma: Načtení souboru XLS  (Přečteno 2473 krát)

Offline map

  • Nováček
  • *
  • Příspěvků: 22
  • Karma: 1
Načtení souboru XLS
« kdy: 24-09-2012, 13:20:15 »
Zdravím,

dle článku na Delphi.cz "Export do XLS bez excelu v Delphi" http://delphi.cz/post/Native-Export-XLS-bez-excel-Delphi.aspx jsem vytvořil soubor en.xls. A tento soubor bych potřeboval načíst do programu. Zkoušel jsem načíst XLS soubor pomocí ADO.
Do AdoConnection jsem nastavil connection string 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Soubor.xls;Extended Properties=Excel 8.0;'. Do AdoQuery jsem napojil AdoConnection, nastavil jsem AdoQuery.SQL.Text := 'SELECT * FROM [en$]', následně jsem otevřel příkazem AdoQuery.Open a nastala chyba "EOleException with message 'Externí tabulka není v očekávaném formátu'.

Dle článku se XLS soubor vytváří ve starším formátu a to asi bude parně příčina problému s načtením tohoto XLS souboru pomocí ADO.

Bude lepší vytvářet soubor XLS jinou knihovnou/komponentou (potředuji export Dataset do XLS)?
Nebo jiným způsobem otevírat/načítat XLS soubor? Nebo mám špatně connection string?

Prosím o radu.
Díky, Martin
Delphi XE2 prof.

Offline Jan Fiala

  • Příspěvků: 49
  • Karma: 0
    • PSPad editor
Re:Načtení souboru XLS
« Odpověď #1 kdy: 24-09-2012, 13:54:41 »
A co kdybys ten soubor pomoci ADO i ukladal?
Pokud má strukturu dat - hlavicku + data a nemas tam zadne nestandardni vyplnovani (sem tam neco), pak by to nemel byt problem.

Offline map

  • Nováček
  • *
  • Příspěvků: 22
  • Karma: 1
Re:Načtení souboru XLS
« Odpověď #2 kdy: 24-09-2012, 16:41:09 »
>> A co kdybys ten soubor pomoci ADO i ukladal?
Kdzyž vyplním do connection stringu soubor XLS, který neexistuje, tak se mi podaří otevřít AdoConnection. Ale seznam AdoConnection.GetTableNames(...) je prázdný a zasekl jsem se na tom, jaký SQL dotaz nastavit do AdoQuery.SQL.Text := 'SELECT * FROM [neco$]'.

Díky, Martin

Offline zdenek

  • Plnoletý
  • ***
  • Příspěvků: 134
  • Karma: 8
Re:Načtení souboru XLS
« Odpověď #3 kdy: 24-09-2012, 16:51:39 »
Tedy jít na xls přes ado, tak to je maso.

Ve firmě jsme ve všech aplikacích opustili automatizaci přes com už dávno. Používáme ji jedině na otevření již hotového excelu.

Docela dobrá komponenta je od Axolot (www.axolot.com) - TXLSReadWrite. Používám ji už léta a je výborná rychlá a umí toho opravdu hodně. Jen není zdarma.

Offline map

  • Nováček
  • *
  • Příspěvků: 22
  • Karma: 1
Re:Načtení souboru XLS
« Odpověď #4 kdy: 24-09-2012, 17:04:44 »
Už jsem na to přišel:

  // Vytvoreni sesitu Sheet1
  AdoQuery1.SQL.Text := 'create table Sheet1 (id integer, txt varchar(20))';
  AdoQuery1.ExecSQL;

  // vlozeni jednoho radku do sesitu
  AdoQuery1.SQL.Text := 'insert into Sheet1 values (1, ''abc'')';
  AdoQuery1.ExecSQL;

------------------------

Potřebujeme převést data z TDataset do XLS. V naší aplikaci v D2007 jsme měli funkci. Přechodem na DXE2 přestala fungovat. Tak hledáme rychlé řešení. Na uvedenou komponentu se podívám, jen škoda že je placená. Díky za tip.
Martin

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 576
  • Karma: 25
Re:Načtení souboru XLS
« Odpověď #5 kdy: 24-09-2012, 19:38:04 »
Tedy jít na xls přes ado, tak to je maso.

Proč? Lepší než třeba přes OLE a očekávat, že všude budou nainstalované office.

Offline zdenek

  • Plnoletý
  • ***
  • Příspěvků: 134
  • Karma: 8
Re:Načtení souboru XLS
« Odpověď #6 kdy: 24-09-2012, 20:10:03 »
Tak OLE je nejhorší možnost. Jsem malinko zaujatý proti ADO, o ODBC nemluvě.

Delphi aplikace jsou krásné nezávislostí na okolí a provázat ji např s ADO je skoro škoda. Záleží ale na každém vývojáři, jak se rozhodne resp. jaké má možnosti (finanční/koncepční/časové). Nesmíte brát můj příspěvěk tak striktně.  :)

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 576
  • Karma: 25
Re:Načtení souboru XLS
« Odpověď #7 kdy: 24-09-2012, 20:57:03 »
Tak OLE je nejhorší možnost. Jsem malinko zaujatý proti ADO, o ODBC nemluvě.

Takže OLE ne, ADO ne, zajímalo by mě, jak bys to teda četl? Psal vlastní parser toho souboru? ADO je celkem dobré v tom, že máš jednotný přístup bez ohledu na to, jestli se připojuješ k Excelu nebo SQL serveru.

Offline zdenek

  • Plnoletý
  • ***
  • Příspěvků: 134
  • Karma: 8
Re:Načtení souboru XLS
« Odpověď #8 kdy: 24-09-2012, 21:23:36 »
Přes nativní komponentu (třeba ten XLSReadWrite).