Пример #1
0
        public void basicIfExpression()
        {
            var    mwb = MockWorkbook.standardMockWorkbook();
            var    e   = mwb.envForSheet(1);
            string f   = "=IF(TRUE, 1, 2)";

            ExprOpt asto = Parcel.parseFormula(f, e.Path, e.WorkbookName, e.WorksheetName);

            Expr[] a =
            {
                Expr.NewReferenceExpr(new AST.ReferenceBoolean(e,  true)),
                Expr.NewReferenceExpr(new AST.ReferenceConstant(e,  1.0)),
                Expr.NewReferenceExpr(new AST.ReferenceConstant(e, 2.0))
            };
            ArgList args    = Utility.makeFSList <AST.Expression>(a);
            Expr    correct = Expr.NewReferenceExpr(new AST.ReferenceFunction(e, "IF", args, AST.Arity.NewFixed(3)));

            try
            {
                Expr ast = asto.Value;
                Assert.AreEqual(ast, correct);
            } catch (NullReferenceException nre)
            {
                Assert.Fail("Parse error: " + nre.Message);
            }
        }
Пример #2
0
        public void RangeCase7Test()
        {
            var    mwb = MockWorkbook.standardMockWorkbook();
            var    e   = mwb.envForSheet(1);
            String s   = "A1,A2:A3,A4";

            AddrPair[] addrpairs =
            {
                new AddrPair(
                    AST.Address.fromA1withMode(1, "A", AST.AddressMode.Relative, AST.AddressMode.Relative, e.WorksheetName, e.WorkbookName, e.Path),
                    AST.Address.fromA1withMode(1, "A", AST.AddressMode.Relative, AST.AddressMode.Relative, e.WorksheetName, e.WorkbookName, e.Path)
                    ),
                new AddrPair(
                    AST.Address.fromA1withMode(2, "A", AST.AddressMode.Relative, AST.AddressMode.Relative, e.WorksheetName, e.WorkbookName, e.Path),
                    AST.Address.fromA1withMode(3, "A", AST.AddressMode.Relative, AST.AddressMode.Relative, e.WorksheetName, e.WorkbookName, e.Path)
                    ),
                new AddrPair(
                    AST.Address.fromA1withMode(4, "A", AST.AddressMode.Relative, AST.AddressMode.Relative, e.WorksheetName, e.WorkbookName, e.Path),
                    AST.Address.fromA1withMode(4, "A", AST.AddressMode.Relative, AST.AddressMode.Relative, e.WorksheetName, e.WorkbookName, e.Path)
                    )
            };

            AST.Reference r       = Parcel.simpleReferenceParser(s, e);
            AST.Reference correct = new AST.ReferenceRange(e, new AST.Range(addrpairs));
            Assert.AreEqual(r, correct);
        }
Пример #3
0
        public void worksheetNameQuoteEscaping()
        {
            var    mwb      = MockWorkbook.standardMockWorkbook();
            String formula1 = "=Dan!H45";
            String formula2 = "='Dan Stuff'!H45";
            String formula3 = "='Dan''s Stuff'!H45";
            String formula4 = "='Dan's Stuff'!H45";

            // first, the good ones
            try
            {
                Parcel.parseFormula(formula1, mwb.Path, mwb.WorkbookName, mwb.worksheetName(1));
                Parcel.parseFormula(formula2, mwb.Path, mwb.WorkbookName, mwb.worksheetName(1));
                Parcel.parseFormula(formula3, mwb.Path, mwb.WorkbookName, mwb.worksheetName(1));
            }
            catch (AST.ParseException e)
            {
                Assert.Fail(e.Message);
            }

            // a bad one
            try
            {
                Parcel.parseFormula(formula4, mwb.Path, mwb.WorkbookName, mwb.worksheetName(1));
            }
            catch (AST.ParseException)
            {
                // OK
            }
        }
