home *** CD-ROM | disk | FTP | other *** search
Wrap
unit UBiffEditUtil; interface uses SysUtils, Classes, ActiveX; const OptionsRead = STGM_DIRECT or STGM_SHARE_EXCLUSIVE or STGM_READ; OptionsWrite = STGM_DIRECT or STGM_SHARE_EXCLUSIVE or STGM_WRITE; PanelTotalRecords=0; PanelCurrentRecord=1; PanelCursorPos=2; WorkbookStr:widestring='\Workbook'; resourcestring ErrInvalidRecord='Invalid Record'; ErrFileDestSameSource='The file should be saved to a different file'; ErrCantReadFile='Cant read file "%s"'; ErrFileIsNotXLS='The file "%s" is invalid'; ErrBadString='Can''t convert hex values to register values'; ErrBadLen='Invalid string length'; WarFileTooBig='This file is big and loading it can take several minutes. ┐Do you want to continue loading?'; WarEscherBig='This record is continued in the next. You can view it, but not change it'; ErrEscherRecord='Error reading Escher record'; TxtStatus= ' Records: %d'; TxtSelection=' Selection: %d records'; TxtCurrentRecord= 'Current: %d'; TxtCursorPos=' Byte: %d'; type TRecordHeader = packed record Id: word; Size: word; end; //***************************************************************************** {**} function SkipZero(const s:string):string; {**} function TrimWoZero(const s:string):string; {**} function StrToHex(const s:string):string; {**} function GetIdName(Const Id: word): string; {**} function HexToStr(const s:string; const Len: integer):string; {**} function ParseRecord(const s: string; var Id: word; var Version:Word; var Size: int64; var HexData: string; var Posi: integer; const IsBiff: boolean): boolean; //***************************************************************************** implementation function SkipZero(const s:string):string; var i:integer; begin Result:=''; for i:=1 to Length(s) do if s[i] in [#0..#31,'"',''''] then result:=result+'.' else result:=result+s[i]; end; function TrimWoZero(const s:string):string; var R: string; begin R:=Trim(s); while (length(R)>0) and (R[1]='0') do delete(R,1,1); Result:=R; end; function StrToHex(const s:string):string; var i,z:integer; P:PChar; begin if Length(s)=0 then begin; Result:='';exit;end; SetLength(Result, 3*Length(s)+1); //the extra byte is for #0; P:=PChar(@(Result[1])); z:=0; for i:=1 to Length(s) do begin StrFmt(P+Z, '%2.2x ',[ord(s[i])]); inc(z,3); end; SetLength(Result, 3*Length(s)); end; function HexToStr(const s:string; const Len: integer):string; var i,k:integer; begin SetLength(Result, Len); k:=1; for i:=1 to Len do begin if k+1>length(s) then Raise Exception.Create(ErrBadString); Result[i]:=chr(StrToInt('$'+ s[k]+ s[k+1])); if (k+2<=length(s)) and (s[k+2]<>' ') then Raise Exception.Create(ErrBadString); inc(k,3); end; if length(s)>=k then Raise Exception.Create(ErrBadString); end; function ParseRecord(const s: string; var Id: word; var Version:Word; var Size: int64; var HexData: string; var Posi: integer; const IsBiff: boolean): boolean; var Posi2: integer; begin if Posi>Length(s) then begin Result:=false;exit;end; Posi2:= Posi+ Pos(#9,Copy(s,Posi,length(s))); Posi:=Posi2; Posi2:= Posi+ Pos(#9,Copy(s,Posi,length(s))); Id:=StrToInt64('$'+Trim(Copy(s,Posi,Posi2-Posi-1))); Posi:=Posi2; Posi2:= Posi+ Pos(#9,Copy(s,Posi,length(s))); if not IsBiff then begin Version:=StrToInt64('$'+Trim(Copy(s,Posi,Posi2-Posi-1))); Posi:=Posi2; Posi2:= Posi+ Pos(#9,Copy(s,Posi,length(s))); end; Size:=StrToInt64(Trim(Copy(s,Posi,Posi2-Posi-1))); Posi:=Posi2; Posi2:= Posi+ Pos(#9,Copy(s,Posi,length(s))); Posi:=Posi2; Posi2:= Posi+ Pos(#9,Copy(s,Posi,length(s))); Posi:=Posi2; Posi2:= Posi+ Pos(#10,Copy(s,Posi,length(s))); HexData:=Copy(s,Posi,Posi2-Posi-2); Posi:=Posi2; Result:=true; end; function GetIdName(Const Id: word): string; begin case Id of $0001: Result:='BLANK'; $0002: Result:='INTEGER'; $0003: Result:='NUMBER'; $0004: Result:='LABEL'; $0005: Result:='BOOLERR'; $0006: Result:='FORMULA'; $0007: Result:='STRING'; $0008: Result:='ROW'; $0009: Result:='BOF'; $000A: Result:='EOF'; $000B: Result:='INDEX'; $000C: Result:='CALCCOUNT'; $000D: Result:='CALCMODE'; $000E: Result:='PRECISION'; $000F: Result:='REFMODE'; $0010: Result:='DELTA'; $0011: Result:='ITERATION'; $0012: Result:='PROTECT'; $0013: Result:='PASSWORD'; $0014: Result:='HEADER'; $0015: Result:='FOOTER'; $0016: Result:='EXTERNCOUNT'; $0017: Result:='EXTERNSHEET'; $0018: Result:='NAME'; $0019: Result:='WINDOWPROTECT'; $001A: Result:='VERTICALPAGEBREAKS'; $001B: Result:='HORIZONTALPAGEBREAKS'; $001C: Result:='NOTE'; $001D: Result:='SELECTION'; $001E: Result:='FORMAT'; $001F: Result:='FORMATCOUNT'; $0020: Result:='COLUMNDEFAULT'; $0021: Result:='ARRAY'; $0022: Result:='1904'; $0023: Result:='EXTERNNAME'; $0024: Result:='COLWIDTH'; $0025: Result:='DEFAULTROWHEIGHT'; $0026: Result:='LEFTMARGIN'; $0027: Result:='RIGHTMARGIN'; $0028: Result:='TOPMARGIN'; $0029: Result:='BOTTOMMARGIN'; $002A: Result:='PRINTHEADERS'; $002B: Result:='PRINTGRIDLINES'; $002F: Result:='FILEPASS'; $0031: Result:='FONT'; $0033: Result:='PRINTSIZE'; $0036: Result:='TABLE'; $003C: Result:='CONTINUE'; $003D: Result:='WINDOW1'; $003E: Result:='WINDOW2'; $0040: Result:='BACKUP'; $0041: Result:='PANE'; $0042: Result:='CODEPAGE'; $0043: Result:='XF'; $0044: Result:='IXFE'; $004D: Result:='PLS'; $0050: Result:='DCON'; $0051: Result:='DCONREF'; $0053: Result:='DCONNAME'; $0055: Result:='DEFCOLWIDTH'; $0056: Result:='BUILTINFMTCNT'; $0059: Result:='XCT'; $005A: Result:='CRN'; $005B: Result:='FILESHARING'; $005C: Result:='WRITEACCESS'; $005D: Result:='OBJ'; $005E: Result:='UNCALCED'; $005F: Result:='SAFERECALC'; $0060: Result:='TEMPLATE'; $0063: Result:='OBJPROTECT'; $007D: Result:='COLINFO'; $007E: Result:='RK'; $007F: Result:='IMDATA'; $0080: Result:='GUTS'; $0081: Result:='WSBOOL'; $0082: Result:='GRIDSET'; $0083: Result:='HCENTER'; $0084: Result:='VCENTER'; $0085: Result:='BOUNDSHEET'; $0086: Result:='WRITEPROT'; $0087: Result:='ADDIN'; $0088: Result:='EDG'; $0089: Result:='PUB'; $008C: Result:='COUNTRY'; $008D: Result:='HIDEOBJ'; $008E: Result:='BUNDLESOFFSET'; $008F: Result:='BUNDLEHEADER'; $0090: Result:='SORT'; $0091: Result:='SUB'; $0092: Result:='PALETTE'; $0093: Result:='STYLE'; $0094: Result:='LHRECORD'; $0095: Result:='LHNGRAPH'; $0096: Result:='SOUND'; $0098: Result:='LPR'; $0099: Result:='STANDARDWIDTH'; $009A: Result:='FNGROUPNAME'; $009B: Result:='FILTERMODE'; $009C: Result:='FNGROUPCOUNT'; $009D: Result:='AUTOFILTERINFO'; $009E: Result:='AUTOFILTER'; $00A0: Result:='SCL'; $00A1: Result:='SETUP'; $00A9: Result:='COORDLIST'; $00AB: Result:='GCW'; $00AE: Result:='SCENMAN'; $00AF: Result:='SCENARIO'; $00B0: Result:='SXVIEW'; $00B1: Result:='SXVD'; $00B2: Result:='SXVI'; $00B4: Result:='SXIVD'; $00B5: Result:='SXLI'; $00B6: Result:='SXPI'; $00B8: Result:='DOCROUTE'; $00B9: Result:='RECIPNAME'; $00BC: Result:='SHRFMLA'; $00BD: Result:='MULRK'; $00BE: Result:='MULBLANK'; $00C1: Result:='MMS'; $00C2: Result:='ADDMENU'; $00C3: Result:='DELMENU'; $00C5: Result:='SXDI'; $00C6: Result:='SXDB'; $00C7: Result:='SXFIELD'; $00C8: Result:='SXINDEXLIST'; $00C9: Result:='SXDOUBLE'; $00CD: Result:='SXSTRING'; $00CE: Result:='SXDATETIME'; $00D0: Result:='SXTBL'; $00D1: Result:='SXTBRGITEM'; $00D2: Result:='SXTBPG'; $00D3: Result:='OBPROJ'; $00D5: Result:='SXIDSTM'; $00D6: Result:='RSTRING'; $00D7: Result:='DBCELL'; $00DA: Result:='BOOKBOOL'; $00DC: Result:='SXEXT|PARAMQRY'; $00DD: Result:='SCENPROTECT'; $00DE: Result:='OLESIZE'; $00DF: Result:='UDDESC'; $00E0: Result:='XF'; $00E1: Result:='INTERFACEHDR'; $00E2: Result:='INTERFACEEND'; $00E3: Result:='SXVS'; $00E5: Result:='CELLMERGING'; $00E9: Result:='BITMAP'; $00EB: Result:='MSODRAWINGGROUP'; $00EC: Result:='MSODRAWING'; $00ED: Result:='MSODRAWINGSELECTION'; $00EF: Result:='PHONETIC'; $00F0: Result:='SXRULE'; $00F1: Result:='SXEX'; $00F2: Result:='SXFILT'; $00F6: Result:='SXNAME'; $00F7: Result:='SXSELECT'; $00F8: Result:='SXPAIR'; $00F9: Result:='SXFMLA'; $00FB: Result:='SXFORMAT'; $00FC: Result:='SST'; $00FD: Result:='LABELSST'; $00FF: Result:='EXTSST'; $0100: Result:='SXVDEX'; $0103: Result:='SXFORMULA'; $0122: Result:='SXDBEX'; $0137: Result:='CHTRINSERT'; $0138: Result:='CHTRINFO'; $013B: Result:='CHTRCELLCONTENT'; $013D: Result:='TABID'; $0140: Result:='CHTRMOVERANGE'; $014D: Result:='CHTRINSERTTAB'; $0160: Result:='USESELFS'; $0162: Result:='XL5MODIFY'; $0196: Result:='CHTRHEADER'; $01A9: Result:='USERBVIEW'; $01AA: Result:='USERSVIEWBEGIN'; $01AB: Result:='USERSVIEWEND'; $01AD: Result:='QSI'; $01AE: Result:='SUPBOOK'; $01AF: Result:='PROT4REV'; $0161: Result:='DSF'; $01B0: Result:='CONDFMT'; $01B1: Result:='CF'; $01B2: Result:='DVAL'; $01B5: Result:='DCONBIN'; $01B6: Result:='TXO'; $01B7: Result:='REFRESHALL'; $01B8: Result:='HLINK'; $01BA: Result:='CODENAME'; $01BB: Result:='SXFDBTYPE'; $01BC: Result:='PROT4REVPASS'; $01BE: Result:='DV'; $01C0: Result:='XL9FILE'; $01C1: Result:='RECALCID'; $0200: Result:='DIMENSIONS'; $0201: Result:='BLANK'; $0203: Result:='NUMBER'; $0204: Result:='LABEL'; $0205: Result:='BOOLERR'; $0206: Result:='FORMULA'; $0207: Result:='STRING'; $0208: Result:='ROW'; $0209: Result:='BOF'; $020B: Result:='INDEX'; $0218: Result:='NAME'; $0221: Result:='ARRAY'; $0223: Result:='EXTERNNAME'; $0225: Result:='DEFAULTROWHEIGHT'; $0231: Result:='FONT'; $0236: Result:='TABLE'; $023E: Result:='WINDOW2'; $0243: Result:='XF'; $027E: Result:='RK'; $0293: Result:='STYLE'; $0406: Result:='FORMULA'; $0409: Result:='BOF'; $041E: Result:='FORMAT'; $0443: Result:='XF'; $04BC: Result:='SHRFMLA'; $0800: Result:='SCREENTIP'; $0803: Result:='WEBQRYSETTINGS'; $0804: Result:='WEBQRYTABLES'; $0809: Result:='BOF'; $1001: Result:='UNITS'; $1002: Result:='ChartChart'; $1003: Result:='ChartSeries'; $1006: Result:='ChartDataformat'; $1007: Result:='ChartLineformat'; $1009: Result:='ChartMarkerformat'; $100A: Result:='ChartAreaformat'; $100B: Result:='ChartPieformat'; $100C: Result:='ChartAttachedlabel'; $100D: Result:='ChartSeriestext'; $1014: Result:='ChartChartformat'; $1015: Result:='ChartLegend'; $1016: Result:='ChartSerieslist'; $1017: Result:='ChartBar'; $1018: Result:='ChartLine'; $1019: Result:='ChartPie'; $101A: Result:='ChartArea'; $101B: Result:='ChartScatter'; $101C: Result:='ChartChartline'; $101D: Result:='ChartAxis'; $101E: Result:='ChartTick'; $101F: Result:='ChartValuerange'; $1020: Result:='ChartCatserrange'; $1021: Result:='ChartAxislineformat'; $1022: Result:='ChartFormatlink'; $1024: Result:='ChartDefaulttext'; $1025: Result:='ChartText'; $1026: Result:='ChartFontx'; $1027: Result:='ChartObjectLink'; $1032: Result:='ChartFrame'; $1033: Result:='BEGIN'; $1034: Result:='END'; $1035: Result:='ChartPlotarea'; $103A: Result:='Chart3D'; $103C: Result:='ChartPicf'; $103D: Result:='ChartDropbar'; $103E: Result:='ChartRadar'; $103F: Result:='ChartSurface'; $1040: Result:='ChartRadararea'; $1041: Result:='ChartAxisparent'; $1043: Result:='ChartLegendxn'; $1044: Result:='ChartShtprops'; $1045: Result:='ChartSertocrt'; $1046: Result:='ChartAxesused'; $1048: Result:='ChartSbaseref'; $104A: Result:='ChartSerparent'; $104B: Result:='ChartSerauxtrend'; $104E: Result:='ChartIfmt'; $104F: Result:='ChartPos'; $1050: Result:='ChartAlruns'; $1051: Result:='ChartAI'; $105B: Result:='ChartSerauxerrbar'; $105C: Result:='ChartClrClient'; $105D: Result:='ChartSerfmt'; $105F: Result:='Chart3DDataFormat'; $1060: Result:='ChartFbi'; $1061: Result:='ChartBoppop'; $1062: Result:='ChartAxcext'; $1063: Result:='ChartDat'; $1064: Result:='ChartPlotgrowth'; $1065: Result:='ChartSiindex'; $1066: Result:='ChartGelframe'; $1067: Result:='ChartBoppcustom'; else Result:=' ???? '; end; //case end; end.