⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 biffrecsii2.pas

📁 一个经典的读写Excel的控件
💻 PAS
📖 第 1 页 / 共 3 页
字号:
unit BIFFRecsII2;

{
********************************************************************************
******* XLSReadWriteII V2.00                                             *******
*******                                                                  *******
******* Copyright(C) 1999,2004 Lars Arvidsson, Axolot Data               *******
*******                                                                  *******
******* email: components@axolot.com                                     *******
******* URL:   http://www.axolot.com                                     *******
********************************************************************************
** Users of the XLSReadWriteII component must accept the following            **
** disclaimer of warranty:                                                    **
**                                                                            **
** XLSReadWriteII is supplied as is. The author disclaims all warranties,     **
** expressedor implied, including, without limitation, the warranties of      **
** merchantability and of fitness for any purpose. The author assumes no      **
** liability for damages, direct or consequential, which may result from the  **
** use of XLSReadWriteII.                                                     **
********************************************************************************
}

{$B-}

interface

const MAXCOL = 255;
const MAXROW = 65535;

const MAXRECSZ_40 = 2080;
const MAXRECSZ_97 = 8224;

const MAX_EXCEL_STRSZ = 32767;

const DEFAULT_FORMAT = 15;
const DEFAULT_FORMATS_COUNT_50 = 16;
const DEFAULT_FORMATS_COUNT_97 = 21;
const DEFAULT_FORMAT40 = 20;

const DEFAULT_FONT = 0;
const DEFAULT_FONTS_COUNT = 5;

const BIFFRECID_INTEGER_20 =        $0002;
const BIFFRECID_NUMBER_20 =         $0003;
const BIFFRECID_LABEL_20 =          $0004;
const BIFFRECID_STRING_20 =         $0007;

const BIFFRECID_00EF =              $00EF;