Пример #4
0
        [Ignore]    // temporarily ignore test
        public void brutalEUSESTest()
        {
            var failures = new System.Collections.Concurrent.ConcurrentQueue <string>();

            var mwb = MockWorkbook.standardMockWorkbook();

            var formulas = System.IO.File.ReadAllLines(@"..\..\TestData\formulas_distinct.txt");

            System.Threading.Tasks.Parallel.ForEach(formulas, f =>
            {
                try
                {
                    Parcel.parseFormula(f, mwb.Path, mwb.WorkbookName, mwb.worksheetName(1));
                }
                catch (Exception e)
                {
                    if (e is AST.IndirectAddressingNotSupportedException)
                    {
                        // OK
                    }
                    else if (e is AST.ParseException)
                    {
                        System.Diagnostics.Debug.WriteLine("Fail: " + f);
                        failures.Enqueue(f);
                    }
                }
            });

            Assert.AreEqual(0, failures.Count());
            if (failures.Count > 0)
            {
                String.Join("\n", failures);
            }
        }
Пример #5
0
        public void multipleRangeExtraction()
        {
            var mwb = new MockWorkbook("C:\\FOOBAR", "workbook.xls", new[] { "sheet1", "Calculations", "Status" });
            var f   = "=IF(Status!G11=\"stand-alone hub\",SUMIF(Calculations!B7:P7,\"include\",Calculations!B163:P163),IF(Status!G11=\"remote\",SUMIF(Calculations!B7:P7,\"include\",Calculations!B184:P184),SUMIF(Calculations!B7:P7,\"include\",Calculations!B205:P205)))";

            var calc_env = mwb.envForSheet(2);

            var rng1 = new AST.Range(Utility.makeAddressForA1("B", 7, calc_env), Utility.makeAddressForA1("P", 7, calc_env));
            var rng2 = new AST.Range(Utility.makeAddressForA1("B", 163, calc_env), Utility.makeAddressForA1("P", 163, calc_env));
            var rng3 = new AST.Range(Utility.makeAddressForA1("B", 184, calc_env), Utility.makeAddressForA1("P", 184, calc_env));
            var rng4 = new AST.Range(Utility.makeAddressForA1("B", 205, calc_env), Utility.makeAddressForA1("P", 205, calc_env));

            // extract
            try
            {
                var rngs = Parcel.rangeReferencesFromFormula(f, mwb.Path, mwb.WorkbookName, mwb.worksheetName(1), false);
                Assert.IsTrue(rngs.Contains(rng1));
                Assert.IsTrue(rngs.Contains(rng2));
                Assert.IsTrue(rngs.Contains(rng3));
                Assert.IsTrue(rngs.Contains(rng4));
                Assert.IsTrue(rngs.Length == 6);
            }
            catch (AST.ParseException e)
            {
                Assert.Fail(e.Message);
            }
        }
Пример #6
0
        public void UnaryPrecedenceTest()
        {
            var mwb = MockWorkbook.standardMockWorkbook();
            var e   = mwb.envForSheet(1);

            var f = "=-1 * 2";

            ExprOpt asto = Parcel.parseFormula(f, e.Path, e.WorkbookName, e.WorksheetName);

            Expr correct =
                Expr.NewBinOpExpr(
                    "*",
                    Expr.NewUnaryOpExpr(
                        '-',
                        Expr.NewReferenceExpr(new AST.ReferenceConstant(e, 1.0))
                        ),
                    Expr.NewReferenceExpr(new AST.ReferenceConstant(e, 2.0))
                    );

            try
            {
                Expr ast = asto.Value;
                Assert.AreEqual(correct, ast);
            }
            catch (NullReferenceException nre)
            {
                Assert.Fail("Parse error: " + nre.Message);
            }
        }
