lørdag den 17. januar 2009

Henter celler, v?iskalaer og tabeller fra MS Excel. xlsx regneark

Nu og da jeg har brug for at skrive applikationer, der bruger data gemt i Excel-regneark. Som Marc har allerede dr?t i andre stillinger , den nye Open Office XML-format, der bruges af de seneste udgivelser af Excel, Word og PowerPoint ?er d? for muligheden for at bruge XML-v?t? til at manipulere Office dokumenter uden at g?ennem smerter af at lede efter og ved anvendelse af konverteringsfaktorer forsyningsselskaber.
For nylig var jeg n?til at l?et problem involverer henter en henvisning tabel fra et regneark, til bedre at forst?hvordan du kan hente data fra regneark serialized som OOXML, jeg s? for nogle dokumentation beskriver strukturen i OOXML-filer, som ikke er helt trivielle. Jeg endte med at finde denne nyttige i MSDN, der beskriver, hvordan man direkte adgang OOXML dokumenter for at opfylde et h?fuld om operationer, der anvender VB eller C #, og is? hvordan hente celle v?ier .
Da en OOXML regneark, et regneark navn og en celle-id'et, hentet cellev?ien indeb?r dybest f?nde trin:
  • Da projektmappen, skal du finde regneark id der svarer til den angivne navn
  • Da regnearket id, finde tilsvarende regneark dokument
  • Giv regnearket dokument, skal du finde den celle, der svarer til den ?ede col/r?e par
  • I betragtning af den celle, enten hente cellev?ien direkte hvis de er tilg?elige eller lookup cellen v?i i et dokument, der indeholder en liste over delte/samlepr? strings

Som du kan se, hvad du ville overveje en forholdsvis enkel opgave er ikke s?nkelt. MSDN artiklen giver l?nger i VB og C #, og du kan se, hvordan koden udseende her .
Selvf?lig kan du l?det samme problem ved hj? af XQuery , og som man kunne (burde?) forventer, at g?det i XQuery er langt enklere - overvejer vi at manipulere og navigere XML dokumenter:
Du kan teste funktionen med en udtryk som:
Ansporet af denne enkle test, jeg har brugt mere tid fors? at opn?hvad mit oprindelige m?var: hentning af tabeller og v?iskalaer i mit regneark. Resultatet er de XQuery knyttet til denne post , at jeg er udviklet og testet mod DataDirect XQuery , i till?til de get-celle () -funktion, der er to top-niveau funktioner, som jeg fandt s?igt nyttigt:
Begge funktioner returnere data i et simpelt XML format kontrolleres af get-r?e-impl () funktion kan du ?re den m?, som du vil, selvf?lig.
Hvis du har t?odighed til at g?ennem XQuery , vil du opdage, at jeg var n?til at skabe et par interessante funktioner til at konvertere numeriske col/r?e v?ier til/fra den typiske bogstaver/tal notation brugt i regneark ( "AB21" -> 28,21; 512,99 -> "SR99"); det er sandsynligvis den v?ntligste forskel mellem de funktioner manipulere v?iskalaer/tabeller og en manipulering enkelt celler. Jeg er sikker p?at der er mere intelligente og performant m?r at opn?t lignende resultat (m?e leger med regul? udtryk), men det var godt nok udgangspunktet for mig.
Forh?ntlig kan du finde disse XQuery funktioner som nyttige som jeg gjorde, og forh?ntlig vil du finde nogle bugs jeg savnede;)

data - fra-spreadsheet.xquery

Ingen kommentarer:

Send en kommentar

Bemærk! Kun medlemmer af denne blog kan sende kommentarer.