const BIFFRECID_1904 =              $0022;
const BIFFRECID_ARRAY =             $0221;
const BIFFRECID_BACKUP =            $0040;
const BIFFRECID_BLANK =             $0201;
const BIFFRECID_BOF =               $0009;
const BIFFRECID_BOF8 =              $0809;
const BIFFRECID_BOOKBOOL =          $00DA;
const BIFFRECID_BOOLERR =           $0205;
const BIFFRECID_BOTTOMMARGIN =      $0029;
const BIFFRECID_BOUNDSHEET =        $0085;
const BIFFRECID_CALCMODE =          $000D;
const BIFFRECID_CALCCOUNT =         $000C;
//const BIFFRECID_CODENAME =          $00;
const BIFFRECID_CODENAME_VBE =      $0042; // Yes, they have the same id.
const BIFFRECID_CODEPAGE =          $0042; //
const BIFFRECID_COLINFO =           $007D;
const BIFFRECID_CONTINUE =          $003C;
const BIFFRECID_CONDFMT =           $01B0;
const BIFFRECID_CF =                $01B1;
const BIFFRECID_COUNTRY =           $008C;
const BIFFRECID_CRN =               $005A;
const BIFFRECID_DBCELL =            $00D7;
const BIFFRECID_DCONREF =           $0051;
const BIFFRECID_DEFAULTROWHEIGHT =  $0225;
const BIFFRECID_DEFCOLWIDTH =       $0055;
const BIFFRECID_DELTA =             $0010;
const BIFFRECID_DIMENSIONS_20 =     $0000;
const BIFFRECID_DIMENSIONS =        $0200;
const BIFFRECID_DSF =               $0161;
const BIFFRECID_DV =                $01BE;
const BIFFRECID_DVAL =              $01B2;
const BIFFRECID_EOF =               $000A;
const BIFFRECID_EXCEL9FILE =        $01C0;
const BIFFRECID_EXTERNCOUNT =       $0016;
const BIFFRECID_EXTERNNAME =        $0023;
const BIFFRECID_EXTERNSHEET =       $0017;
const BIFFRECID_FILEPASS =          $002F;
const BIFFRECID_EXTSST =            $00FF;
const BIFFRECID_FILESHARING =       $005B;
const BIFFRECID_FNGROUPCOUNT =      $009C;
const BIFFRECID_FONT =              $0031;
const BIFFRECID_FOOTER =            $0015;
const BIFFRECID_FORMAT =            $041E;
const BIFFRECID_FORMULA =           $0006;
const BIFFRECID_FORMULA_30 =        $0206;
const BIFFRECID_FORMULA_40 =        $0406;
const BIFFRECID_GRIDSET =           $0082;
const BIFFRECID_GUTS =              $0080;
const BIFFRECID_HCENTER =           $0083;
const BIFFRECID_HEADER =            $0014;
const BIFFRECID_HIDEOBJ =           $008D;
const BIFFRECID_HLINK =             $01B8;
const BIFFRECID_HLINKTOOLTIP =      $0800;
const BIFFRECID_HORIZONTALPAGEBREAKS = $001B;
const BIFFRECID_INDEX =             $020B;
const BIFFRECID_INTERFACEHDR =      $00E1;
const BIFFRECID_INTERFACEEND =      $00E2;
const BIFFRECID_ITERATION =         $0011;
const BIFFRECID_LABEL =             $0204;
const BIFFRECID_LABELSST =          $00FD;
const BIFFRECID_LEFTMARGIN =        $0026;
const BIFFRECID_MERGEDCELLS =       $00E5;
const BIFFRECID_MSODRAWING =        $00EC;
const BIFFRECID_MSODRAWINGGROUP =   $00EB;
const BIFFRECID_MSODRAWINGSELECTION=$00ED;
const BIFFRECID_MULRK =             $00BD;
const BIFFRECID_MULBLANK =          $00BE;
const BIFFRECID_NAME =              $0018;
const BIFFRECID_NOTE =              $001C;
const BIFFRECID_NUMBER =            $0203;
const BIFFRECID_OBJ =               $005D;
const BIFFRECID_OBPROJ =            $00D3;
const BIFFRECID_PALETTE =           $0092;
const BIFFRECID_PANE =              $0041;
const BIFFRECID_PASSWORD =          $0013;
const BIFFRECID_PRECISION =         $000E;
const BIFFRECID_PRINTGRIDLINES =    $002B;
const BIFFRECID_PRINTHEADERS =      $002A;
const BIFFRECID_PROT4REV =          $01AF;
const BIFFRECID_PROT4REVPASS =      $01BC;
const BIFFRECID_PROTECT =           $0012;
const BIFFRECID_RECALCID =          $01C1;
const BIFFRECID_REFRESHALL =        $01B7;
const BIFFRECID_REFMODE =           $000F;
const BIFFRECID_RIGHTMARGIN =       $0027;
const BIFFRECID_RK =                $007E;
const BIFFRECID_RK7 =               $027E;
const BIFFRECID_PLS =               $004D;
const BIFFRECID_ROW =               $0208;
const BIFFRECID_RSTRING =           $00D6;
const BIFFRECID_SAVERECALC =        $005F;
const BIFFRECID_SCL =               $00A0;
const BIFFRECID_SELECTION =         $001D;
const BIFFRECID_SETUP =             $00A1;
const BIFFRECID_SHRFMLA =           $00BC;
const BIFFRECID_SHRFMLA_20 =        $04BC;
const BIFFRECID_SST =               $00FC;
const BIFFRECID_STRING =            $0207;
const BIFFRECID_STYLE =             $0293;
const BIFFRECID_SUPBOOK =           $01AE;
const BIFFRECID_SXIDSTM =           $00D5;
const BIFFRECID_SXVS =              $00E3;
const BIFFRECID_TABID =             $013D;
const BIFFRECID_TOPMARGIN =         $0028;
const BIFFRECID_TXO =               $01B6;
const BIFFRECID_UNCALCED =          $005E;
const BIFFRECID_USERBVIEW =         $01A9;
const BIFFRECID_USERSVIEWBEGIN =    $01AA;
const BIFFRECID_USERSVIEWEND =      $01AB;
const BIFFRECID_USESELFS =          $0160;
const BIFFRECID_VCENTER =           $0084;
const BIFFRECID_VERTICALPAGEBREAKS =$001A;
const BIFFRECID_WINDOW1 =           $003D;
const BIFFRECID_WINDOW2 =           $023E;
const BIFFRECID_WINDOWPROTECT =     $0019;
const BIFFRECID_WRITEACCESS =       $005C;
const BIFFRECID_WSBOOL =            $0081;
const BIFFRECID_XCT =               $0059;
const BIFFRECID_XF =                $00E0;
const BIFFRECID_XF_30 =             $0243;
const BIFFRECID_XF_40 =             $0443;

