Avatar billede nca Juniormester
25. juni 2012 - 13:53 Der er 7 kommentarer og
1 løsning

Læse i Excel 2010 (xlsx) fra Delphi 7

Jeg har i et par år med stor glæde vha. XLSMini læst data fra Excel 2003 (97 - 2003 format). Efter overgang til Excel 2010 og en manglende opdatering af XLSMini har jeg brug for lidt hjælp til at hente data ud fra en Excel fil.
Jeg kender strukturen af filen. Jeg ved dog ikke hvor mange rækker, filen indeholder. Typisk indeholder den under 50 rækker.
Jeg har kikket på ADO, men den fejler også ved xlsx filer.
Avatar billede jokkejensen Novice
25. juni 2012 - 14:09 #1
rename til zip, pak ud, og kig i xml

/J
Avatar billede nca Juniormester
25. juni 2012 - 14:53 #2
Du har vist glemt at vedlægge filen ;-)
Avatar billede jokkejensen Novice
26. juni 2012 - 18:27 #3
Nej tag en xslx fil, omdøb den til *.zip, kig i wooksheet folderen. Der er massere af  andre beskrivende mxl filer også.

Brug så xpath til at hente dine noder ud.

/J
Avatar billede nca Juniormester
26. juni 2012 - 19:40 #4
Så er det vist lige så nemt at indlæse den i Excel og gemme den i det ældre format.
Jeg kan modtage data i en csv-fil, en xls-fil eller i en xlsx-fil og jeg vil gerne kunne behandle data i mit program uanset formatet, derfor er datakonvertering uden for programmet ikke ønskværdi.
Avatar billede skovjuul Nybegynder
27. juni 2012 - 14:34 #5
Hola

Jeg har netop selv haft brug for at hente data fra xlsx filer, så jeg håber du kan bruge noget af det her:
http://testarea.skovjuul.dk/frmmain.pas

Jeg har sat en TADOConnection op som hedder conExcel, en TADOQuery som hedder qExcel med property "connection" sat til conExcel og endelig en TDataSource som har sin "Dataset" sat til qExcel.

Ovenstående viser hvordan du får fat i et bestemt worksheet (som du kender navnet på) og får fat på de enkelte rækker og felter.

Du kan også nemt finde på google hvordan du finder alle worksheets i excel-arket.

Med ovenstående opsætning kan du bruge excel-arket som du ville enhver anden database. Et forkortet uddrag fra kode jeg selv bruger:

sqlstring := 'select F1 as paxdate, F3 as event from [forecast$] where F1 >= ' + floattostr(today) +' and F1 <= ' + floattostr(today+1);//to correspond with datetime-format in excel
  qExcel.SQL.Add(sqlstring);
  try
  try
    qExcel.Open;
    qExcel.First;
    while not qExcel.Eof  do begin
      sEvent := qExcel.FieldByName('event').AsString;
      qExcel.Next;
    end;
  except
  end;
  finally
  end;

Håber noget af det kan bruges.
Avatar billede nca Juniormester
27. juni 2012 - 20:09 #6
Til SkovJuul
Det ser meget spændende ud. Jeg håber,at jeg får tid til at kikke på det i morgen på arbejdet.
Avatar billede nca Juniormester
23. september 2012 - 19:39 #7
Til skovjuul
Vil du ikke lægge et svar?
Jeg er løbet ind i en ny stilling og ved ikke hvornår, jeg får tid til at kikke på programmeringen igen, men jeg vil gerne tildele dig pointene.
Avatar billede skovjuul Nybegynder
23. september 2012 - 20:53 #8
Tak for det.
God fornøjelse med det nye job.

Hygge.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester