Example #1
0
        public static int MergeRanges(Range currentCellRange, MergeOption mOption)
        {
            Worksheet sheet = currentCellRange.Worksheet;
            Range     range = null;

            // clear value first.
            currentCellRange.Value2 = null;
            currentCellRange.Text   = "";

            switch (mOption)
            {
            case MergeOption.Up:

                // Select previous range.
                range = GetRange(sheet, currentCellRange.Column, currentCellRange.Row - 1, 1, 1);

                if (range.HasMerged)
                {
                    Range marea   = range.MergeArea;
                    int   mWidth  = currentCellRange.Column - marea.Column + 1;
                    int   mHeight = currentCellRange.Row - marea.Row + 1;

                    /*if (mWidth <= marea.ColumnCount && mHeight <= marea.RowCount)
                     * {
                     *      Console.WriteLine ("Has be merged. ignore");
                     *      return 1 ;
                     * }*/

                    if (mWidth < marea.ColumnCount)
                    {
                        mWidth = marea.ColumnCount;
                    }

                    if (mHeight < marea.RowCount)
                    {
                        mHeight = marea.RowCount;
                    }

                    range = GetRange(sheet,
                                     marea.Column, marea.Row,
                                     mWidth,
                                     mHeight);

                    /*
                     * Console.WriteLine("Up cell has been merged: [" +
                     *                                 marea.Column + ", " + marea.Row + "], " +
                     *                                 (currentCellRange.Column - marea.Column + 1) + ", " +
                     *                                 (currentCellRange.Row - marea.Row + 1) + ", [" +
                     *                                marea.ColumnCount + "," + marea.RowCount + "]");
                     */
                    range.Merge();
                }
                else
                {
                    range = GetRange(sheet,
                                     currentCellRange.Column,
                                     currentCellRange.Row - 1,
                                     1, 2);
                    range.Merge();
                }

                return(1);

            case MergeOption.Left:
                // merge with Left cell.

                /*
                 * Console.WriteLine("Merge Left: get left cell first: [" +
                 *                (currentCellRange.Column ) +
                 *                ", " + currentCellRange.Row + "].") ;
                 */
                range = GetRange(sheet, currentCellRange.Column - 1, currentCellRange.Row, 1, 1);

                if (range.HasMerged)
                {
                    Range marea   = range.MergeArea;
                    int   mWidth  = currentCellRange.Column - marea.Column + 1;
                    int   mHeight = currentCellRange.Row - marea.Row + 1;
                    if (mWidth < marea.ColumnCount)
                    {
                        mWidth = marea.ColumnCount;
                    }

                    if (mHeight < marea.RowCount)
                    {
                        mHeight = marea.RowCount;
                    }

                    range = GetRange(sheet,
                                     marea.Column, marea.Row,
                                     mWidth,
                                     mHeight);

                    /*
                     * Console.WriteLine ("Left cell has been merged: [" +
                     *                 marea.Column + ", " + marea.Row + "], " +
                     *                 (currentCellRange.Column - marea.Column + 1) + ", " +
                     *                 (currentCellRange.Row - marea.Row + 1) + ", [" +
                     *                marea.ColumnCount + "," + marea.RowCount + "]");
                     */
                    range.Merge();
                }
                else
                {
                    range = GetRange(sheet,
                                     currentCellRange.Column - 1,
                                     currentCellRange.Row,
                                     2, 1);

                    range.Merge();
                }

                // range.Merge ();
                return(1);

            case MergeOption.never:
            default:
                return(0);
            }
        }