PowerBASIC Peer Support Forums
 

Go Back   PowerBASIC Peer Support Forums > User to user Discussions > Special Interest Groups > Programming Microsoft Office

Programming Microsoft Office User to user discussions about programming Microsoft Office applications.

Reply
 
Thread Tools Display Modes
  #1  
Old Apr 25th, 2010, 01:13 PM
David Maruca David Maruca is offline
Member
 
Join Date: Jan 2010
Posts: 69
Reading Excel BIFF Files Part1: Enumerating Workbook Sections

This example enumerates all of the sections of a BIFF file and dumps them to a text file. Worksheet names are also extracted.

Requires: Jose Roca's include files

References:
Microsoft BIFF Docs
OpenOffice Docs
MSDN
Jose Roca 1 / Jose Roca 2

I am currently writing routines to read XL files without the need to use Excel automation. I will post more here as I progress. All data for enumerating section IDs are taken directly from MS Docs and OO.org docs.

It does not surprise me that even after combining knowledge from both documents I still get an undefined section. &H01BA seems to have something to do with VBA modules. I can't find reference to it anywhere. I doubt I'll investigate it further since I do not need it.

Code:
' ########################################################################################
' Enumerates the sections of an Excel BIFF file and also pulls worksheet names.
' ########################################################################################

#COMPILE EXE
#DIM ALL
#INCLUDE ONCE "propidl.inc"
#INCLUDE ONCE "OLE2UTILS.inc"

TYPE tIdentifier
    idNumber AS WORD
    szSize AS WORD
END TYPE

'Beginning of file for BIFF 5-7
TYPE tBOF57
    vers AS WORD
    dt AS WORD
    rupBuild AS WORD
    rupYear AS WORD
END TYPE

'Beginning of file for BIFF 8
TYPE tBOF8
    vers AS WORD
    dt AS WORD
    rupBuild AS WORD
    rupYear AS WORD
    bfh AS DWORD
    sfo AS DWORD
END TYPE

'This record stores the sheet name, sheet type, and stream position.
TYPE tBoundSheet
    lbPlyPos AS DWORD 'Stream position of the start of the BOF record for the sheet
    grbit AS WORD     'Option flags
    'The following are made redundant with BIFF8 unicode strings.
    'They should be processed separately
    'cch as BYTE       'Length of the sheet name (in characters)
    'rgch as STRING    'Sheet name (grbit/rgb fields of Unicode String)
END TYPE

'A BiffString formatting run
TYPE tRun
    charOffset AS WORD 'zero based starting character of the run
    fontIndex AS WORD  'zero based font record index
END TYPE

'SST: Shared String Table (FCh)
TYPE tSharedStringTable
    cstTotal AS DWORD  'Total number of strings in the shared string table and extended string table (EXTSST record)
    cstUnique AS DWORD 'Number of unique strings in the shared string table
    'rgb               'Array of unique unicode strings.
END TYPE