const XBIFFRECID_CHART =            $0851;              

const CHARTRECID_3D =               $103A;
const CHARTRECID_AI =               $1051;
const CHARTRECID_ALRUNS =           $1050;
const CHARTRECID_AREA =             $101A;
const CHARTRECID_AREAFORMAT =       $100A;
const CHARTRECID_ATTACHEDLABEL =    $100C;
const CHARTRECID_AXCEXT =           $1062;
const CHARTRECID_AXESUSED =         $1046;
const CHARTRECID_AXIS =             $101D;
const CHARTRECID_AXISLINEFORMAT =   $1021;
const CHARTRECID_AXISPARENT =       $1041;
const CHARTRECID_BAR =              $1017;
const CHARTRECID_BEGIN =            $1033;
const CHARTRECID_BOPPOP =           $1061;
const CHARTRECID_BOPPOPCUSTOM =     $1067;
const CHARTRECID_CATSERRANGE =      $1020;
const CHARTRECID_CHART =            $1002;
const CHARTRECID_CHARTFORMAT =      $1014;
const CHARTRECID_CHARTFORMATLINK =  $1022;
const CHARTRECID_CHARTLINE =        $101C;
const CHARTRECID_DAT =              $1063;
const CHARTRECID_DATAFORMAT =       $1006;
const CHARTRECID_DEFAULTTEXT =      $1024;
const CHARTRECID_DROPBAR =          $103D;
const CHARTRECID_END =              $1034;
const CHARTRECID_FBI =              $1060;
const CHARTRECID_FONTX =            $1026;
const CHARTRECID_FRAME =            $1032;
const CHARTRECID_GELFRAME =         $1066;
const CHARTRECID_GEOMETRY =         $105F;
const CHARTRECID_IFMT =             $104E;
const CHARTRECID_LEGEND =           $1015;
const CHARTRECID_LEGENDXN =         $1043;
const CHARTRECID_LINE =             $1018;
const CHARTRECID_LINEFORMAT =       $1007;
const CHARTRECID_MARKERFORMAT =     $1009;
const CHARTRECID_OBJECTLINK =       $1027;
const CHARTRECID_PICF =             $103C;
const CHARTRECID_PIE =              $1019;
const CHARTRECID_PIEFORMAT =        $100B;
const CHARTRECID_PLOTAREA =         $1035;
const CHARTRECID_PLOTGROWTH =       $1064;
const CHARTRECID_POS =              $104F;
const CHARTRECID_RADAR =            $103E;
const CHARTRECID_RADARAREA =        $1040;
const CHARTRECID_SBASEREF =         $1048;
const CHARTRECID_SCATTER =          $101B;
const CHARTRECID_SERAUXERRBAR =     $105B;
const CHARTRECID_SERAUXTREND =      $104B;
const CHARTRECID_SERFMT =           $105D;
const CHARTRECID_SERIES =           $1003;
const CHARTRECID_SERIESLIST =       $1016;
const CHARTRECID_SERIESTEXT =       $100D;
const CHARTRECID_SERPARENT =        $104A;
const CHARTRECID_SERTOCRT =         $1045;
const CHARTRECID_SHTPROPS =         $1044;
const CHARTRECID_SIINDEX =          $1065;
const CHARTRECID_SURFACE =          $103F;
const CHARTRECID_TEXT =             $1025;
const CHARTRECID_TICK =             $101E;
const CHARTRECID_UNITS =            $1001;
const CHARTRECID_VALUERANGE =       $101F;

