• 12 odgovora
  • 4.760 pregleda
export u .xls, bez excella 12.05.2010. u 10:50 · pre 200 meseci #1
Koristim D2007 i želeo bih da uradim export podataka nekog DBGrida u .xls fajl (ili neki drugi format koji je podržan od strane excella).

Ali, naravno ali, da export može da se uradi i ako na računaru ne postoji instalirano ništa od MS Office proizvoda, tj. da se uradi praktično snimanje fajla u .xls formatu.

Naišao sam na forumu na neku staru ideju o prebacivanju podataka u html tabelu koja se otvara u Excellu, ali tragam za elegantnijim rešenjem.

Unapred se zahvaljujem.
Re: export u .xls, bez excella 12.05.2010. u 11:50 · pre 200 meseci #3
Iz kog razloga je neophodan .xls? Daleko jednostavnije je da se napravi .txt u kome su polja razdvojena tab-ovima, a linije CRLF. Posle toga je trivijalno da se iz Excel-a uveze takav fajl.

Druga mogućnost je ona koju je već kolega predložio, ali komponenta košta oko 500 Evra.

Treća mogućnost je OpenOffice i OLE/COM, ali nema dodatnih finansijskih troškova.

[Ovu poruku je menjao sasaz2008 dana 12.05.2010. u 13:08 GMT+1]
Re: export u .xls, bez excella 12.05.2010. u 21:43 · pre 200 meseci #4
Naravno da nije neophodan .xls fajl, što sam i napisao u postu.

Što se tiče komercijalnih varijanti, za sada to ne bi bila moguća opcija (naročito ako je iznos 495EUR).

Što se tiče TAB delimited .txt fajla, što se tiče naprednijih korisnika, to je u redu, ali što se tiče običnog korisnika, njega zanima ‚‚da to klikne, i da mu se to otvori‚‚ , tako da gledam što jednostavniju varijantu za korisnika.

Što se tiče OpenOffice-a, to nije problem, ali, suština svega je da se napravi export podataka DBGrida u određeni format, bez da korisnik ima instalirano MS Office, Open Office.
Re: export u .xls, bez excella 13.05.2010. u 06:01 · pre 200 meseci #5
Može .odt koji je Open Office fajl a trebalo bi da može da ga otvara i MS Office. To je u suštini zip fajl i uglavnom se može, recimo, samo pisati i čitati content.xml, dopisujući ili čitajući vrednosti u ćelijama.
Re: export u .xls, bez excella 13.05.2010. u 07:09 · pre 200 meseci #6
prginfo,

Format .xls fajla je izuzetno kompleksan, tako da bez detaljnijeg upoznavanja sa strukturom teško da se može bilo šta raditi bez OpenOffice-a ili MS Office-a.

OO nudi snimanje u .xml formatu koji podržava MS Excel 2003 (mada u verziji OO koju koristim prijavljuje grešku prilikom kreiranja fajla). Možeš takodje da probaš ovo što je tkaranovic sugerisao (dearhiviranje/izmena/arhiviranje .ods/.odfs fajlova), mada u tom slučaju korisnik bi trebalo da ima najnovije verzije ili OO ili MS Office-a da bi se otvaralo "na klik", uz napomenu da par bajtova header-a tako kreirane arhive mora da bude malo izmenjeno... Problem koji je u ovim varijantama očigledan, je da korisnik mora da ima minimum neophodne verzije MS Office odnosno OO koje bi mu omogućile čitanje tih fajlova. Novije verzije MS Office po default-u snimaju u OO stilu (arhiva sa mnogo .xml fajlova i subdirektorijuma)...

Na kraju, da li je sva ova komplikacija vredna truda, umesto snimanja u .txt fajl?!


[Ovu poruku je menjao sasaz2008 dana 13.05.2010. u 08:28 GMT+1]
Re: export u .xls, bez excella 13.05.2010. u 07:44 · pre 200 meseci #7
Ako slogove odvojis zarezima i snimis u CSV ekstenziji (Comma-Separated Variables), kao obican ASCII fajl, otvorices ih direktno Excel-om. Kasnije snimaj u cemu god.

Manipulaciju EXCEL fajlom mozes ostvariti i kroz 'obican' ADO, primer:
http://www.elitesecurity.org/p2084542

Doduse, nisam nikada pokusao kreiranje samog fajla, ali verujem da bi i to moglo. Ako ne moze, onda prosto napravi jedan prazan XLS fajl, strpaj ga nekako uz projekat (kao resurs, kao nezanisan fajl, kako god) i koristi ga kao pelcer.
Re: export u .xls, bez excella 13.05.2010. u 08:49 · pre 200 meseci #8
Uzgred, lično bih CSV zaobišao. U prošlosti, bilo je previše problema: komponente, neodgovarajući separator za tekst polje (" ili ' - primer, ime firme: A.D. "Komerc", -'Beograd i sl.), Unicode... Korisnik u tekst polju same aplikacije može da piše šta hoće, ali je CSV suviše restriktivan po ovom pitanju...
Re: export u .xls, bez excella 13.05.2010. u 09:05 · pre 200 meseci #9
Ja odavno koristim upravo csv, separator sloga moze da bude i '|'(sto ja koristim) i onda tesko da ce da bude
problema. OOffice uglavnom uvek pita sta je separator slogova i da li je string ogranicen navodnicima.
Posto je krajnje jednostavno iz bilo kog alata-jezika zapisati ovako nesto u fajl, mislim da je csv vise nego
logican izbor.
Kada su u pitanju nasi karakteri, naravno da problema moze da bude puno, narocito ako imas korisnike koji
koriste razlicite OS a csv se recimo generise iz nekog upita, ali to je problem firme koja ima racunare sa
razlicitim sistemima ili arhitekturom. U praksi, ja koristim openSuSe kao server na kom je baza i imam preko 200
klijenata, a koristimo openSuSe, Xp i Vista, zato ne dozvoljavam svakom azuriranje osnovnih podataka i tako
izbegavam ovaj problem. Do sada nisam imao vecih problema.
Re: export u .xls, bez excella 13.05.2010. u 14:34 · pre 200 meseci #10
Taj CSV je tekst fajl a, koliko sam probao, za razliku od tekst fajla može se učitati bez greške. Može da ima i ćirilicu i latinicu odnosno kao unikod da se piše i čita. Prilog poruke je unikod.csv.
Re: export u .xls, bez excella 13.05.2010. u 14:57 · pre 200 meseci #11
CSV fajl ima problem sa List separatorom kada se otvara u Excelu. Ako je racunar podesen na US Localization list separator je "," dok kod nas je ";". Excel postuje List separator iz Regional Settings-a cak i za CSV fajl.
Potpis
if it walks like a duck and quacks like a duck, it could be a dragon doing a duck
impersonation.
Re: export u .xls, bez excella 13.05.2010. u 16:40 · pre 200 meseci #12
Može uz CSV fajl da ide konverter koji će prvo da parsira CVS fajl i zameni separator u taj koji koristi Excel. Recimo može da radi u konzoli:


Code:

program ZaExcelUvozPrvoKonvertovanje;

{$APPTYPE CONSOLE}

uses
  SysUtils;

begin
  try
    writeln('List separator je: ' + SysUtils.ListSeparator);
    writeln('Konvertovanje...');
    //...
    readln;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme