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.