const OBJREC_END      = $00;
const OBJREC_MACRO    = $04;
const OBJREC_BUTTON   = $05;
const OBJREC_GMO      = $06;
const OBJREC_CF	      = $07;
const OBJREC_PIOGRBIT = $08;
const OBJREC_PICTFMLA = $09;
const OBJREC_CBLS     = $0A;
const OBJREC_RBO      = $0B;
const OBJREC_SBS      = $0C;
const OBJREC_NTS      = $0D;
const OBJREC_SBSFMLA  = $0E;
const OBJREC_GBODATA  = $0F;
const OBJREC_EDODATA  = $10;
const OBJREC_RBODATA  = $11;
const OBJREC_CBLSDATA = $12;
const OBJREC_LBSDATA  = $13;
const OBJREC_CBLSFMLA = $14;
const OBJREC_CMO      = $15;


const OBJTYPE_GROUP         = $0000;
const OBJTYPE_LINE          = $0001;
const OBJTYPE_RECTANGLE     = $0002;
const OBJTYPE_OVAL          = $0003;
const OBJTYPE_ARC           = $0004;
const OBJTYPE_CHART         = $0005;
const OBJTYPE_TEXT          = $0006;
const OBJTYPE_BUTTON        = $0007;
const OBJTYPE_PICTURE       = $0008;
const OBJTYPE_POLYGON       = $0009;
const OBJTYPE_RESERVED1     = $000A;
const OBJTYPE_CHECK_BOX     = $000B;
const OBJTYPE_OPTION_BUTTON = $000C;
const OBJTYPE_EDIT_BOX      = $000D;
const OBJTYPE_LABEL         = $000E;
const OBJTYPE_DIALOG_BOX    = $000F;
const OBJTYPE_SPINNER       = $0010;
const OBJTYPE_SCROLL_BAR    = $0011;
const OBJTYPE_LIST_BOX      = $0012;
const OBJTYPE_GROUP_BOX     = $0013;
const OBJTYPE_COMBO_BOX     = $0014;
const OBJTYPE_RESERVED2     = $0015;
const OBJTYPE_RESERVED3     = $0016;
const OBJTYPE_RESERVED4     = $0017;
const OBJTYPE_RESERVED5     = $0018;
const OBJTYPE_COMMENT       = $0019;
const OBJTYPE_RESERVED6     = $001A;
const OBJTYPE_RESERVED7     = $001B;
const OBJTYPE_RESERVED8     = $001C;
const OBJTYPE_RESERVED9     = $001D;
const OBJTYPE_MICROSOFT_OFFICE_DRAWING = $001E;