' ========================================================================================
' Main
' ========================================================================================
FUNCTION PBMAIN

    DIM hr AS LONG
    DIM pStorage AS IStorage
    DIM pStream AS IStream
    DIM wszName AS STRING
    DIM qNewPos AS QUAD
    DIM cbRead AS DWORD
    DIM cbSize AS QUAD
    DIM BiffVersion AS BYTE
    DIM Identifier AS tIdentifier
    DIM BoundSheet AS tBoundSheet
    DIM sst AS tSharedStringTable
    DIM sheetName AS STRING
    DIM seekDistance AS QUAD
    DIM i AS LONG

    wszName = UCODE$("Test.xls")
    hr = StgOpenStorage(STRPTR(wszName), NOTHING, _
        %STGM_READ OR %STGM_SHARE_EXCLUSIVE, _
        0, %NULL, pStorage)
    IF FAILED(hr) THEN
      MSGBOX "StgOpenStorage failure: " & HEX$(hr)
      EXIT FUNCTION
    END IF

    wszName = UCODE$("Workbook")
    hr = pStorage.OpenStream(STRPTR(wszName), 0, %STGM_READ OR %STGM_SHARE_EXCLUSIVE, 0, pStream)
    IF FAILED(hr) THEN
        wszName = UCODE$("Book")
        hr = pStorage.OpenStream(STRPTR(wszName), 0, %STGM_READ OR %STGM_SHARE_EXCLUSIVE, 0, pStream)
        IF FAILED(hr) THEN
            MSGBOX "IStorage.OpenStream failure: " & HEX$(hr)
            EXIT FUNCTION
        END IF
    END IF

    cbSize = IStream_GetSize(pStream)

    OPEN "out.txt" FOR OUTPUT ACCESS WRITE AS #1

    DO UNTIL qNewPos + Identifier.szSize > cbSize
        hr = pStream.Read(VARPTR(Identifier), SIZEOF(Identifier), cbRead)

        'Grab biff version
        IF LO(BYTE, Identifier.idNumber) = &H09 THEN
            BiffVersion = HI(BYTE, Identifier.idNumber)
        END IF

        IF Identifier.idNumber = &H85 THEN 'BoundSheet info
            hr = pStream.Read(VARPTR(BoundSheet), SIZEOF(BoundSheet), cbRead)
            sheetName = ReadBiffString(1, BiffVersion, pStream)
            PRINT #1, "Identifier: " & IdToName$(Identifier.idNumber) & " - Size: " & FORMAT$(Identifier.szSize) & " - WorksheetName: " & sheetName
        ELSEIF Identifier.idNumber = &HFC THEN 'Shared String Table
            PRINT #1, "Identifier: " & IdToName$(Identifier.idNumber) & " - Size: " & FORMAT$(Identifier.szSize)
            hr = pStream.Read(VARPTR(sst), SIZEOF(sst), cbRead)
            FOR i = 1 TO sst.cstUnique
                PRINT #1, ReadBiffString(2, BiffVersion, pStream)
            NEXT
        ELSE
            PRINT #1, "Identifier: " & IdToName$(Identifier.idNumber) & " - Size: " & FORMAT$(Identifier.szSize)
            seekDistance = Identifier.szSize
            hr = pStream.Seek(seekDistance, %STREAM_SEEK_CUR, qNewPos)
        END IF
    LOOP

    CLOSE #1

    pStream = NOTHING
    pStorage = NOTHING
END FUNCTION
' ========================================================================================

'Note: As of yet ruch and extended strings are not tested, but should work since they follow MS documentation.
FUNCTION ReadBiffString(BYVAL SizeOfCch AS DWORD, BYVAL BiffVersion AS BYTE, BYVAL pStream AS IStream) AS STRING
    DIM hr AS LONG
    DIM cbRead AS DWORD
    DIM qNewPos AS QUAD
    DIM cc1 AS BYTE
    DIM cch AS WORD         'Count of characters in the string (Note: this is the number of chars, NOT bytes)
    DIM grbit AS BYTE       'Option flags (only used in BIFF8)
    DIM sRgb AS STRING      'Array of string characters and formatting runs
    DIM fHighByte AS BYTE   '=0 if all the characters in the string have a high byte of 00h
                            'and only the low bytes are saved in the file (compressed)
                            '=1 if at least one character in the string has a nonzero high byte and therefore
                            'all characters in the string are saved as double-byte characters (not compressed)
    DIM fExtSt AS BYTE      'Extended string flag
    DIM fRichSt AS BYTE         'Rich string flag
    DIM cchExtRst AS DWORD  'Length of ExtRst data
    DIM numRuns AS WORD         'The number of formatting runs in the BiffString
    'dim runs() as tRun         'The formatting runs
    'dim i as word

    IF SizeOfCch = 1 THEN
        hr = pStream.Read(VARPTR(cc1), SIZEOF(cc1), cbRead)
        cch = cc1
    ELSE
        hr = pStream.Read(VARPTR(cch), SIZEOF(cch), cbRead)
    END IF

    IF BiffVersion < &H08 THEN
        FUNCTION = IStream_ReadText(pStream, CLNG(cch))
    ELSE
        hr = pStream.Read(VARPTR(grbit), SIZEOF(grbit), cbRead)
        SELECT CASE grbit
            CASE &H00 'the BiffString is compressed unicode
                FUNCTION = IStream_ReadText(pStream, CLNG(cch))
            CASE &H01 'the BiffString is Unicode
                FUNCTION = ACODE$(IStream_ReadText(pStream, CLNG(cch * 2)))
            CASE ELSE
                fHighByte = BIT(grbit, 0)
                fExtSt    = BIT(grbit, 2)
                fRichSt   = BIT(grbit, 3)

                IF fExtSt = 0 THEN
                    'The BiffString is a rich string that contains a series of runs
                    hr = pStream.Read(VARPTR(numRuns), SIZEOF(numRuns), cbRead)
                    'redim runs(numRuns) as tRun

                    IF fHighByte = 0 THEN
                        'the BiffString is compressed unicode
                        FUNCTION = IStream_ReadText(pStream, CLNG(cch))
                    ELSE
                        'the BiffString is Unicode
                        FUNCTION = ACODE$(IStream_ReadText(pStream, CLNG(cch * 2)))
                    END IF

                    'Read in all of the run data
                    'for i = 0 to numRuns - 1
                    '   hr = pStream.Read(varptr(runs(i)), sizeof(runs(i)), cbRead)
                    'NEXT
                    'Since we are not processing the formatting code, just bypass it
                    hr = pStream.Seek(CQUD(numRuns * 4), %STREAM_SEEK_CUR, qNewPos)
                ELSE
                    'The BiffString is an Extended String which contains some undocumented features
                    IF fRichSt = 1 THEN
                        'The BiffString does contain formatting runs
                        hr = pStream.Read(VARPTR(numRuns), SIZEOF(numRuns), cbRead)
                        'redim runs(numRuns) as tRun
                    END IF

                    hr = pStream.Read(VARPTR(cchExtRst), SIZEOF(cchExtRst), cbRead)

                    IF fHighByte = 0 THEN
                        'the BiffString is compressed unicode
                        FUNCTION = IStream_ReadText(pStream, CLNG(cch))
                    ELSE
                        'the BiffString is Unicode
                        FUNCTION = IStream_ReadText(pStream, CLNG(cch * 2))
                    END IF

                    IF fRichSt = 1 THEN
                        'Read in all of the run data
                        'for i = 0 to numRuns - 1
                        '   hr = pStream.Read(varptr(runs(i)), sizeof(runs(i)), cbRead)
                        'NEXT
                        'Since we are not processing the formatting code, just bypass it
                        hr = pStream.Seek(CQUD(numRuns * 4), %STREAM_SEEK_CUR, qNewPos)
                    END IF

                    'Bypass undocumented ExtRst data
                    hr = pStream.Seek(CQUD(cchExtRst), %STREAM_SEEK_CUR, qNewPos)
                END IF
        END SELECT
    END IF