Пример #7
0
        public void SpacesInArgListTest()
        {
            var mwb = MockWorkbook.standardMockWorkbook();
            var e   = mwb.envForSheet(1);

            var f = "=SUM(A1,A2,A3, A4)";

            ExprOpt asto = Parcel.parseFormula(f, e.Path, e.WorkbookName, e.WorksheetName);

            string[] addrs = { "A1", "A2", "A3", "A4" };
            var      rng   = Utility.makeUnionRangeFromA1Addrs(addrs, e);

            Expr[] a =
            {
                Expr.NewReferenceExpr(new AST.ReferenceRange(e, rng))
            };
            ArgList args    = Utility.makeFSList(a);
            Expr    correct = Expr.NewReferenceExpr(new AST.ReferenceFunction(e, "SUM", args, AST.Arity.VarArgs));

            try
            {
                Expr ast = asto.Value;
                Assert.AreEqual(correct, ast);
            }
            catch (NullReferenceException nre)
            {
                Assert.Fail("Parse error: " + nre.Message);
            }
        }
Пример #8
0
        public void Arity2Test2()
        {
            var mwb = MockWorkbook.standardMockWorkbook();
            var e   = mwb.envForSheet(1);

            var f = "=SUMX2MY2(A$4:A$10,B$4:B$10)";

            ExprOpt asto = Parcel.parseFormula(f, e.Path, e.WorkbookName, e.WorksheetName);

            Expr[] a =
            {
                Expr.NewReferenceExpr(new AST.ReferenceRange(e, Utility.makeRangeForA1("A$4:A$10", e))),
                Expr.NewReferenceExpr(new AST.ReferenceRange(e, Utility.makeRangeForA1("B$4:B$10", e)))
            };
            ArgList args    = Utility.makeFSList <AST.Expression>(a);
            Expr    correct = Expr.NewReferenceExpr(new AST.ReferenceFunction(e, "SUMX2MY2", args, AST.Arity.NewFixed(2)));

            try
            {
                Expr ast = asto.Value;
                Assert.AreEqual(correct, ast);
            }
            catch (NullReferenceException nre)
            {
                Assert.Fail("Parse error: " + nre.Message);
            }
        }
Пример #9
0
        public void standardAddress()
        {
            var    mwb = MockWorkbook.standardMockWorkbook();
            var    e   = mwb.envForSheet(1);
            String s   = "A3";

            AST.Reference r       = Parcel.simpleReferenceParser(s, e);
            AST.Reference correct = new AST.ReferenceAddress(e, AST.Address.fromA1withMode(3, "A", AST.AddressMode.Relative, AST.AddressMode.Relative, e.WorksheetName, e.WorkbookName, e.Path));
            Assert.AreEqual(r, correct);
        }
Пример #10
0
        public void ExtractConstantsTest()
        {
            var mwb = MockWorkbook.standardMockWorkbook();
            var e   = mwb.envForSheet(1);
            var f   = "=4/(3.2*SUM(A$4:A$10,B$4:B$10)-22)";

            var constants = Parcel.constantsFromFormula(f, e.Path, e.WorkbookName, e.WorksheetName, ignore_parse_errors: false);

            Assert.IsTrue(Array.Exists(constants, c => c.Equals(new AST.ReferenceConstant(e, 3.2))));
            Assert.IsTrue(Array.Exists(constants, c => c.Equals(new AST.ReferenceConstant(e, 4))));
            Assert.IsTrue(Array.Exists(constants, c => c.Equals(new AST.ReferenceConstant(e, 22))));
            Assert.IsTrue(constants.Length == 3);
        }
Пример #11
0
        public void standardRange()
        {
            var    mwb = MockWorkbook.standardMockWorkbook();
            var    e   = mwb.envForSheet(1);
            String s   = "A3:B22";

            AST.Reference r       = Parcel.simpleReferenceParser(s, e);
            AST.Reference correct = new AST.ReferenceRange(e,
                                                           new AST.Range(Utility.makeAddressForA1("A", 3, e),
                                                                         Utility.makeAddressForA1("B", 22, e))
                                                           );
            Assert.AreEqual(r, correct);
        }
