예제 #1
0
 public Expression Create(Token token)
 {
     if (token.TokenTypeIsSet(TokenType.Integer))
     {
         return(new IntegerExpression(token.Value, token.IsNegated));
     }
     if (token.TokenTypeIsSet(TokenType.String))
     {
         return(new StringExpression(token.Value));
     }
     if (token.TokenTypeIsSet(TokenType.Decimal))
     {
         return(new DecimalExpression(token.Value, token.IsNegated));
     }
     if (token.TokenTypeIsSet(TokenType.Boolean))
     {
         return(new BooleanExpression(token.Value));
     }
     if (token.TokenTypeIsSet(TokenType.ExcelAddress))
     {
         var exp = new ExcelAddressExpression(token.Value, _excelDataProvider, _parsingContext, token.IsNegated);
         exp.HasCircularReference = token.TokenTypeIsSet(TokenType.CircularReference);
         return(exp);
     }
     if (token.TokenTypeIsSet(TokenType.InvalidReference))
     {
         return(new ExcelErrorExpression(token.Value, ExcelErrorValue.Create(eErrorType.Ref)));
     }
     if (token.TokenTypeIsSet(TokenType.NumericError))
     {
         return(new ExcelErrorExpression(token.Value, ExcelErrorValue.Create(eErrorType.Num)));
     }
     if (token.TokenTypeIsSet(TokenType.ValueDataTypeError))
     {
         return(new ExcelErrorExpression(token.Value, ExcelErrorValue.Create(eErrorType.Value)));
     }
     if (token.TokenTypeIsSet(TokenType.Null))
     {
         return(new ExcelErrorExpression(token.Value, ExcelErrorValue.Create(eErrorType.Null)));
     }
     if (token.TokenTypeIsSet(TokenType.NameValue))
     {
         return(new NamedValueExpression(token.Value, _parsingContext));
     }
     return(new StringExpression(token.Value));
 }
 public void CompileMultiCellReferenceAbsolute()
 {
     var parsingContext = ParsingContext.Create();
     var file = new FileInfo("filename.xlsx");
     using (var package = new ExcelPackage(file))
     using (var sheet = package.Workbook.Worksheets.Add("NewSheet"))
     using (var excelDataProvider = new EpplusExcelDataProvider(package))
     {
         var rangeAddressFactory = new RangeAddressFactory(excelDataProvider);
         using (parsingContext.Scopes.NewScope(rangeAddressFactory.Create("NewSheet", 3, 3)))
         {
             var expression = new ExcelAddressExpression("$A$1:$A$5", excelDataProvider, parsingContext);
             var result = expression.Compile();
             var rangeInfo = result.Result as ExcelDataProvider.IRangeInfo;
             Assert.IsNotNull(rangeInfo);
             Assert.AreEqual("$A$1:$A$5", rangeInfo.Address.Address);
             // Enumerating the range still yields no results.
             Assert.AreEqual(0, rangeInfo.Count());
         }
     }
 }
 public void CompileSingleCellReferenceResolveToRangeRowAbsolute()
 {
     var parsingContext = ParsingContext.Create();
     var file = new FileInfo("filename.xlsx");
     using (var package = new ExcelPackage(file))
     using (var sheet = package.Workbook.Worksheets.Add("NewSheet"))
     using (var excelDataProvider = new EpplusExcelDataProvider(package))
     {
         var rangeAddressFactory = new RangeAddressFactory(excelDataProvider);
         using (parsingContext.Scopes.NewScope(rangeAddressFactory.Create("NewSheet", 3, 3)))
         {
             var expression = new ExcelAddressExpression("$A1", excelDataProvider, parsingContext);
             expression.ResolveAsRange = true;
             var result = expression.Compile();
             var rangeInfo = result.Result as ExcelDataProvider.IRangeInfo;
             Assert.IsNotNull(rangeInfo);
             Assert.AreEqual("$A1", rangeInfo.Address.Address);
         }
     }
 }
 public void CompileSingleCellReferenceWithValue()
 {
     var parsingContext = ParsingContext.Create();
     var file = new FileInfo("filename.xlsx");
     using (var package = new ExcelPackage(file))
     using (var sheet = package.Workbook.Worksheets.Add("NewSheet"))
     using (var excelDataProvider = new EpplusExcelDataProvider(package))
     {
         sheet.Cells[1, 1].Value = "Value";
         var rangeAddressFactory = new RangeAddressFactory(excelDataProvider);
         using (parsingContext.Scopes.NewScope(rangeAddressFactory.Create("NewSheet", 3, 3)))
         {
             var expression = new ExcelAddressExpression("A1", excelDataProvider, parsingContext);
             var result = expression.Compile();
             Assert.AreEqual("Value", result.Result);
         }
     }
 }
 public void CompileMultiCellReferenceWithValues()
 {
     var parsingContext = ParsingContext.Create();
     var file = new FileInfo("filename.xlsx");
     using (var package = new ExcelPackage(file))
     using (var sheet = package.Workbook.Worksheets.Add("NewSheet"))
     using (var excelDataProvider = new EpplusExcelDataProvider(package))
     {
         sheet.Cells[1, 1].Value = "Value1";
         sheet.Cells[2, 1].Value = "Value2";
         sheet.Cells[3, 1].Value = "Value3";
         sheet.Cells[4, 1].Value = "Value4";
         sheet.Cells[5, 1].Value = "Value5";
         var rangeAddressFactory = new RangeAddressFactory(excelDataProvider);
         using (parsingContext.Scopes.NewScope(rangeAddressFactory.Create("NewSheet", 3, 3)))
         {
             var expression = new ExcelAddressExpression("A1:A5", excelDataProvider, parsingContext);
             var result = expression.Compile();
             var rangeInfo = result.Result as ExcelDataProvider.IRangeInfo;
             Assert.IsNotNull(rangeInfo);
             Assert.AreEqual("A1:A5", rangeInfo.Address.Address);
             Assert.AreEqual(5, rangeInfo.Count());
             for (int i = 1; i <= 5; i++)
             {
                 var rangeItem = rangeInfo.ElementAt(i - 1);
                 Assert.AreEqual("Value" + i, rangeItem.Value);
             }
         }
     }
 }