public static SheetCellRange[] ExtractAllExternalReference(ICalcEvaluator evaluator, CalcExpression expression) { if (expression != null) { List <CalcReferenceExpression> nodes = new List <CalcReferenceExpression>(); FormulaUtility.ExtractAllReferenceExpression(evaluator, expression, nodes); if (nodes.Count > 0) { List <SheetCellRange> list2 = new List <SheetCellRange>(); foreach (CalcReferenceExpression expression2 in nodes) { if (expression2 is CalcExternalRangeExpression) { CalcExternalRangeExpression expression3 = expression2 as CalcExternalRangeExpression; SheetCellRange range = new SheetCellRange(expression3.Source as Worksheet, expression3.StartRow, expression3.StartColumn, (expression3.EndRow - expression3.StartRow) + 1, (expression3.EndColumn - expression3.StartColumn) + 1); list2.Add(range); } else if (expression2 is CalcExternalCellExpression) { CalcExternalCellExpression expression4 = expression2 as CalcExternalCellExpression; SheetCellRange range2 = new SheetCellRange(expression4.Source as Worksheet, expression4.Row, expression4.Column, 1, 1); list2.Add(range2); } else { return(null); } } return(list2.ToArray()); } } return(null); }
void UpdateDataProviders() { if (this._dataProviders != null) { foreach (ISeriesDataProvider provider in this._dataProviders) { if (provider != null) { if (provider is WorksheetSeriesDataProvider) { (provider as WorksheetSeriesDataProvider).Worksheet = null; } provider.DataChanged -= new EventHandler(this.DataProvider_DataChanged); } } } this._dataProviders = null; if ((this.DataSeries != null) && (this.DataSeries.DataReference != null)) { CalcReferenceExpression[] expressions = null; FormulaUtility.ExtractAllReferenceExpression(this._dataSeries.Evaluator, this._dataSeries.DataReference, out expressions); if ((expressions != null) && (expressions.Length > 0)) { this._dataProviders = new List <ISeriesDataProvider>(); foreach (CalcReferenceExpression expression in expressions) { DataOrientation vertical = DataOrientation.Vertical; if (this._dataSeries.DataOrientation.HasValue) { vertical = this._dataSeries.DataOrientation.Value; } else if (expression is CalcRangeExpression) { CalcRangeExpression expression2 = expression as CalcRangeExpression; int num = (expression2.EndColumn - expression2.StartColumn) + 1; int num2 = (expression2.EndRow - expression2.StartRow) + 1; vertical = (num > num2) ? DataOrientation.Horizontal : DataOrientation.Vertical; } WorksheetSeriesDataProvider provider2 = this.CreateSeriesDataProvider(new DefaultDataSeries(expression, vertical, this._dataSeries.DisplayHiddenData, this._dataSeries.EmptyValueStyle, null)); this._dataProviders.Add(provider2); if (expression is CalcExternalExpression) { provider2.Worksheet = (expression as CalcExternalExpression).Source as Worksheet; } provider2.DataChanged += new EventHandler(this.DataProvider_DataChanged); } } } }