Beispiel #1
0
 private static object ExtractValueFromReference(CalcLocalIdentity localId, object value)
 {
     for (CalcReference reference = value as CalcReference; (reference != null) && !(localId is CalcRangeIdentity); reference = value as CalcReference)
     {
         CalcCellIdentity objA = localId as CalcCellIdentity;
         int rowCount          = reference.GetRowCount(0);
         int columnCount       = reference.GetColumnCount(0);
         if (((reference.RangeCount <= 0) || (rowCount <= 0)) || (columnCount <= 0))
         {
             value = CalcErrors.Reference;
         }
         else
         {
             try
             {
                 if (!object.ReferenceEquals(objA, null))
                 {
                     if ((reference.RangeCount != 1) || ((rowCount > 1) && (columnCount > 1)))
                     {
                         value = CalcErrors.Value;
                     }
                     else
                     {
                         int rowOffset    = objA.RowIndex - reference.GetRow(0);
                         int columnOffset = objA.ColumnIndex - reference.GetColumn(0);
                         if ((rowCount == 1) && (columnCount == 1))
                         {
                             value = reference.GetValue(0, 0, 0);
                         }
                         else if (((rowCount == 1) && (columnCount > 1)) && ((columnOffset >= 0) && (columnOffset < columnCount)))
                         {
                             value = reference.GetValue(0, 0, columnOffset);
                         }
                         else if (((rowCount > 1) && (columnCount == 1)) && ((rowOffset >= 0) && (rowOffset < rowCount)))
                         {
                             value = reference.GetValue(0, rowOffset, 0);
                         }
                         else
                         {
                             value = CalcErrors.Value;
                         }
                     }
                 }
                 else
                 {
                     value = reference.GetValue(0, 0, 0);
                 }
             }
             catch (InvalidCastException)
             {
                 value = CalcErrors.Value;
             }
         }
     }
     return(value);
 }
Beispiel #2
0
        private object ExtractValueFromReference(CalcReference reference, int row, int col)
        {
            SheetRangeReference reference2 = reference as SheetRangeReference;

            if ((reference2 != null) && (reference2.SheetCount != 1))
            {
                return(CalcErrors.Reference);
            }
            int rowCount    = reference.GetRowCount(0);
            int columnCount = reference.GetColumnCount(0);

            if (((reference.RangeCount <= 0) || (rowCount <= 0)) || (columnCount <= 0))
            {
                return(CalcErrors.Reference);
            }
            try
            {
                if ((reference.RangeCount == 1) && ((rowCount <= 1) || (columnCount <= 1)))
                {
                    int rowOffset    = row - reference.GetRow(0);
                    int columnOffset = col - reference.GetColumn(0);
                    if ((rowCount == 1) && (columnCount == 1))
                    {
                        return(reference.GetValue(0, 0, 0));
                    }
                    if (((rowCount == 1) && (columnCount > 1)) && ((columnOffset >= 0) && (columnOffset < columnCount)))
                    {
                        return(reference.GetValue(0, 0, columnOffset));
                    }
                    if (((rowCount > 1) && (columnCount == 1)) && ((rowOffset >= 0) && (rowOffset < rowCount)))
                    {
                        return(reference.GetValue(0, rowOffset, 0));
                    }
                }
                return(CalcErrors.Value);
            }
            catch (InvalidCastException)
            {
                return(CalcErrors.Value);
            }
        }
Beispiel #3
0
 public static object GetValue(object o, int row, int column, short rangeId = 0)
 {
     if (o is CalcArray)
     {
         CalcArray array = (CalcArray)o;
         return(array.GetValue(row, column));
     }
     if (o is CalcReference)
     {
         CalcReference reference = (CalcReference)o;
         return(reference.GetValue(rangeId, row, column));
     }
     return(o);
 }
Beispiel #4
0
 public static object GetValue(object o, int i, short rangeId = 0)
 {
     if (o is CalcArray)
     {
         CalcArray array       = (CalcArray)o;
         int       columnCount = array.ColumnCount;
         return(array.GetValue(i / columnCount, i % columnCount));
     }
     if (o is CalcReference)
     {
         CalcReference reference = (CalcReference)o;
         int           num2      = reference.GetColumnCount(rangeId);
         return(reference.GetValue(rangeId, i / num2, i % num2));
     }
     return(o);
 }