Ejemplo n.º 1
0
        private bool DoRPN(TParsedTokenListBuilder TokenBuilder, TNameRecordList Names, byte[] RPN, int atPos, int afPos, ref bool HasSubtotal, ref bool HasAggregate)
        {
            int tPos     = atPos;
            int fPos     = afPos;
            int ArrayPos = fPos;

            TTokenOffset TokenOffset = new TTokenOffset();

            while (tPos < fPos)
            {
                TokenOffset.Add(tPos, TokenBuilder.Count);
                byte RealToken = RPN[tPos];
                ptg  BaseToken = TBaseParsedToken.CalcBaseToken((ptg)RealToken);
                TUnsupportedFormulaErrorType ErrType = TUnsupportedFormulaErrorType.FormulaTooComplex;
                string ErrName = null;
                if (!Evaluate(TokenBuilder, TokenOffset, Names, BaseToken, (ptg)RealToken, RPN, ref tPos, ref ArrayPos, ref ErrType, ref ErrName, ref HasSubtotal, ref HasAggregate))
                {
                    TokenBuilder.Clear();
                    return(false);
                }
                tPos++;
            }                                          //while

            TokenOffset.Add(tPos, TokenBuilder.Count); //eof

            FixGotosAndMemTokens(TokenBuilder, TokenOffset);
            return(true);
        }
Ejemplo n.º 2
0
        private static byte[] ConvertToBiff8(TExternSheetList ExternSheetList, byte Token, byte[] Data, ref int tPos)
        {
            byte[] Result;
            int    rPos = 0;

            switch (TBaseParsedToken.CalcBaseToken((ptg)Token))
            {
            case ptg.Name:
                Result = new byte[4];      //Wrong on Excel docs!
                BitOps.SetWord(Result, 0, BitOps.GetWord(Data, tPos));
                tPos += 14;
                return(Result);

            case ptg.NameX:
                Result = new byte[6];     //This is actually 6
                BitOps.SetWord(Result, 2, BitOps.GetWord(Data, tPos + 10));
                tPos += 24;
                return(Result);

            case ptg.Ref:
            case ptg.RefN:
                Result = new byte[4];
                ConvertRowsAndColumns7To8(Data, Result, ref tPos, ref rPos, false);
                return(Result);

            case ptg.Area:
            case ptg.AreaN:
                Result = new byte[8];
                ConvertRowsAndColumns7To8(Data, Result, ref tPos, ref rPos, true);
                return(Result);

            case ptg.RefErr:
                tPos += 3;
                return(new byte[4]);

            case ptg.AreaErr:
                tPos += 6;
                return(new byte[8]);

            case ptg.Ref3d:
            case ptg.Ref3dErr:
                Result = new byte[6];
                Convert3D7To8(ExternSheetList, Token, Data, Result, ref tPos, ref rPos);
                ConvertRowsAndColumns7To8(Data, Result, ref tPos, ref rPos, false);
                return(Result);

            case ptg.Area3d:
            case ptg.Area3dErr:
                Result = new byte[10];
                Convert3D7To8(ExternSheetList, Token, Data, Result, ref tPos, ref rPos);
                ConvertRowsAndColumns7To8(Data, Result, ref tPos, ref rPos, true);
                return(Result);
            }

            XlsMessages.ThrowException(XlsErr.ErrBadToken, Token);
            return(null);  //just to compile.
        }
Ejemplo n.º 3
0
        private static byte[] ConvertToBiff7(TReferences References, byte Token, byte[] Data, ref int tPos)
        {
            byte[] Result;
            int    rPos = 0;

            switch (TBaseParsedToken.CalcBaseToken((ptg)Token))
            {
            case ptg.Name:
                Result = new byte[14];
                BitOps.SetWord(Result, 0, BitOps.GetWord(Data, tPos));
                tPos += 4;     //Biff8 Name is Wrong on Excel docs!
                return(Result);

            case ptg.NameX:
                Result = new byte[24];
                BitOps.SetWord(Result, 0, 0xFFFF);
                BitOps.SetWord(Result, 10, BitOps.GetWord(Data, tPos + 2));
                tPos += 6;    //This is actually 6
                return(Result);

            case ptg.Ref:
            case ptg.RefN:
                Result = new byte[3];
                if (!ConvertRowsAndColumns8To7(Data, Result, ref tPos, ref rPos, false))
                {
                    return(null);
                }
                return(Result);

            case ptg.Area:
            case ptg.AreaN:
                Result = new byte[6];
                if (!ConvertRowsAndColumns8To7(Data, Result, ref tPos, ref rPos, true))
                {
                    return(null);
                }
                return(Result);

            case ptg.RefErr:
                tPos += 4;
                return(new byte[3]);

            case ptg.AreaErr:
                tPos += 8;
                return(new byte[6]);

            case ptg.Ref3d:
            case ptg.Ref3dErr:
                Result = new byte[17];
                if (!Convert3D8To7(References, Token, Data, Result, ref tPos, ref rPos))
                {
                    return(null);
                }
                if (!ConvertRowsAndColumns8To7(Data, Result, ref tPos, ref rPos, false))
                {
                    return(null);
                }
                return(Result);

            case ptg.Area3d:
            case ptg.Area3dErr:
                Result = new byte[20];
                if (!Convert3D8To7(References, Token, Data, Result, ref tPos, ref rPos))
                {
                    return(null);
                }
                if (!ConvertRowsAndColumns8To7(Data, Result, ref tPos, ref rPos, true))
                {
                    return(null);
                }
                return(Result);
            }

            return(null);
        }