Пример #12
0
        public void mixedRangeTest2()
        {
            var mwb = MockWorkbook.standardMockWorkbook();
            var e   = mwb.envForSheet(1);

            String s = "A$1:B$1";

            AST.Range range = new AST.Range(
                AST.Address.fromA1withMode(1, "A", AST.AddressMode.Absolute, AST.AddressMode.Relative, e.WorkbookName, e.WorkbookName, e.Path),
                AST.Address.fromA1withMode(1, "B", AST.AddressMode.Absolute, AST.AddressMode.Relative, e.WorkbookName, e.WorkbookName, e.Path)
                );

            AST.Reference r       = Parcel.simpleReferenceParser(s, e);
            AST.Reference correct = new AST.ReferenceRange(e, range);
            Assert.AreEqual(r, correct);
        }
Пример #13
0
        public void missingWorkbookAddrExtraction()
        {
            var mwb  = new MockWorkbook("C:\\FOOBAR", "workbook.xls", new[] { "budget" });
            var f    = "=budget!A43";
            var addr = Utility.makeAddressForA1("A", 43, mwb.envForSheet(1));

            // extract
            try
            {
                var addrs = Parcel.addrReferencesFromFormula(f, mwb.Path, mwb.WorkbookName, mwb.worksheetName(1), false);
                Assert.IsTrue(addrs.Contains(addr));
                Assert.IsTrue(addrs.Length == 1);
            }
            catch (AST.ParseException e)
            {
                Assert.Fail(e.Message);
            }
        }
Пример #14
0
        public void testTODAY2()
        {
            // a parse that should fail:
            var mwb = new MockWorkbook("C:\\FOOBAR", "workbook.xls", new[] { "sheet1", "Calculations", "Status" });
            var f   = "=TODAY";

            // parse
            try
            {
                var ast = Parcel.parseFormula(f, mwb.Path, mwb.WorkbookName, mwb.worksheetName(1));
                Assert.Fail("Should not parse.");
            }
            catch (AST.ParseException)
            {
                // pass
                Assert.IsTrue(true);
            }
        }
Пример #15
0
        public void crossWorksheetRangeExtraction()
        {
            var mwb = new MockWorkbook("C:\\FOOBAR", "workbook.xls", new[] { "sheet1", "One Country Charts", "One Country Data" });
            var f   = "=IF('One Country Charts'!F17=\"\",VLOOKUP('One Country Charts'!F11,'One Country Data'!M5:O187,3,FALSE),VLOOKUP('One Country Charts'!F17,'One Country Data'!M5:O187,3,FALSE))";

            var data_env = mwb.envForSheet(3);

            var rng = new AST.Range(Utility.makeAddressForA1("M", 5, data_env), Utility.makeAddressForA1("O", 187, data_env));

            // extract
            try
            {
                var rngs = Parcel.rangeReferencesFromFormula(f, mwb.Path, mwb.WorkbookName, mwb.worksheetName(1), false);
                Assert.IsTrue(rngs.Contains(rng));
                Assert.IsTrue(rngs.Length == 2);
            }
            catch (AST.ParseException e)
            {
                Assert.Fail(e.Message);
            }
        }
Пример #16
0
        public void indirectReferences()
        {
            var    mwb     = MockWorkbook.standardMockWorkbook();
            String formula = "=TRANSPOSE(INDIRECT(ADDRESS(1,4,3,1,Menus!$K$10)):INDIRECT(ADDRESS(1,256,3,1,Menus!$K$10)))";

            try
            {
                Parcel.parseFormula(formula, mwb.Path, mwb.WorkbookName, mwb.worksheetName(1));
            }
            catch (Exception e)
            {
                if (e is AST.IndirectAddressingNotSupportedException)
                {
                    // we pass
                }
                else
                {
                    Assert.Fail(e.Message);
                }
            }
        }
Пример #17
0
        public void testHLOOKUP()
        {
            var mwb = new MockWorkbook("C:\\FOOBAR", "workbook.xls", new[] { "sheet1", "Calculations", "Status" });

            var f = "=HLOOKUP(J9,$C$45:$AH$46,2,TRUE)";

            // parse
            try
            {
                var ast = Parcel.parseFormula(f, mwb.Path, mwb.WorkbookName, mwb.worksheetName(1));
                Assert.IsTrue(ExprOpt.get_IsSome(ast));
                var expr    = (Expr.ReferenceExpr)ast.Value;
                var formula = (AST.ReferenceFunction)expr.Item;

                Assert.IsTrue(formula.FunctionName == "HLOOKUP");
            }
            catch (AST.ParseException e)
            {
                Assert.Fail(e.Message);
            }
        }