END FUNCTION

FUNCTION IdToName(IdNumber AS WORD) AS STRING

    '&H42 shows up twice in the MS docs. The best I can gather is that CodePage shows in the
    'header info once, and CodeName can show after that for each worksheet if needed.
    STATIC CodeNamePageFlag AS LONG

'According to the BIFF specification on page 11 "File Format Versions:"
'    In BIFF4 and earlier versions, various records (other than the BOF record)
'    have version information specified in the high-order byte of their record numbers
'Of course, they don't specify which ones have this version number thrown in. Checking
'the open office documents reveal only certain ones which have been encountered with
'the version info. We check for those first.

    SELECT CASE IdNumber
        ''--------------------------------------------------------
        ''The following have optional version information
        ''--------------------------------------------------------
        CASE &H00, &H200
            FUNCTION = "DIMENSIONS: Cell Table Size"
        CASE &H01, &H201
            FUNCTION = "BLANK: Cell Value, Blank Cell"
        CASE &H03, &H203
            FUNCTION = "NUMBER: Cell Value, Floating-Point Number"
        CASE &H04, &H204
            FUNCTION = "LABEL: Cell Value, String Constant"
        CASE &H05, &H205
            FUNCTION = "BOOLERR: Cell Value, Boolean or Error"
        CASE &H07, &H207
            FUNCTION = "STRING: String Value of a Formula"
        CASE &H08, &H208
            FUNCTION = "ROW: Describes a Row"
        CASE &H09, &H209, &H409, &H809
            FUNCTION = "BOF: Beginning of File"
        CASE &H0B, &H20B
            FUNCTION = "INDEX: Index Record"
        CASE &H18, &H218
            FUNCTION = "NAME: Defined Name"
        CASE &H1E, &H41E
            FUNCTION = "FORMAT: Number Format"
        CASE &H56 'This one only shows up in OO.org docs...
            FUNCTION = "BUILTINFMTCOUNT"
        CASE &H21, &H221
            FUNCTION = "ARRAY: Array-Entered Formula"
        CASE &H23, &H223
            FUNCTION = "EXTERNNAME: Externally Referenced Name"
        CASE &H25, &H225
            FUNCTION = "DEFAULTROWHEIGHT: Default Row Height"
        CASE &H31, &H231
            FUNCTION = "FONT: Font Description"
        CASE &H36, &H236
            FUNCTION = "TABLE: Data Table"
        CASE &H3E, &H23E
            FUNCTION = "WINDOW2: Sheet Window Information"
        CASE &H43, &H243, &H443, &H843
            FUNCTION = "XF: Extended Format"
        CASE &H7E, &H27E 'Listed in MS docs as 7Eh and OO.org as 027Eh. Compensate for both.
            FUNCTION = "RK: Cell Value, RK Number"

        ''--------------------------------------------------------
        ''The following do not have optional version information
        ''--------------------------------------------------------
        CASE &H0A
            FUNCTION = "EOF: End of File"
        CASE &H0C
            FUNCTION = "CALCCOUNT: Iteration Count"
        CASE &H0D
            FUNCTION = "CALCMODE: Calculation Mode"
        CASE &H0E
            FUNCTION = "PRECISION: Precision"
        CASE &H0F
            FUNCTION = "REFMODE: Reference Mode"
        CASE &H10
            FUNCTION = "DELTA: Iteration Increment"
        CASE &H11
            FUNCTION = "ITERATION: Iteration Mode"
        CASE &H12
            FUNCTION = "PROTECT: Protection Flag"
        CASE &H13
            FUNCTION = "PASSWORD: Protection Password"
        CASE &H14
            FUNCTION = "HEADER: Print Header on Each Page"
        CASE &H15
            FUNCTION = "FOOTER: Print Footer on Each Page"
        CASE &H16
            FUNCTION = "EXTERNCOUNT: Number of External References"
        CASE &H17
            FUNCTION = "EXTERNSHEET: External Reference"
        CASE &H19
            FUNCTION = "WINDOWPROTECT: Windows Are Protected"
        CASE &H1A
            FUNCTION = "VERTICALPAGEBREAKS: Explicit Column Page Breaks"
        CASE &H1B
            FUNCTION = "HORIZONTALPAGEBREAKS: Explicit Row Page Breaks"
        CASE &H1C
            FUNCTION = "NOTE: Comment Associated with a Cell"
        CASE &H1D
            FUNCTION = "SELECTION: Current Selection"
        CASE &H22
            FUNCTION = "1904: 1904 Date System"
        CASE &H26
            FUNCTION = "LEFTMARGIN: Left Margin Measurement"
        CASE &H27
            FUNCTION = "RIGHTMARGIN: Right Margin Measurement"
        CASE &H28
            FUNCTION = "TOPMARGIN: Top Margin Measurement"
        CASE &H29
            FUNCTION = "BOTTOMMARGIN: Bottom Margin Measurement"
        CASE &H2A
            FUNCTION = "PRINTHEADERS: Print Row/Column Labels"
        CASE &H2B
            FUNCTION = "PRINTGRIDLINES: Print Gridlines Flag"
        CASE &H2F
            FUNCTION = "FILEPASS: File Is Password-Protected"
        CASE &H3C
            FUNCTION = "CONTINUE: Continues Long Records"
        CASE &H3D
            FUNCTION = "WINDOW1: Window Information"
        CASE &H40
            FUNCTION = "BACKUP: Save Backup Version of the File"
        CASE &H41
            FUNCTION = "PANE: Number of Panes and Their Position"
        CASE &H42
            IF CodeNamePageFlag=0 THEN
                FUNCTION = "CODEPAGE: Default Code Page"
                CodeNamePageFlag = 1
            ELSE
                FUNCTION = "CODENAME: VBE Object Name"
            END IF
        CASE &H4D
            FUNCTION = "PLS: Environment-Specific Print Record"
        CASE &H50
            FUNCTION = "DCON: Data Consolidation Information"
        CASE &H51
            FUNCTION = "DCONREF: Data Consolidation References"
        CASE &H52
            FUNCTION = "DCONNAME: Data Consolidation Named References"
        CASE &H55
            FUNCTION = "DEFCOLWIDTH: Default Width for Columns"
        CASE &H59
            FUNCTION = "XCT: CRN Record Count"
        CASE &H5A
            FUNCTION = "CRN: Nonresident Operands"
        CASE &H5B
            FUNCTION = "FILESHARING: File-Sharing Information"
        CASE &H5C
            FUNCTION = "WRITEACCESS: Write Access User Name"
        CASE &H5D
            FUNCTION = "OBJ: Describes a Graphic Object"
        CASE &H5E
            FUNCTION = "UNCALCED: Recalculation Status"
        CASE &H5F
            FUNCTION = "SAVERECALC: Recalculate Before Save"
        CASE &H60
            FUNCTION = "TEMPLATE: Workbook Is a Template"
        CASE &H63
            FUNCTION = "OBJPROTECT: Objects Are Protected"
        CASE &H7D
            FUNCTION = "COLINFO: Column Formatting Information"
        CASE &H7E
            FUNCTION = "RK: Cell Value, RK Number"
        CASE &H7F
            FUNCTION = "IMDATA: Image Data"
        CASE &H80
            FUNCTION = "GUTS: Size of Row and Column Gutters"
        CASE &H81
            FUNCTION = "WSBOOL: Additional Workspace Information"
        CASE &H82
            FUNCTION = "GRIDSET: State Change of Gridlines Option"
        CASE &H83
            FUNCTION = "HCENTER: Center Between Horizontal Margins"
        CASE &H84
            FUNCTION = "VCENTER: Center Between Vertical Margins"
        CASE &H85
            FUNCTION = "BOUNDSHEET: Sheet Information"
        CASE &H86
            FUNCTION = "WRITEPROT: Workbook Is Write-Protected"
        CASE &H87
            FUNCTION = "ADDIN: Workbook Is an Add-in Macro"
        CASE &H88
            FUNCTION = "EDG: Edition Globals"
        CASE &H89
            FUNCTION = "PUB: Publisher"
        CASE &H8C
            FUNCTION = "COUNTRY: Default Country and WIN.INI Country"
        CASE &H8D
            FUNCTION = "HIDEOBJ: Object Display Options"
        CASE &H90
            FUNCTION = "SORT: Sorting Options"
        CASE &H91
            FUNCTION = "SUB: Subscriber"
        CASE &H92
            FUNCTION = "PALETTE: Color Palette Definition"
        CASE &H94
            FUNCTION = "LHRECORD: .WK? File Conversion Information"
        CASE &H95
            FUNCTION = "LHNGRAPH: Named Graph Information"
        CASE &H96
            FUNCTION = "SOUND: Sound Note"
        CASE &H98
            FUNCTION = "LPR: Sheet Was Printed Using LINE.PRINT("
        CASE &H99
            FUNCTION = "STANDARDWIDTH: Standard Column Width"
        CASE &H9A
            FUNCTION = "FNGROUPNAME: Function Group Name"
        CASE &H9B
            FUNCTION = "FILTERMODE: Sheet Contains Filtered List"
        CASE &H9C
            FUNCTION = "FNGROUPCOUNT: Built-in Function Group Count"
        CASE &H9D
            FUNCTION = "AUTOFILTERINFO: Drop-Down Arrow Count"
        CASE &H9E
            FUNCTION = "AUTOFILTER: AutoFilter Data"
        CASE &HA0
            FUNCTION = "SCL: Window Zoom Magnification"
        CASE &HA1
            FUNCTION = "SETUP: Page Setup"
        CASE &HA9
            FUNCTION = "COORDLIST: Polygon Object Vertex Coordinates"
        CASE &HAB
            FUNCTION = "GCW: Global Column-Width Flags"
        CASE &HAE
            FUNCTION = "SCENMAN: Scenario Output Data"
        CASE &HAF
            FUNCTION = "SCENARIO: Scenario Data"
        CASE &HB0
            FUNCTION = "SXVIEW: View Definition"
        CASE &HB1
            FUNCTION = "SXVD: View Fields"
        CASE &HB2
            FUNCTION = "SXVI: View Item"
        CASE &HB4
            FUNCTION = "SXIVD: Row/Column Field IDs"
        CASE &HB5
            FUNCTION = "SXLI: Line Item Array"
        CASE &HB6
            FUNCTION = "SXPI: Page Item"
        CASE &HB8
            FUNCTION = "DOCROUTE: Routing Slip Information"
        CASE &HB9
            FUNCTION = "RECIPNAME: Recipient Name"
        CASE &HBC
            FUNCTION = "SHRFMLA: Shared Formula"
        CASE &HBD
            FUNCTION = "MULRK: Multiple RK Cells"
        CASE &HBE
            FUNCTION = "MULBLANK: Multiple Blank Cells"
        CASE &HC1
            FUNCTION = "MMS: ADDMENU/DELMENU Record Group Count"
        CASE &HC2
            FUNCTION = "ADDMENU: Menu Addition"
        CASE &HC3
            FUNCTION = "DELMENU: Menu Deletion"
        CASE &HC5
            FUNCTION = "SXDI: Data Item"
        CASE &HC6
            FUNCTION = "SXDB: PivotTable Cache Data"
        CASE &HCD
            FUNCTION = "SXSTRING: String"
        CASE &HD0
            FUNCTION = "SXTBL: Multiple Consolidation Source Info"
        CASE &HD1
            FUNCTION = "SXTBRGIITM: Page Item Name Count"
        CASE &HD2
            FUNCTION = "SXTBPG: Page Item Indexes"
        CASE &HD3
            FUNCTION = "OBPROJ: Visual Basic Project"
        CASE &HD5
            FUNCTION = "SXIDSTM: Stream ID"
        CASE &HD6
            FUNCTION = "RSTRING: Cell with Character Formatting"
        CASE &HD7
            FUNCTION = "DBCELL: Stream Offsets"
        CASE &HDA
            FUNCTION = "BOOKBOOL: Workbook Option Flag"
        CASE &HDC
            FUNCTION = "PARAMQRY: Query Parameters"
        CASE &HDC
            FUNCTION = "SXEXT: External Source Information"
        CASE &HDD
            FUNCTION = "SCENPROTECT: Scenario Protection"
        CASE &HDE
            FUNCTION = "OLESIZE: Size of OLE Object"
        CASE &HDF
            FUNCTION = "UDDESC: Description String for Chart Autoformat"
        CASE &HE0
            FUNCTION = "XF: Extended Format"
        CASE &HE1
            FUNCTION = "INTERFACEHDR: Beginning of User Interface Records"
        CASE &HE2
            FUNCTION = "INTERFACEEND: End of User Interface Records"
        CASE &HE3
            FUNCTION = "SXVS: View Source"
        CASE &HE5
            FUNCTION = "MERGECELLS: Merged Cells"
        CASE &HEA
            FUNCTION = "TABIDCONF: Sheet Tab ID of Conflict History"
        CASE &HEB
            FUNCTION = "MSODRAWINGGROUP: Microsoft Office Drawing Group"
        CASE &HEC
            FUNCTION = "MSODRAWING: Microsoft Office Drawing"
        CASE &HEF 'Only shows up in OO.org docs.
            FUNCTION = "PHONETIC"
        CASE &HED
            FUNCTION = "MSODRAWINGSELECTION: Microsoft Office Drawing Selection"
        CASE &HF0
            FUNCTION = "SXRULE: PivotTable Rule Data"
        CASE &HF1
            FUNCTION = "SXEX: PivotTable View Extended Information"
        CASE &HF2
            FUNCTION = "SXFILT: PivotTable Rule Filter"
        CASE &HF4
            FUNCTION = "SXDXF: Pivot Table Formatting"
        CASE &HF5
            FUNCTION = "SXITM: Pivot Table Item Indexes"
        CASE &HF6
            FUNCTION = "SXNAME: PivotTable Name"
        CASE &HF7
            FUNCTION = "SXSELECT: PivotTable Selection Information"
        CASE &HF8
            FUNCTION = "SXPAIR: PivotTable Name Pair"
        CASE &HF9
            FUNCTION = "SXFMLA: Pivot Table Parsed Expression"
        CASE &HFB
            FUNCTION = "SXFORMAT: PivotTable Format Record"
        CASE &HFC
            FUNCTION = "SST: Shared String Table"
        CASE &HFD
            FUNCTION = "LABELSST: Cell Value, String Constant/SST"
        CASE &HFF
            FUNCTION = "EXTSST: Extended Shared String Table"
        CASE &H100
            FUNCTION = "SXVDEX: Extended PivotTable View Fields"
        CASE &H103
            FUNCTION = "SXFORMULA: PivotTable Formula Record"
        CASE &H122
            FUNCTION = "SXDBEX: PivotTable Cache Data"
        CASE &H13D
            FUNCTION = "TABID: Sheet Tab Index Array"
        CASE &H160
            FUNCTION = "USESELFS: Natural Language Formulas Flag"
        CASE &H161
            FUNCTION = "DSF: Double Stream File"
        CASE &H162
            FUNCTION = "XL5MODIFY: Flag for DSF"
        CASE &H1A5
            FUNCTION = "FILESHARING2: File-Sharing Information for Shared Lists"
        CASE &H1A9
            FUNCTION = "USERBVIEW: Workbook Custom View Settings"
        CASE &H1AA
            FUNCTION = "USERSVIEWBEGIN: Custom View Settings"
        CASE &H1AB
            FUNCTION = "USERSVIEWEND: End of Custom View Records"
        CASE &H1AD
            FUNCTION = "QSI: External Data Range"
        CASE &H1AE
            FUNCTION = "SUPBOOK: Supporting Workbook"
        CASE &H1AF
            FUNCTION = "PROT4REV: Shared Workbook Protection Flag"
        CASE &H1B0
            FUNCTION = "CONDFMT: Conditional Formatting Range Information"
        CASE &H1B1
            FUNCTION = "CF: Conditional Formatting Conditions"
        CASE &H1B2
            FUNCTION = "DVAL: Data Validation Information"
        CASE &H1B5
            FUNCTION = "DCONBIN: Data Consolidation Information"
        CASE &H1B6
            FUNCTION = "TXO: Text Object"
        CASE &H1B7
            FUNCTION = "REFRESHALL: Refresh Flag"
        CASE &H1B8
            FUNCTION = "HLINK: Hyperlink"
        CASE &H1BB
            FUNCTION = "SXFDBTYPE: SQL Datatype Identifier"
        CASE &H1BC
            FUNCTION = "PROT4REVPASS: Shared Workbook Protection Password"
        CASE &H1BE
            FUNCTION = "DV: Data Validation Criteria"
        CASE &H1C0
            FUNCTION = "EXCEL9FILE: Excel 9 File"
        CASE &H1C1
            FUNCTION = "RECALCID: Recalc Information"
        CASE &H293
            FUNCTION = "STYLE: Style Information"
        CASE &H406
            FUNCTION = "FORMULA: Cell Formula"
        CASE &H800
            FUNCTION = "HLINKTOOLTIP: Hyperlink Tooltip"
        CASE &H801
            FUNCTION = "WEBPUB: Web Publish Item"
        CASE &H802
            FUNCTION = "QSISXTAG: PivotTable and Query Table Extensions"
        CASE &H803
            FUNCTION = "DBQUERYEXT: Database Query Extensions"
        CASE &H804
            FUNCTION = "EXTSTRING: FRT String"
        CASE &H805
            FUNCTION = "TXTQUERY: Text Query Information"
        CASE &H806
            FUNCTION = "QSIR: Query Table Formatting"
        CASE &H807
            FUNCTION = "QSIF: Query Table Field Formatting"
        CASE &H80A
            FUNCTION = "OLEDBCONN: OLE Database Connection"
        CASE &H80B
            FUNCTION = "WOPT: Web Options"
        CASE &H80C
            FUNCTION = "SXVIEWEX: Pivot Table OLAP Extensions"
        CASE &H80D
            FUNCTION = "SXTH: PivotTable OLAP Hierarchy"
        CASE &H80E
            FUNCTION = "SXPIEX: OLAP Page Item Extensions"
        CASE &H80F
            FUNCTION = "SXVDTEX: View Dimension OLAP Extensions"
        CASE &H810
            FUNCTION = "SXVIEWEX9: Pivot Table Extensions"
        CASE &H812
            FUNCTION = "CONTINUEFRT: Continued FRT"
        CASE &H813
            FUNCTION = "REALTIMEDATA: Real-Time Data (RTD)"
        CASE &H862
            FUNCTION = "SHEETEXT: Extra Sheet Info"
        CASE &H863
            FUNCTION = "BOOKEXT: Extra Book Info"
        CASE &H864
            FUNCTION = "SXADDL: Pivot Table Additional Info"
        CASE &H865
            FUNCTION = "CRASHRECERR: Crash Recovery Error"
        CASE &H866
            FUNCTION = "HFPicture: Header / Footer Picture"
        CASE &H867
            FUNCTION = "FEATHEADR: Shared Feature Header"
        CASE &H868
            FUNCTION = "FEAT: Shared Feature Record"
        CASE &H86A
            FUNCTION = "DATALABEXT: Chart Data Label Extension"
        CASE &H86B
            FUNCTION = "DATALABEXTCONTENTS: Chart Data Label Extension Contents"
        CASE &H86C
            FUNCTION = "CELLWATCH: Cell Watch"
        CASE &H86d
            FUNCTION = "FEATINFO: Shared Feature Info Record"
        CASE &H871
            FUNCTION = "FEATHEADR11: Shared Feature Header 11"
        CASE &H872
            FUNCTION = "FEAT11: Shared Feature 11 Record"
        CASE &H873
            FUNCTION = "FEATINFO11: Shared Feature Info 11 Record"
        CASE &H874
            FUNCTION = "DROPDOWNOBJIDS: Drop Down Object"
        CASE &H875
            FUNCTION = "CONTINUEFRT11: Continue FRT 11"
        CASE &H876
            FUNCTION = "DCONN: Data Connection"
        CASE &H877
            FUNCTION = "LIST12: Extra Table Data Introduced in Excel 2007"
        CASE &H878
            FUNCTION = "FEAT12: Shared Feature 12 Record"
        CASE &H879
            FUNCTION = "CONDFMT12: Conditional Formatting Range Information 12"
        CASE &H87A
            FUNCTION = "CF12: Conditional Formatting Condition 12"
        CASE &H87B
            FUNCTION = "CFEX: Conditional Formatting Extension"
        CASE &H87C
            FUNCTION = "XFCRC: XF Extensions Checksum"
        CASE &H87D
            FUNCTION = "XFEXT: XF Extension"
        CASE &H87E
            FUNCTION = "EZFILTER12: AutoFilter Data Introduced in Excel 2007"
        CASE &H87F
            FUNCTION = "CONTINUEFRT12: Continue FRT 12"
        CASE &H881
            FUNCTION = "SXADDL12: Additional Workbook Connections Information"
        CASE &H884
            FUNCTION = "MDTINFO: Information about a Metadata Type"
        CASE &H885
            FUNCTION = "MDXSTR: MDX Metadata String"
        CASE &H886
            FUNCTION = "MDXTUPLE: Tuple MDX Metadata"
        CASE &H887
            FUNCTION = "MDXSET: Set MDX Metadata"
        CASE &H888
            FUNCTION = "MDXPROP: Member Property MDX Metadata"
        CASE &H889
            FUNCTION = "MDXKPI: Key Performance Indicator MDX Metadata"
        CASE &H88A
            FUNCTION = "MDTB: Block of Metadata Records"
        CASE &H88B
            FUNCTION = "PLV: Page Layout View Settings in Excel 2007"
        CASE &H88C
            FUNCTION = "COMPAT12: Compatibility Checker 12"
        CASE &H88D
            FUNCTION = "DXF: Differential XF"
        CASE &H88E
            FUNCTION = "TABLESTYLES: Table Styles"
        CASE &H88F
            FUNCTION = "TABLESTYLE: Table Style"
        CASE &H890
            FUNCTION = "TABLESTYLEELEMENT: Table Style Element"
        CASE &H892
            FUNCTION = "STYLEEXT: Named Cell Style Extension"
        CASE &H893
            FUNCTION = "NAMEPUBLISH: Publish To Excel Server Data for Name"
        CASE &H894
            FUNCTION = "NAMECMT: Name Comment"
        CASE &H895
            FUNCTION = "SORTDATA12: Sort Data 12"
        CASE &H896
            FUNCTION = "THEME: Theme"
        CASE &H897
            FUNCTION = "GUIDTYPELIB: VB Project Typelib GUID"
        CASE &H898
            FUNCTION = "FNGRP12: Function Group"
        CASE &H899
            FUNCTION = "NAMEFNGRP12: Extra Function Group"
        CASE &H89A
            FUNCTION = "MTRSETTINGS: Multi-Threaded Calculation Settings"
        CASE &H89B
            FUNCTION = "COMPRESSPICTURES: Automatic Picture Compression Mode"
        CASE &H89C
            FUNCTION = "HEADERFOOTER: Header Footer"
        CASE &H8A3
            FUNCTION = "FORCEFULLCALCULATION: Force Full Calculation Settings"
        CASE &H8c1
            FUNCTION = "LISTOBJ: List Object"
        CASE &H8c2
            FUNCTION = "LISTFIELD: List Field"
        CASE &H8c3
            FUNCTION = "LISTDV: List Data Validation"
        CASE &H8c4
            FUNCTION = "LISTCONDFMT: List Conditional Formatting"
        CASE &H8c5
            FUNCTION = "LISTCF: List Cell Formatting"
        CASE &H8c6
            FUNCTION = "FMQRY: Filemaker queries"
        CASE &H8c7
            FUNCTION = "FMSQRY: File maker queries"
        CASE &H8c8
            FUNCTION = "PLV: Page Layout View in Mac Excel 11"
        CASE &H8c9
            FUNCTION = "LNEXT: Extension information for borders in Mac Office 11"
        CASE &H8ca
            FUNCTION = "MKREXT: Extension information for markers in Mac Office 11"
        CASE &H8cb
            FUNCTION = "CRTCOOPT: Color options for Chart series in Mac Office 11"
       CASE ELSE
            FUNCTION = "Undefined " & HEX$(IdNumber)
    END SELECT
END FUNCTION
Attached Files
File Type: zip EX_EnumerateBiffFile.zip (15.0 KB, 16 views)
Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 11:52 PM.


Powered by vBulletin® Version 3.8.1
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Copyright 1999-2011 PowerBASIC, Inc. All Rights Reserved.
Error in my_thread_global_end(): 1 threads didn't exit