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); } } } }