public override CompileResult Execute(IEnumerable<FunctionArgument> arguments, ParsingContext context) { ValidateArguments(arguments, 2); var row = ArgToInt(arguments, 0) - 1; var col = ArgToInt(arguments, 1) - 1; ThrowExcelFunctionExceptionIf(() => row < 0 && col < 0, ExcelErrorCodes.Value); var referenceType = ExcelReferenceType.AbsoluteRowAndColumn; var worksheetSpec = string.Empty; if (arguments.Count() > 2) { var arg3 = ArgToInt(arguments, 2); ThrowExcelFunctionExceptionIf(() => arg3 < 1 || arg3 > 4, ExcelErrorCodes.Value); referenceType = (ExcelReferenceType)ArgToInt(arguments, 2); } if (arguments.Count() > 3) { var fourthArg = arguments.ElementAt(3).Value; if(fourthArg.GetType().Equals(typeof(bool)) && !(bool)fourthArg) { throw new InvalidOperationException("Excelformulaparser does not support the R1C1 format!"); } if (fourthArg.GetType().Equals(typeof(string))) { worksheetSpec = fourthArg.ToString() + "!"; } } var translator = new IndexToAddressTranslator(context.ExcelDataProvider, referenceType); return CreateResult(worksheetSpec + translator.ToAddress(col, row), DataType.ExcelAddress); }
public RangeAddressFactory(ExcelDataProvider excelDataProvider, AddressTranslator addressTranslator, IndexToAddressTranslator indexToAddressTranslator) { Require.That(excelDataProvider).Named("excelDataProvider").IsNotNull(); Require.That(addressTranslator).Named("addressTranslator").IsNotNull(); Require.That(indexToAddressTranslator).Named("indexToAddressTranslator").IsNotNull(); _excelDataProvider = excelDataProvider; _addressTranslator = addressTranslator; _indexToAddressTranslator = indexToAddressTranslator; }
public RangeAddressFactory(ExcelDataProvider excelDataProvider, AddressTranslator addressTranslator, IndexToAddressTranslator indexToAddressTranslator) { Require.That(excelDataProvider).Named("excelDataProvider").IsNotNull(); Require.That(addressTranslator).Named("addressTranslator").IsNotNull(); Require.That(indexToAddressTranslator).Named("indexToAddressTranslator").IsNotNull(); _excelDataProvider = excelDataProvider; _addressTranslator = addressTranslator; _indexToAddressTranslator = indexToAddressTranslator; }
private void SetupTranslator(int maxRows, ExcelReferenceType refType) { _excelDataProvider = MockRepository.GenerateStub<ExcelDataProvider>(); _excelDataProvider.Stub(x => x.ExcelMaxRows).Return(maxRows); _indexToAddressTranslator = new IndexToAddressTranslator(_excelDataProvider, refType); }