Пример #18
0
        public void testCOUNTA()
        {
            // a parse that failed in the wild:
            var mwb = new MockWorkbook("C:\\FOOBAR", "workbook.xls", new[] { "sheet1", "Calculations", "Status" });
            var f   = "=COUNTA(A6:A33)";

            // parse
            try
            {
                var ast = Parcel.parseFormula(f, mwb.Path, mwb.WorkbookName, mwb.worksheetName(1));
                Assert.IsTrue(ExprOpt.get_IsSome(ast));
                var expr    = (Expr.ReferenceExpr)ast.Value;
                var formula = (AST.ReferenceFunction)expr.Item;

                Assert.IsTrue(formula.FunctionName == "COUNTA");
            }
            catch (AST.ParseException e)
            {
                Assert.Fail(e.Message);
            }
        }
Пример #19
0
        public void ifStatement()
        {
            var    mwb = MockWorkbook.standardMockWorkbook();
            string s   = "=IF(SUM(A1:A5) = 10, \"yes\", \"no\")";

            IEnumerable <AST.Range> rngs = new List <AST.Range>();

            try
            {
                rngs = Parcel.rangeReferencesFromFormula(s, mwb.Path, mwb.WorkbookName, mwb.worksheetName(1), false);
            }
            catch (AST.ParseException)
            {
                Assert.Fail(String.Format("\"{0}\" should parse.", s));
            }

            Assert.AreEqual(1, rngs.Count());

            var addr = rngs.First().A1Local();

            Assert.AreEqual("A1:A5", addr);
        }
Пример #20
0
        public void crossWorkbookAddrExtraction()
        {
            var mwb  = MockWorkbook.standardMockWorkbook();
            var xmwb = new MockWorkbook("C:\\FINRES\\FIRMAS\\FORCASTS\\MODELS\\", "models.xls", new[] { "Forecast Assumptions" });

            var f1   = "=L66*('C:\\FINRES\\FIRMAS\\FORCASTS\\MODELS\\[models.xls]Forecast Assumptions'!J27)^0.25";
            var f1a1 = Utility.makeAddressForA1("L", 66, mwb.envForSheet(1));
            var f1a2 = Utility.makeAddressForA1("J", 27, xmwb.envForSheet(1));

            // extract
            try
            {
                var addrs = Parcel.addrReferencesFromFormula(f1, mwb.Path, mwb.WorkbookName, mwb.worksheetName(1), false);
                Assert.IsTrue(addrs.Contains(f1a1));
                Assert.IsTrue(addrs.Contains(f1a2));
                Assert.IsTrue(addrs.Length == 2);
            }
            catch (AST.ParseException e)
            {
                Assert.Fail(e.Message);
            }
        }
Пример #21
0
        public void unOpAndBinOp()
        {
            var    mwb     = MockWorkbook.standardMockWorkbook();
            string formula = "=(+E6+E7)*0.28";

            IEnumerable <AST.Address> addrs = new List <AST.Address>();

            try
            {
                addrs = Parcel.addrReferencesFromFormula(formula, mwb.Path, mwb.WorkbookName, mwb.worksheetName(1), false);
            }
            catch (AST.ParseException)
            {
                Assert.Fail(String.Format("\"{0}\" should parse.", formula));
            }

            Assert.AreEqual(2, addrs.Count());

            var a1 = Utility.makeAddressForA1("E", 6, mwb.envForSheet(1));
            var a2 = Utility.makeAddressForA1("E", 7, mwb.envForSheet(1));

            Assert.AreEqual(true, addrs.Contains(a1));
            Assert.AreEqual(true, addrs.Contains(a2));
        }
