Tuesday, September 27, 2016

Verstaan die excel xls binary lêerformaat

Verstaan ​​die Excel xls Binary Lêerformaat Opsomming: Meer inligting oor die MS-XLS binêre lêer formaat wat gebruik word in voorheen vrygestel Microsoft Excel produkte. Ingesluit in hierdie artikel is die basiese strukture en sleutelkonsepte vir interaksie met 'n lêer formaat programmaties. Die aanbevole manier om die meeste ontwikkeling take uit te voer in Microsoft Excel is die Excel Primêre Interop Assemblies gebruik. Dit is 'n versameling van klasse wat 'n volledige voorwerp model voorsiening te maak vir die werk met Microsoft Excel. In hierdie artikel reeks handel slegs met 'n gevorderde scenario, soos waar Microsoft Excel nie geïnstalleer is. Sleutelkomponente van die MS-XLS lêer formaat Die rekord beskrywings in die [MS-XLS]: Excel Binary Lêerformaat (XLS) Struktuur spesifikasie sluit nie melding gemaak van die Rekord Tipe (RT) en Telling van Bytes (CB) waardes wat deel uitmaak van die eerste vier grepe van die rekord . Vir meer inligting, sien afdeling 2.1.4 van die MS-XLS spesifikasie. Dit is die hoofstrome, substreams, en rekords in 'n MS-XLS-formaat lêer. Spesifieke byte plekke binne 'n rekord getel vanaf die einde van die veld CB. Die Werkboek stroom is die primêre stroom in 'n XLS lêer. Dit bevat verskeie substreams, elk van wat begin met 'n begin van die lêer (BOF) rekord en eindig met 'n lêer einde (EOF) rekord. Die eerste stroom is altyd die Globals substream, en die res is vel substreams. Dit sluit in werkkaarte, makro velle, grafiek velle, dialoog velle, en VBA module velle. Die Globals substream spesifiseer globale eienskappe en data in 'n werkboek. Dit sluit ook 'n BoundSheet8 rekord vir elke substream in die Werkboek stroom. A BoundSheet8 rekord gee inligting oor 'n vel substream. Dit sluit in naam, plek, tipe, en sigbaarheid. Die eerste 4 grepe van die rekord, die lbPlyPos FilePointer, spesifiseer die posisie in die Werkboek stroom waar die vel substream begin. Die Werkkaart substream spesifiseer 'n laken in 'n werkboek. Die sel tafel is die deel van 'n vel stroom waar selle gestoor. Dit bevat 'n reeks van ry blokke, wat elkeen het 'n kapasiteit van 32 rye selle, en is agtermekaar gevul. Elke ry blok begin met 'n reeks van ry rekords, gevolg deur die selle wat gaan in die rye, en eindig met 'n DBCell rekord, wat die begin verreken van die eerste sel van elke ry in die blok gee. A Row rekord definieer 'n ry in 'n laken. Dit is 'n komplekse struktuur, maar slegs die eerste 6 grepe is nodig vir basiese inhoud herwinning. Dit gee die ry indeks en die kolomme van die eerste selle en laaste selle wat data of unieke uitleg in die ry bevat. Al die selle in 'n ry blok gestoor nadat die laaste ry in die blok. Daar is sewe soorte rekords wat werklike selle in 'n werkblad verteenwoordig. Die meeste sel rekords begin met 'n 6-byte Selstruktuur. Die eerste 2 van die grepe spesifiseer die ry, die volgende 2 grepe spesifiseer die kolom, en die laaste 2 grepe spesifiseer 'n XF rekord in die Globals substream wat opmaak inligting bevat. Die volgende rekords verteenwoordig die verskillende soorte selle. Tensy anders vermeld, is die eerste 6 grepe in beslag geneem deur die selstruktuur, en die res van die grepe bevat die waarde. Leeg sel rekord 'N leë sel rekord spesifiseer 'n leë sel wat geen formule of waarde het. Hierdie tipe rekord slegs gebruik word vir selle wat individuele opmaak bevat; anders, is leeg selle gestoor in MulBlank rekords of glad nie. RK sel rekord 'N RK sel rekord 'n 32-bis getal. Excel vat outomaties nommers wat in 32 stukkies of minder kan voorgestel word om hierdie formaat vir die stoor as 'n manier om lêergrootte te verminder. In plaas van 'n 6-byte selstruktuur, die eerste 2 grepe spesifiseer die ry en die tweede 2 grepe spesifiseer die kolom. Die oorblywende 6 grepe definieer die nommer in 'n RkRec struktuur vir skyf en geheue optimalisering. BoolErr sel rekord A BoolErr sel rekord 'n 2-byte Bes struktuur wat óf 'n Boole waarde of 'n fout kode mag wees. Nommer sel rekord Aantal sel rekord 'n 64-bis swaai-punt nommer. A LabelSst sel rekord 'n 4-byte heelgetal wat 'n string in die gedeelde Strings Table (SST) spesifiseer. Spesifiek, die heelgetal ooreenstem met die skikking indeks in die veld RGB van die SST. Formule sel rekord 'N Formule sel rekord bevat beide die formule en die gevolglike data. Die vertoon in die sel waarde is gedefinieer in 'n FormulaValue struktuur in die 8 grepe dat die selstruktuur volg. Die volgende 6 grepe geïgnoreer kan word nie, en die res van die rekord is 'n CellParsedFormula struktuur wat die formule self bevat. A MulBlank rekord spesifiseer 'n reeks leeg selle in 'n ry. Die eerste 2 grepe gee die ry, en die volgende 2 grepe gee die kolom wat die reeks spasies begin by. Volgende, 'n veranderlike lengte verskeidenheid van selstrukture volg om opmaak inligting te stoor, en die laaste 2 grepe wys wat kolom die reeks spasies eindig op. A MulRk rekord is soos 'n MulBlank rekord, maar in plaas van leë selle, 'n MulRk rekord bestaan ​​uit RK data in RkRec strukture. Die Gedeelde String Table (SST) bevat al die string waardes in die werkboek. Hierdie waardes word waarna verwys word in die werkblad deur LabelSst sel rekords. Die eerste 8 grepe van die SST gee die aantal verwysings na snare in die werkboek en die aantal unieke string waardes in die SST. Die res is 'n verskeidenheid van XLUnicodeRichExtendedString strukture wat die snare hulself as skikkings van karakters bevat. Bietjie 16 van hierdie struktuur bepaal of die karakters is 1 byte of 2 grepe elk. Jy kan beide die SST struktuur en die XLUnicodeRichExtendedString struktuur uit te brei deur middel van voort rekords as die nommer of lengte van snare hul grense oorskry. Onttrekking van data uit Excel-lêers Alle MS-XLS-formaat lêer inhoud woon in die vel substreams. Alhoewel jy elke vel substream voor die voet kan laai, kan jy meer beheer en doeltreffendheid te verkry deur gebruik te maak van die BoundSheet8 rekords om net die velle wat jy wil om te lees op te spoor. Parsing van formules en formatering inligting is buite die bestek van hierdie artikel.


No comments:

Post a Comment