Ejemplo n.º 1
0
        public void TestRepeatedEvaluation()
        {
            IWorkbook         wb    = _testDataProvider.CreateWorkbook();
            IFormulaEvaluator fe    = wb.GetCreationHelper().CreateFormulaEvaluator();
            ISheet            sheet = wb.CreateSheet("Sheet1");
            IRow  r = sheet.CreateRow(0);
            ICell c = r.CreateCell(0, CellType.Formula);

            // Create a value and check it
            c.CellFormula = (/*setter*/ "Date(2011,10,6)");
            CellValue cellValue = fe.Evaluate(c);

            Assert.AreEqual(40822.0, cellValue.NumberValue, 0.0);
            cellValue = fe.Evaluate(c);
            Assert.AreEqual(40822.0, cellValue.NumberValue, 0.0);

            // Change it
            c.CellFormula = (/*setter*/ "Date(2011,10,4)");

            // Evaluate it, no change as the formula Evaluator
            //  won't know to clear the cache
            cellValue = fe.Evaluate(c);
            Assert.AreEqual(40822.0, cellValue.NumberValue, 0.0);

            // Manually flush for this cell, and check
            fe.NotifySetFormula(c);
            cellValue = fe.Evaluate(c);
            Assert.AreEqual(40820.0, cellValue.NumberValue, 0.0);

            // Change again, without Notifying
            c.CellFormula = (/*setter*/ "Date(2010,10,4)");
            cellValue     = fe.Evaluate(c);
            Assert.AreEqual(40820.0, cellValue.NumberValue, 0.0);

            // Now manually clear all, will see the new value
            fe.ClearAllCachedResultValues();
            cellValue = fe.Evaluate(c);
            Assert.AreEqual(40455.0, cellValue.NumberValue, 0.0);

            wb.Close();
        }