Пример #22
0
        public void testMAXVarArgs()
        {
            // a parse that failed in the wild:
            var mwb = new MockWorkbook("C:\\FOOBAR", "workbook.xls", new[] { "sheet1", "Calculations", "Status" });
            var f   = "=MAX(B6-10,0)";

            // parse
            try
            {
                var ast = Parcel.parseFormula(f, mwb.Path, mwb.WorkbookName, mwb.worksheetName(1));
                Assert.IsTrue(ExprOpt.get_IsSome(ast));
                var expr    = (Expr.ReferenceExpr)ast.Value;
                var formula = (AST.ReferenceFunction)expr.Item;

                Assert.IsTrue(formula.FunctionName == "MAX");
                Assert.AreEqual(formula.ArgumentList.Length, 2);
                Assert.IsTrue(formula.ArgumentList.First().IsBinOpExpr);
                Assert.IsTrue(formula.ArgumentList.Last().IsReferenceExpr);
            }
            catch (AST.ParseException e)
            {
                Assert.Fail(e.Message);
            }
        }
Пример #23
0
        public void testTODAY()
        {
            // a parse that failed in the wild:
            var mwb = new MockWorkbook("C:\\FOOBAR", "workbook.xls", new[] { "sheet1", "Calculations", "Status" });
            var f = "=TODAY()";

            // parse
            try
            {
                var ast = Parcel.parseFormula(f, mwb.Path, mwb.WorkbookName, mwb.worksheetName(1));
                Assert.IsTrue(ExprOpt.get_IsSome(ast));
                var expr = (Expr.ReferenceExpr)ast.Value;
                var formula = (AST.ReferenceFunction)expr.Item;

                Assert.IsTrue(formula.FunctionName == "TODAY");
                Assert.AreEqual(formula.ArgumentList.Length, 0);
            }
            catch (AST.ParseException e)
            {
                Assert.Fail(e.Message);
            }
        }
Пример #24
0
        public void crossWorkbookAddrExtraction()
        {
            var mwb = MockWorkbook.standardMockWorkbook();
            var xmwb = new MockWorkbook("C:\\FINRES\\FIRMAS\\FORCASTS\\MODELS\\", "models.xls", new[] { "Forecast Assumptions" });

            var f1 = "=L66*('C:\\FINRES\\FIRMAS\\FORCASTS\\MODELS\\[models.xls]Forecast Assumptions'!J27)^0.25";
            var f1a1 = Utility.makeAddressForA1("L", 66, mwb.envForSheet(1));
            var f1a2 = Utility.makeAddressForA1("J", 27, xmwb.envForSheet(1));

            // extract
            try
            {
                var addrs = Parcel.addrReferencesFromFormula(f1, mwb.Path, mwb.WorkbookName, mwb.worksheetName(1), false);
                Assert.IsTrue(addrs.Contains(f1a1));
                Assert.IsTrue(addrs.Contains(f1a2));
                Assert.IsTrue(addrs.Length == 2);
            }
            catch (AST.ParseException e)
            {
                Assert.Fail(e.Message);
            }
        }
Пример #25
0
        public void testHLOOKUP()
        {
            var mwb = new MockWorkbook("C:\\FOOBAR", "workbook.xls", new[] { "sheet1", "Calculations", "Status" });

            var f = "=HLOOKUP(J9,$C$45:$AH$46,2,TRUE)";

            // parse
            try
            {
                var ast = Parcel.parseFormula(f, mwb.Path, mwb.WorkbookName, mwb.worksheetName(1));
                Assert.IsTrue(ExprOpt.get_IsSome(ast));
                var expr = (Expr.ReferenceExpr)ast.Value;
                var formula = (AST.ReferenceFunction)expr.Item;

                Assert.IsTrue(formula.FunctionName == "HLOOKUP");
            }
            catch (AST.ParseException e)
            {
                Assert.Fail(e.Message);
            }
        }
