...søgning Office-dokumenter med XQuery, eller et andet XML query sprog gerne XPath eller XSLT, er et populært gentager sig spørgsmålet. Vi mener DataDirect XQuery skal være i din værktøjskasse, når det kommer til at forespørge på Office-dokumenter. Derfor har vi blogges om det et par gange før.
Alt, hvad jeg skal gøre, er at hente strengen værdien af hver celle i
kolonne "A", hvis strengen længde er større end 20 tegn i
længde.
Enhver ved, hvordan de skal bruge XPath for at hente dette fra en Excel
2007-fil?
...
- XQuery dine Office-dokumenter
- XQuery dine Excel-regneark
- Ja ! Du kan til sidst spørge din Office-dokumenter!
- Brug XQuery at tilslutte to Excel-regneark? Hvorfor ikke?
Presenningen's data er struktureret af rækken. Med hver række med angivelse Thenon-tomme celler. Celler indeholder værdier ixmlns = "http://schemas.openxmlformats.org/spreadsheetml/2006/main">
...
|
|
1,23
1
|
CONCATENATE ( "Hej", "verden", "!")
Hej verden!
2
...
...
- For celle A1, t = "s" attribut, angiver, at den er en streng . Som sådan 0 værdi i
element er et indeks i den delte string bordet. - AA1 har samme værdi som A1
- A2 har en numerisk værdi 1,23
- A4 har en streng-baseret formel, som sådan værdien er lagret i cellen sig selv
xmlns = "http://schemas.openxmlformats.org/spreadsheetml/2006/main"
count = "5"
uniqueCount = "3">
Hej verden!
Hej
<; rFont val = "Calibri" />
vidunderlig
<; rFont val = "Calibri" />
verden
!
<; si>
Hej vidunderlige verden!
Så tilbage til spørgsmålet. Det næste spørgsmål er svaret.
1: erklære namespace ssml = "http://schemas.openxmlformats.org/spreadsheetml/2006/main";1. Erklærer den SpreadsheetML namespace
2: erklære variable $ ark: = doc ( "jar: file:/// C:/example.xlsx!/xl/worksheets/sheet1.xml");
3: erklære variable $ sharedStrings: = doc ( "jar: file:/// C:/example.xlsx!/Xl/sharedStrings.xml ");
4: for $ c i $ ark/ssml: regneark/ssml: sheetData/ssml: række/ssml: c [kampe (@ r, "^ A [0-9 ]+")]
5: Lad $ str: =
6: if ($ c/@ t =" s ") derefter
7: string - slutte (($ sharedStrings/ssml: SST/ssml: SI) [xs: heltal ($ c/ssml: v) 1]//ssml: t ",")
8: andet
9: String ($ c/ssml: v)
10: hvor string-længde ($ str)> 20
11: vende tilbage
12:{$ str)
2. Angiver den XML-dokument, der repræsenterer de første ark i regnearket
3. Angiver den XML-dokument, der indeholder de delte strings tabellen
4. Få alle celler i en kolonne, bruger vi et regulært udtryk for at filtrere alle celler, der starter med et A, efterfulgt af en række alfa numeriske tegn
5.
6. Test, hvis cellen indeholder en strengværdi eller ej
7. Lookup strengværdien i den delte strings bordet. Da indekset i SpreadsheetML er nul-baseret vi har brug for at øge indekset ved en før adgang til n-th
8.
9. Få værdien i cellen selv
10. Som angivet i det oprindelige spørgsmål, kun få værdier på mere end 20 tegn
11.
12. Retur cellen række/søjle antallet og den faktiske værdi Når alt kommer til alt denne forespørgsel er længere end man kunne have troet i første omgang, da de snarere simpelt spørgsmål. Men alle kompleksitet er der grund til Open Office XML standard. Kan du forestille dig at skrive det tilsvarende i for eksempel Java? Ud af anvendelsesområdet for dette indlæg, men løsningen kan nemt blive udvidet, for eksempel til at søge alle ark i regnearket. Nogen ønsker at prøve og skrive det samme for regneark gemmes i OpenDocument Format?
Ingen kommentarer:
Send en kommentar