home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 October / Chip_2002-10_cd1.bin / zkuste / delphi / kolekce / d56 / FLEXCEL.ZIP / BiffEdit / UBiffEditUtil.pas < prev    next >
Pascal/Delphi Source File  |  2002-05-28  |  13KB  |  418 lines

  1. unit UBiffEditUtil;
  2.  
  3. interface
  4. uses SysUtils, Classes, ActiveX;
  5. const
  6.   OptionsRead = STGM_DIRECT or STGM_SHARE_EXCLUSIVE or STGM_READ;
  7.   OptionsWrite = STGM_DIRECT or STGM_SHARE_EXCLUSIVE or STGM_WRITE;
  8.  
  9.   PanelTotalRecords=0;
  10.   PanelCurrentRecord=1;
  11.   PanelCursorPos=2;
  12.  
  13.   WorkbookStr:widestring='\Workbook';
  14.  
  15. resourcestring
  16.   ErrInvalidRecord='Invalid Record';
  17.   ErrFileDestSameSource='The file should be saved to a different file';
  18.   ErrCantReadFile='Cant read file "%s"';
  19.   ErrFileIsNotXLS='The file "%s" is invalid';
  20.   ErrBadString='Can''t convert hex values to register values';
  21.   ErrBadLen='Invalid string length';
  22.  
  23.   WarFileTooBig='This file is big and loading it can take several minutes. ┐Do you want to continue loading?';
  24.   WarEscherBig='This record is continued in the next. You can view it, but not change it';
  25.  
  26.   ErrEscherRecord='Error reading Escher record';
  27.  
  28.   TxtStatus= ' Records: %d';
  29.   TxtSelection=' Selection: %d records';
  30.   TxtCurrentRecord= 'Current: %d';
  31.   TxtCursorPos=' Byte: %d';
  32. type
  33.   TRecordHeader = packed record
  34.     Id: word;
  35.     Size: word;
  36.   end;
  37.  
  38. //*****************************************************************************
  39. {**} function SkipZero(const s:string):string;
  40. {**} function TrimWoZero(const s:string):string;
  41. {**} function StrToHex(const s:string):string;
  42. {**} function GetIdName(Const Id: word): string;
  43. {**} function HexToStr(const s:string; const Len: integer):string;
  44. {**} function ParseRecord(const s: string; var Id: word; var Version:Word; var Size: int64; var HexData: string; var Posi: integer; const IsBiff: boolean): boolean;
  45. //*****************************************************************************
  46.  
  47. implementation
  48. function SkipZero(const s:string):string;
  49. var
  50.   i:integer;
  51. begin
  52.   Result:='';
  53.   for i:=1 to Length(s) do if s[i] in [#0..#31,'"',''''] then result:=result+'.' else result:=result+s[i];
  54. end;
  55.  
  56. function TrimWoZero(const s:string):string;
  57. var
  58.   R: string;
  59. begin
  60.   R:=Trim(s);
  61.   while (length(R)>0) and (R[1]='0') do delete(R,1,1);
  62.   Result:=R;
  63. end;
  64.  
  65. function StrToHex(const s:string):string;
  66. var
  67.   i,z:integer;
  68.   P:PChar;
  69.  
  70. begin
  71.   if Length(s)=0 then begin; Result:='';exit;end;
  72.   SetLength(Result, 3*Length(s)+1); //the extra byte is for #0;
  73.   P:=PChar(@(Result[1]));
  74.   z:=0;
  75.   for i:=1 to Length(s) do
  76.   begin
  77.     StrFmt(P+Z, '%2.2x ',[ord(s[i])]);
  78.     inc(z,3);
  79.   end;
  80.   SetLength(Result, 3*Length(s));
  81. end;
  82.  
  83. function HexToStr(const s:string; const Len: integer):string;
  84. var
  85.   i,k:integer;
  86. begin
  87.   SetLength(Result, Len);
  88.   k:=1;
  89.   for i:=1 to Len do
  90.   begin
  91.     if k+1>length(s) then Raise Exception.Create(ErrBadString);
  92.     Result[i]:=chr(StrToInt('$'+ s[k]+ s[k+1]));
  93.     if (k+2<=length(s)) and (s[k+2]<>' ') then Raise Exception.Create(ErrBadString);
  94.     inc(k,3);
  95.   end;
  96.   if length(s)>=k then Raise Exception.Create(ErrBadString);
  97. end;
  98.  
  99. function ParseRecord(const s: string; var Id: word; var Version:Word; var Size: int64; var HexData: string; var Posi: integer; const IsBiff: boolean): boolean;
  100. var
  101.   Posi2: integer;
  102. begin
  103.   if Posi>Length(s) then begin Result:=false;exit;end;
  104.  
  105.   Posi2:= Posi+ Pos(#9,Copy(s,Posi,length(s)));
  106.   Posi:=Posi2; Posi2:= Posi+ Pos(#9,Copy(s,Posi,length(s)));
  107.   Id:=StrToInt64('$'+Trim(Copy(s,Posi,Posi2-Posi-1)));
  108.   Posi:=Posi2; Posi2:= Posi+ Pos(#9,Copy(s,Posi,length(s)));
  109.   if not IsBiff then
  110.   begin
  111.     Version:=StrToInt64('$'+Trim(Copy(s,Posi,Posi2-Posi-1)));
  112.     Posi:=Posi2; Posi2:= Posi+ Pos(#9,Copy(s,Posi,length(s)));
  113.   end;
  114.  
  115.   Size:=StrToInt64(Trim(Copy(s,Posi,Posi2-Posi-1)));
  116.   Posi:=Posi2; Posi2:= Posi+ Pos(#9,Copy(s,Posi,length(s)));
  117.   Posi:=Posi2; Posi2:= Posi+ Pos(#9,Copy(s,Posi,length(s)));
  118.   Posi:=Posi2; Posi2:= Posi+ Pos(#10,Copy(s,Posi,length(s)));
  119.   HexData:=Copy(s,Posi,Posi2-Posi-2);
  120.   Posi:=Posi2;
  121.   Result:=true;
  122. end;
  123.  
  124. function GetIdName(Const Id: word): string;
  125. begin
  126.   case Id of
  127.     $0001: Result:='BLANK';
  128.     $0002: Result:='INTEGER';
  129.     $0003: Result:='NUMBER';
  130.     $0004: Result:='LABEL';
  131.     $0005: Result:='BOOLERR';
  132.     $0006: Result:='FORMULA';
  133.     $0007: Result:='STRING';
  134.     $0008: Result:='ROW';
  135.     $0009: Result:='BOF';
  136.     $000A: Result:='EOF';
  137.     $000B: Result:='INDEX';
  138.     $000C: Result:='CALCCOUNT';
  139.     $000D: Result:='CALCMODE';
  140.     $000E: Result:='PRECISION';
  141.     $000F: Result:='REFMODE';
  142.     $0010: Result:='DELTA';
  143.     $0011: Result:='ITERATION';
  144.     $0012: Result:='PROTECT';
  145.     $0013: Result:='PASSWORD';
  146.     $0014: Result:='HEADER';
  147.     $0015: Result:='FOOTER';
  148.     $0016: Result:='EXTERNCOUNT';
  149.     $0017: Result:='EXTERNSHEET';
  150.     $0018: Result:='NAME';
  151.     $0019: Result:='WINDOWPROTECT';
  152.     $001A: Result:='VERTICALPAGEBREAKS';
  153.     $001B: Result:='HORIZONTALPAGEBREAKS';
  154.     $001C: Result:='NOTE';
  155.     $001D: Result:='SELECTION';
  156.     $001E: Result:='FORMAT';
  157.     $001F: Result:='FORMATCOUNT';
  158.     $0020: Result:='COLUMNDEFAULT';
  159.     $0021: Result:='ARRAY';
  160.     $0022: Result:='1904';
  161.     $0023: Result:='EXTERNNAME';
  162.     $0024: Result:='COLWIDTH';
  163.     $0025: Result:='DEFAULTROWHEIGHT';
  164.     $0026: Result:='LEFTMARGIN';
  165.     $0027: Result:='RIGHTMARGIN';
  166.     $0028: Result:='TOPMARGIN';
  167.     $0029: Result:='BOTTOMMARGIN';
  168.     $002A: Result:='PRINTHEADERS';
  169.     $002B: Result:='PRINTGRIDLINES';
  170.     $002F: Result:='FILEPASS';
  171.     $0031: Result:='FONT';
  172.     $0033: Result:='PRINTSIZE';
  173.     $0036: Result:='TABLE';
  174.     $003C: Result:='CONTINUE';
  175.     $003D: Result:='WINDOW1';
  176.     $003E: Result:='WINDOW2';
  177.     $0040: Result:='BACKUP';
  178.     $0041: Result:='PANE';
  179.     $0042: Result:='CODEPAGE';
  180.     $0043: Result:='XF';
  181.     $0044: Result:='IXFE';
  182.     $004D: Result:='PLS';
  183.     $0050: Result:='DCON';
  184.     $0051: Result:='DCONREF';
  185.     $0053: Result:='DCONNAME';
  186.     $0055: Result:='DEFCOLWIDTH';
  187.     $0056: Result:='BUILTINFMTCNT';
  188.     $0059: Result:='XCT';
  189.     $005A: Result:='CRN';
  190.     $005B: Result:='FILESHARING';
  191.     $005C: Result:='WRITEACCESS';
  192.     $005D: Result:='OBJ';
  193.     $005E: Result:='UNCALCED';
  194.     $005F: Result:='SAFERECALC';
  195.     $0060: Result:='TEMPLATE';
  196.     $0063: Result:='OBJPROTECT';
  197.     $007D: Result:='COLINFO';
  198.     $007E: Result:='RK';
  199.     $007F: Result:='IMDATA';
  200.     $0080: Result:='GUTS';
  201.     $0081: Result:='WSBOOL';
  202.     $0082: Result:='GRIDSET';
  203.     $0083: Result:='HCENTER';
  204.     $0084: Result:='VCENTER';
  205.     $0085: Result:='BOUNDSHEET';
  206.     $0086: Result:='WRITEPROT';
  207.     $0087: Result:='ADDIN';
  208.     $0088: Result:='EDG';
  209.     $0089: Result:='PUB';
  210.     $008C: Result:='COUNTRY';
  211.     $008D: Result:='HIDEOBJ';
  212.     $008E: Result:='BUNDLESOFFSET';
  213.     $008F: Result:='BUNDLEHEADER';
  214.     $0090: Result:='SORT';
  215.     $0091: Result:='SUB';
  216.     $0092: Result:='PALETTE';
  217.     $0093: Result:='STYLE';
  218.     $0094: Result:='LHRECORD';
  219.     $0095: Result:='LHNGRAPH';
  220.     $0096: Result:='SOUND';
  221.     $0098: Result:='LPR';
  222.     $0099: Result:='STANDARDWIDTH';
  223.     $009A: Result:='FNGROUPNAME';
  224.     $009B: Result:='FILTERMODE';
  225.     $009C: Result:='FNGROUPCOUNT';
  226.     $009D: Result:='AUTOFILTERINFO';
  227.     $009E: Result:='AUTOFILTER';
  228.     $00A0: Result:='SCL';
  229.     $00A1: Result:='SETUP';
  230.     $00A9: Result:='COORDLIST';
  231.     $00AB: Result:='GCW';
  232.     $00AE: Result:='SCENMAN';
  233.     $00AF: Result:='SCENARIO';
  234.     $00B0: Result:='SXVIEW';
  235.     $00B1: Result:='SXVD';
  236.     $00B2: Result:='SXVI';
  237.     $00B4: Result:='SXIVD';
  238.     $00B5: Result:='SXLI';
  239.     $00B6: Result:='SXPI';
  240.     $00B8: Result:='DOCROUTE';
  241.     $00B9: Result:='RECIPNAME';
  242.     $00BC: Result:='SHRFMLA';
  243.     $00BD: Result:='MULRK';
  244.     $00BE: Result:='MULBLANK';
  245.     $00C1: Result:='MMS';
  246.     $00C2: Result:='ADDMENU';
  247.     $00C3: Result:='DELMENU';
  248.     $00C5: Result:='SXDI';
  249.     $00C6: Result:='SXDB';
  250.     $00C7: Result:='SXFIELD';
  251.     $00C8: Result:='SXINDEXLIST';
  252.     $00C9: Result:='SXDOUBLE';
  253.     $00CD: Result:='SXSTRING';
  254.     $00CE: Result:='SXDATETIME';
  255.     $00D0: Result:='SXTBL';
  256.     $00D1: Result:='SXTBRGITEM';
  257.     $00D2: Result:='SXTBPG';
  258.     $00D3: Result:='OBPROJ';
  259.     $00D5: Result:='SXIDSTM';
  260.     $00D6: Result:='RSTRING';
  261.     $00D7: Result:='DBCELL';
  262.     $00DA: Result:='BOOKBOOL';
  263.     $00DC: Result:='SXEXT|PARAMQRY';
  264.     $00DD: Result:='SCENPROTECT';
  265.     $00DE: Result:='OLESIZE';
  266.     $00DF: Result:='UDDESC';
  267.     $00E0: Result:='XF';
  268.     $00E1: Result:='INTERFACEHDR';
  269.     $00E2: Result:='INTERFACEEND';
  270.     $00E3: Result:='SXVS';
  271.     $00E5: Result:='CELLMERGING';
  272.     $00E9: Result:='BITMAP';
  273.     $00EB: Result:='MSODRAWINGGROUP';
  274.     $00EC: Result:='MSODRAWING';
  275.     $00ED: Result:='MSODRAWINGSELECTION';
  276.     $00EF: Result:='PHONETIC';
  277.     $00F0: Result:='SXRULE';
  278.     $00F1: Result:='SXEX';
  279.     $00F2: Result:='SXFILT';
  280.     $00F6: Result:='SXNAME';
  281.     $00F7: Result:='SXSELECT';
  282.     $00F8: Result:='SXPAIR';
  283.     $00F9: Result:='SXFMLA';
  284.     $00FB: Result:='SXFORMAT';
  285.     $00FC: Result:='SST';
  286.     $00FD: Result:='LABELSST';
  287.     $00FF: Result:='EXTSST';
  288.     $0100: Result:='SXVDEX';
  289.     $0103: Result:='SXFORMULA';
  290.     $0122: Result:='SXDBEX';
  291.     $0137: Result:='CHTRINSERT';
  292.     $0138: Result:='CHTRINFO';
  293.     $013B: Result:='CHTRCELLCONTENT';
  294.     $013D: Result:='TABID';
  295.     $0140: Result:='CHTRMOVERANGE';
  296.     $014D: Result:='CHTRINSERTTAB';
  297.     $0160: Result:='USESELFS';
  298.     $0162: Result:='XL5MODIFY';
  299.     $0196: Result:='CHTRHEADER';
  300.     $01A9: Result:='USERBVIEW';
  301.     $01AA: Result:='USERSVIEWBEGIN';
  302.     $01AB: Result:='USERSVIEWEND';
  303.     $01AD: Result:='QSI';
  304.     $01AE: Result:='SUPBOOK';
  305.     $01AF: Result:='PROT4REV';
  306.     $0161: Result:='DSF';
  307.     $01B0: Result:='CONDFMT';
  308.     $01B1: Result:='CF';
  309.     $01B2: Result:='DVAL';
  310.     $01B5: Result:='DCONBIN';
  311.     $01B6: Result:='TXO';
  312.     $01B7: Result:='REFRESHALL';
  313.     $01B8: Result:='HLINK';
  314.     $01BA: Result:='CODENAME';
  315.     $01BB: Result:='SXFDBTYPE';
  316.     $01BC: Result:='PROT4REVPASS';
  317.     $01BE: Result:='DV';
  318.     $01C0: Result:='XL9FILE';
  319.     $01C1: Result:='RECALCID';
  320.     $0200: Result:='DIMENSIONS';
  321.     $0201: Result:='BLANK';
  322.     $0203: Result:='NUMBER';
  323.     $0204: Result:='LABEL';
  324.     $0205: Result:='BOOLERR';
  325.     $0206: Result:='FORMULA';
  326.     $0207: Result:='STRING';
  327.     $0208: Result:='ROW';
  328.     $0209: Result:='BOF';
  329.     $020B: Result:='INDEX';
  330.     $0218: Result:='NAME';
  331.     $0221: Result:='ARRAY';
  332.     $0223: Result:='EXTERNNAME';
  333.     $0225: Result:='DEFAULTROWHEIGHT';
  334.     $0231: Result:='FONT';
  335.     $0236: Result:='TABLE';
  336.     $023E: Result:='WINDOW2';
  337.     $0243: Result:='XF';
  338.     $027E: Result:='RK';
  339.     $0293: Result:='STYLE';
  340.     $0406: Result:='FORMULA';
  341.     $0409: Result:='BOF';
  342.     $041E: Result:='FORMAT';
  343.     $0443: Result:='XF';
  344.     $04BC: Result:='SHRFMLA';
  345.     $0800: Result:='SCREENTIP';
  346.     $0803: Result:='WEBQRYSETTINGS';
  347.     $0804: Result:='WEBQRYTABLES';
  348.     $0809: Result:='BOF';
  349.     $1001: Result:='UNITS';
  350.     $1002: Result:='ChartChart';
  351.     $1003: Result:='ChartSeries';
  352.     $1006: Result:='ChartDataformat';
  353.     $1007: Result:='ChartLineformat';
  354.     $1009: Result:='ChartMarkerformat';
  355.     $100A: Result:='ChartAreaformat';
  356.     $100B: Result:='ChartPieformat';
  357.     $100C: Result:='ChartAttachedlabel';
  358.     $100D: Result:='ChartSeriestext';
  359.     $1014: Result:='ChartChartformat';
  360.     $1015: Result:='ChartLegend';
  361.     $1016: Result:='ChartSerieslist';
  362.     $1017: Result:='ChartBar';
  363.     $1018: Result:='ChartLine';
  364.     $1019: Result:='ChartPie';
  365.     $101A: Result:='ChartArea';
  366.     $101B: Result:='ChartScatter';
  367.     $101C: Result:='ChartChartline';
  368.     $101D: Result:='ChartAxis';
  369.     $101E: Result:='ChartTick';
  370.     $101F: Result:='ChartValuerange';
  371.     $1020: Result:='ChartCatserrange';
  372.     $1021: Result:='ChartAxislineformat';
  373.     $1022: Result:='ChartFormatlink';
  374.     $1024: Result:='ChartDefaulttext';
  375.     $1025: Result:='ChartText';
  376.     $1026: Result:='ChartFontx';
  377.     $1027: Result:='ChartObjectLink';
  378.     $1032: Result:='ChartFrame';
  379.     $1033: Result:='BEGIN';
  380.     $1034: Result:='END';
  381.     $1035: Result:='ChartPlotarea';
  382.     $103A: Result:='Chart3D';
  383.     $103C: Result:='ChartPicf';
  384.     $103D: Result:='ChartDropbar';
  385.     $103E: Result:='ChartRadar';
  386.     $103F: Result:='ChartSurface';
  387.     $1040: Result:='ChartRadararea';
  388.     $1041: Result:='ChartAxisparent';
  389.     $1043: Result:='ChartLegendxn';
  390.     $1044: Result:='ChartShtprops';
  391.     $1045: Result:='ChartSertocrt';
  392.     $1046: Result:='ChartAxesused';
  393.     $1048: Result:='ChartSbaseref';
  394.     $104A: Result:='ChartSerparent';
  395.     $104B: Result:='ChartSerauxtrend';
  396.     $104E: Result:='ChartIfmt';
  397.     $104F: Result:='ChartPos';
  398.     $1050: Result:='ChartAlruns';
  399.     $1051: Result:='ChartAI';
  400.     $105B: Result:='ChartSerauxerrbar';
  401.     $105C: Result:='ChartClrClient';
  402.     $105D: Result:='ChartSerfmt';
  403.     $105F: Result:='Chart3DDataFormat';
  404.     $1060: Result:='ChartFbi';
  405.     $1061: Result:='ChartBoppop';
  406.     $1062: Result:='ChartAxcext';
  407.     $1063: Result:='ChartDat';
  408.     $1064: Result:='ChartPlotgrowth';
  409.     $1065: Result:='ChartSiindex';
  410.     $1066: Result:='ChartGelframe';
  411.     $1067: Result:='ChartBoppcustom';
  412.     else Result:=' ???? ';
  413.   end; //case
  414. end;
  415.  
  416.  
  417. end.
  418.