Пример #26
0
        public void multipleRangeExtraction()
        {
            var mwb = new MockWorkbook("C:\\FOOBAR", "workbook.xls", new[] { "sheet1", "Calculations", "Status" });
            var f = "=IF(Status!G11=\"stand-alone hub\",SUMIF(Calculations!B7:P7,\"include\",Calculations!B163:P163),IF(Status!G11=\"remote\",SUMIF(Calculations!B7:P7,\"include\",Calculations!B184:P184),SUMIF(Calculations!B7:P7,\"include\",Calculations!B205:P205)))";

            var calc_env = mwb.envForSheet(2);

            var rng1 = new AST.Range(Utility.makeAddressForA1("B", 7, calc_env), Utility.makeAddressForA1("P", 7, calc_env));
            var rng2 = new AST.Range(Utility.makeAddressForA1("B", 163, calc_env), Utility.makeAddressForA1("P", 163, calc_env));
            var rng3 = new AST.Range(Utility.makeAddressForA1("B", 184, calc_env), Utility.makeAddressForA1("P", 184, calc_env));
            var rng4 = new AST.Range(Utility.makeAddressForA1("B", 205, calc_env), Utility.makeAddressForA1("P", 205, calc_env));

            // extract
            try
            {
                var rngs = Parcel.rangeReferencesFromFormula(f, mwb.Path, mwb.WorkbookName, mwb.worksheetName(1), false);
                Assert.IsTrue(rngs.Contains(rng1));
                Assert.IsTrue(rngs.Contains(rng2));
                Assert.IsTrue(rngs.Contains(rng3));
                Assert.IsTrue(rngs.Contains(rng4));
                Assert.IsTrue(rngs.Length == 4);
            }
            catch (AST.ParseException e)
            {
                Assert.Fail(e.Message);
            }
        }
Пример #27
0
        public void crossWorksheetRangeExtraction()
        {
            var mwb = new MockWorkbook("C:\\FOOBAR", "workbook.xls", new[] { "sheet1", "One Country Charts", "One Country Data" });
            var f = "=IF('One Country Charts'!F17=\"\",VLOOKUP('One Country Charts'!F11,'One Country Data'!M5:O187,3,FALSE),VLOOKUP('One Country Charts'!F17,'One Country Data'!M5:O187,3,FALSE))";

            var data_env = mwb.envForSheet(3);

            var rng = new AST.Range(Utility.makeAddressForA1("M", 5, data_env), Utility.makeAddressForA1("O", 187, data_env));

            // extract
            try
            {
                var rngs = Parcel.rangeReferencesFromFormula(f, mwb.Path, mwb.WorkbookName, mwb.worksheetName(1), false);
                Assert.IsTrue(rngs.Contains(rng));
                Assert.IsTrue(rngs.Length == 1);
            }
            catch (AST.ParseException e)
            {
                Assert.Fail(e.Message);
            }
        }
Пример #28
0
        public void missingWorkbookAddrExtraction()
        {
            var mwb = new MockWorkbook("C:\\FOOBAR", "workbook.xls", new[] { "budget" });
            var f = "=budget!A43";
            var addr = Utility.makeAddressForA1("A", 43, mwb.envForSheet(1));

            // extract
            try
            {
                var addrs = Parcel.addrReferencesFromFormula(f, mwb.Path, mwb.WorkbookName, mwb.worksheetName(1), false);
                Assert.IsTrue(addrs.Contains(addr));
                Assert.IsTrue(addrs.Length == 1);
            }
            catch (AST.ParseException e)
            {
                Assert.Fail(e.Message);
            }
        }
Пример #29
0
        public void testTODAY2()
        {
            // a parse that should fail:
            var mwb = new MockWorkbook("C:\\FOOBAR", "workbook.xls", new[] { "sheet1", "Calculations", "Status" });
            var f = "=TODAY";

            // parse
            try
            {
                var ast = Parcel.parseFormula(f, mwb.Path, mwb.WorkbookName, mwb.worksheetName(1));
                Assert.Fail("Should not parse.");
            }
            catch (AST.ParseException)
            {
                // pass
                Assert.IsTrue(true);
            }
        }