const
  ptgExp         = $01;
  ptgTbl         = $02;
  ptgAdd         = $03;
  ptgSub         = $04;
  ptgMul         = $05;
  ptgDiv         = $06;
  ptgPower       = $07;
  ptgConcat      = $08;
  ptgLT	         = $09;
  ptgLE	         = $0A;
  ptgEQ	         = $0B;
  ptgGE	         = $0C;
  ptgGT	         = $0D;
  ptgNE	         = $0E;
  ptgIsect       = $0F;
  ptgUnion       = $10;
  ptgRange       = $11;
  ptgUplus       = $12;
  ptgUminus      = $13;
  ptgPercent     = $14;
  ptgParen       = $15;
  ptgMissArg     = $16;
  ptgStr         = $17;
  ptgExtend      = $18;
  ptgAttr        = $19;
  ptgSheet       = $1A;
  ptgEndSheet    = $1B;
  ptgErr         = $1C;
  ptgBool        = $1D;
  ptgInt         = $1E;
  ptgNum         = $1F;
  ptgArray       = $20;
  ptgFunc        = $21;
  ptgFuncVar     = $22;
  ptgName        = $23;
  ptgRef         = $24;
  ptgArea        = $25;
  ptgMemArea     = $26;
  ptgMemErr      = $27;
  ptgMemNoMem    = $28;
  ptgMemFunc     = $29;
  ptgRefErr      = $2A;
  ptgAreaErr     = $2B;
  ptgRefN        = $2C;
  ptgAreaN       = $2D;
  ptgMemAreaN    = $2E;
  ptgMemNoMemN   = $2F;
  ptgNameX       = $39;
  ptgRef3d       = $3A;
  ptgArea3d      = $3B;
  ptgRefErr3d    = $3C;
  ptgAreaErr3d   = $3D;
  ptgArrayV      = $40;
  ptgFuncV       = $41;
  ptgFuncVarV    = $42;
  ptgNameV       = $43;
  ptgRefV        = $44;
  ptgAreaV       = $45;
  ptgMemAreaV    = $46;
  ptgMemErrV     = $47;
  ptgMemNoMemV   = $48;
  ptgMemFuncV    = $49;
  ptgRefErrV     = $4A;
  ptgAreaErrV    = $4B;
  ptgRefNV       = $4C;
  ptgAreaNV      = $4D;
  ptgMemAreaNV   = $4E;
  ptgMemNoMemNV  = $4F;
  ptgFuncCEV     = $58;
  ptgNameXV      = $59;
  ptgRef3dV      = $5A;
  ptgArea3dV     = $5B;
  ptgRefErr3dV   = $5C;
  ptgAreaErr3dV  = $5D;
  ptgArrayA      = $60;
  ptgFuncA       = $61;
  ptgFuncVarA    = $62;
  ptgNameA       = $63;
  ptgRefA        = $64;
  ptgAreaA       = $65;
  ptgMemAreaA    = $66;
  ptgMemErrA     = $67;
  ptgMemNoMemA   = $68;
  ptgMemFuncA    = $69;
  ptgRefErrA     = $6A;
  ptgAreaErrA    = $6B;
  ptgRefNA       = $6C;
  ptgAreaNA      = $6D;
  ptgMemAreaNA   = $6E;
  ptgMemNoMemNA  = $6F;
  ptgFuncCEA     = $78;
  ptgNameXA      = $79;
  ptgRef3dA      = $7A;
  ptgArea3dA     = $7B;
  ptgRefErr3dA   = $7C;
  ptgAreaErr3dA  = $7D;
                            // Size
  eptgElfLel	    = $01;  // 4
  eptgElfRw	    = $02;  // 4
  eptgElfCol	    = $03;  // 4
  eptgElfRwV	    = $06;  // 4
  eptgElfColV	    = $07;  // 4
  eptgElfRadical    = $0A;  // 13
  eptgElfRadicalS   = $0B;  // 13
  eptgElfRwS	    = $0C;  // 4
  eptgElfColS	    = $0D;  // 4
  eptgElfRwSV	    = $0E;  // 4
  eptgElfColSV	    = $0F;  // 4
  eptgElfRadicalLel = $10;  // 4
  eptgSxName	    = $1D;  // 4


type TSheetOption = (soGridlines,soRowColHeadings,soProtected);
type TSheetOptions = set of TSheetOption;

type TCalculateOption = (coNotCalcDependent,coExternalSeek);
     TCalculateOptions = set of TCalculateOption;

const CellErrorNames: array[0..7] of string =
('[int] No error value','#NULL!','#DIV/0!','#VALUE!','#REF!','#NAME?','#NUM!','N/A');

const ERR_NULL  = 1;
const ERR_DIV   = 2;
const ERR_VALUE = 3;
const ERR_REF   = 4;
const ERR_NAME  = 5;
const ERR_NUM   = 6;
const ERR_NA    = 7;

                   // errError = internal, there is no defined error value.
type TCellError = (errError,errNull,errDiv0,errValue,errRef,errName,errNum,errNA);


type TExcelColor = (xc0,xc1,xc2,xc3,xc4,xc5,xc6,xc7,
                    xcBlack,xcWhite,xcRed,xcBrightGreen,xcBlue,xcYellow,xcPink,xcTurquoise,
                    xcDarkRed,xcGreen,xcDarkBlue,xcBrownGreen,xcViolet,xcBlueGreen,xcGray25,xcGray50,
                    xc24,xc25,xc26,xc27,xc28,xc29,xc30,xc31,
                    xc32,xc33,xc34,xc35,xc36,xc37,xc38,xc39,
                    xcSky,xcPaleTurquois,xcPaleGreen,xcLightYellow,xcPaleSky,xcRose,xcLilac,xcLightBrown,
                    xcDarkSky,xcDarkTurquois,xcGrass,xcGold,xcLightOrange,xcOrange,xcDarkBlueGray,xcGray40,
                    xcDarkGreenGray,xcEmerald,xcDarkGreen,xcOlive,xcBrown,xcCherry,xcIndigo,xcGray80,
                    xcAutomatic);

