Beispiel #1
0
 /// <summary>
 ///  Initializes a new instance of the <see cref="CompositeRangeReference" /> class.<br/>
 /// </summary>
 /// <param name="rangeReference">The range reference used to initialise this composite.</param>
 public CompositeRangeReference(RangeReference rangeReference) : this()
 {
     this.Update(rangeReference);
 }
Beispiel #2
0
        /// <summary>
        /// Updates this <see cref="CompositeRangeReference"/> with a new range reference.
        /// </summary>
        /// <param name="rangeReference">The <see cref="RangeReference"/> to be added</param>
        public void Update(RangeReference rangeReference)
        {
            if (this.rangeReferences.Count == 0)
            {
                this.rangeReferences.Add(rangeReference);
                this.sheetName      = rangeReference.SheetName;
                this.minRowIndex    = rangeReference.StartRowIndex;
                this.maxRowIndex    = rangeReference.EndRowIndex;
                this.minColumnIndex = rangeReference.StartColumnIndex;
                this.maxColumnIndex = rangeReference.EndColumnIndex;
            }
            else
            {
                if (this.sheetName != rangeReference.SheetName)
                {
                    var sb = new StringBuilder();
                    sb.AppendLine("Cannot create a composite range reference using 2 different worksheets.");
                    sb.AppendFormat("Last added worksheet was '{0}', trying to add '{1}'", this.sheetName, rangeReference.SheetName);

                    throw new InvalidOperationException(sb.ToString());
                }

                RangeReference lrr = this.rangeReferences[this.rangeReferences.Count - 1];

                bool sameColumns = lrr.StartColumnIndex == rangeReference.StartColumnIndex && lrr.EndColumnIndex == rangeReference.EndColumnIndex;
                bool sameRows    = lrr.StartRowIndex == rangeReference.StartRowIndex && lrr.EndRowIndex == rangeReference.EndRowIndex;

                if (sameColumns && lrr.EndRowIndex > 0 && lrr.EndRowIndex == (rangeReference.StartRowIndex - 1))
                {
                    // Update last to append after rows
                    lrr.EndRowIndex = rangeReference.EndRowIndex;
                }
                else if (sameColumns && rangeReference.EndRowIndex > 0 && lrr.StartRowIndex == (rangeReference.EndRowIndex + 1))
                {
                    // Update last to append before rows
                    lrr.StartRowIndex = rangeReference.StartRowIndex;
                }
                else if (sameRows && lrr.EndColumnIndex > 0 && lrr.EndColumnIndex == (rangeReference.StartColumnIndex - 1))
                {
                    // Update last to append after columns
                    lrr.EndColumnIndex = rangeReference.EndColumnIndex;
                }
                else if (sameColumns && rangeReference.EndRowIndex > 0 && lrr.StartRowIndex == (rangeReference.EndRowIndex + 1))
                {
                    // Update last to append before columns
                    lrr.StartColumnIndex = rangeReference.StartColumnIndex;
                }
                else if (!sameColumns || !sameRows)
                {
                    // Finally, unless we actually have the same range, can't append, so add to list...
                    this.rangeReferences.Add(rangeReference);
                }

                // Update min/max row and column indexes
                if (rangeReference.StartRowIndex < this.minRowIndex)
                {
                    this.minRowIndex = rangeReference.StartRowIndex;
                }
                if (rangeReference.EndRowIndex > this.maxRowIndex)
                {
                    this.maxRowIndex = rangeReference.EndRowIndex;
                }
                if (rangeReference.StartColumnIndex < this.minColumnIndex)
                {
                    this.minColumnIndex = rangeReference.StartColumnIndex;
                }
                if (rangeReference.EndColumnIndex > this.maxColumnIndex)
                {
                    this.maxColumnIndex = rangeReference.EndRowIndex;
                }
            }

            this.reference = this.GetExcelAbsoluteRef();
        }