// New
const TDefaultExcelColorPalette: array[0..64] of integer = (
$000000, $000000, $000000, $000000, $000000, $000000, $000000, $000000,
$000000, $FFFFFF, $0000FF, $00FF00, $FF0000, $00FFFF, $FF00FF, $FFFF00,
$000080, $008000, $800000, $008080, $800080, $808000, $C0C0C0, $808080,
$FF9999, $663399, $CCFFFF, $FFFFCC, $660066, $8080FF, $CC6600, $FFCCCC,
$800000, $FF00FF, $00FFFF, $FFFF00, $800080, $000080, $808000, $FF0000,
$FFCC00, $FFFFCC, $CCFFCC, $99FFFF, $FFCC99, $CC99FF, $FF99CC, $99CCFF,
$FF6633, $CCCC33, $00CC99, $00CCFF, $0099FF, $0066FF, $996666, $969696,
$663300, $669933, $003300, $003333, $003399, $663399, $993333, $333333,
$FFFFFF);

var ExcelColorPalette: array[0..High(TDefaultExcelColorPalette)] of integer;

type TExcelFillPattern = (fpNone,fpPattern1,fpPattern2,fpPattern3,fpPattern4,
fpPattern5,fpPattern6,fpPattern7,fpPattern8,fpPattern9,fpPattern10,fpPattern11,
fpPattern12,fpPattern13,fpPattern14,fpPattern15,fpPattern16,fpPattern17,
fpPattern18);

type TSubStreamType = (stGlobals,stVBModule,stWorksheet,stChart,stExcel4Macro,stWorkspace);

type TWordBit = (b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15);
type TWordBits = set of TWordBit;

type TExcelVersion = (xvNone,xvExcelUnknown,xvExcel21,xvExcel30,xvExcel40,xvExcel50,xvExcel97);

type T2ByteWord = packed record
     case word of
       0: (W: word);
       1: (B: array[0..1] of byte);
     end;

type PRecCellArea = ^TRecCellArea;
     TRecCellArea = packed record
     Row1,Row2: word;
     Col1,Col2: word;
     end;

type TPageBreak = packed record
     Val1: word;
     Val2: word;
     Val3: word;
     end;

type PRecTXORUN = ^TRecTXORUN;
     TRecTXORUN = packed record
     CharIndex: word;
     FontIndex: word;
     Reserved: longword;
     end;

type TDynTXORUNArray = array of TRecTXORUN;     

type PObjCMO = ^TObjCMO;
     TObjCMO = packed record
     ObjType: word;
     ObjId: word;
     Options: word;
     Reserved: array[0..11] of byte;
     end;

type PObjSBS = ^TObjSBS;
     TObjSBS = packed record
     Reserved: array[0..3] of byte;
     ScrollPos: word;
     MinimumValue: word;
     MaximumValue: word;
     ScrollWhenArrowClicked: word;
     ScrollWhenBarClicked: word;
     Horizontal: word;
     Width: word;
     Options: word;
     end;

// This is the part AFTER the formula
type PObjLBS = ^TObjLBS;
     TObjLBS = packed record
//   Reserved1: word;
//   FmlaLen: word;
//   Reserved2: longword;
//   Fmla: array of byte;

     Reserved3: byte;
     Elements: word;
     Selected: word;
     Options: word;
     end;


// ********** BIFF Records *******

type PFormatRun = ^TFormatRun;
     TFormatRun = packed record
     Index: word;
     FontIndex: word;
     end;

type PBIFFHeader = ^TBIFFHeader;
     TBIFFHeader = packed record
     RecID: word;
     Length: word;
     end;

type PRec2INTEGER = ^TRec2INTEGER;
     TRec2INTEGER = packed record
     Row: word;
     Col: byte;
     Res: byte;
     Attribute: array[0..2] of byte;
     Value: word;
     end;

type PRec2NUMBER = ^TRec2NUMBER;
     TRec2NUMBER = packed record
     Row: word;
     Col: byte;
     Res: byte;
     Attribute: array[0..2] of byte;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -