Esempio n. 1
0
        public static SpanLayoutData GetSpanLayoutData(Worksheet worksheet, SheetArea area, int rowStartIndex, int rowEndIndex, int columnStartIndex, int columnEndIndex)
        {
            if ((rowEndIndex < rowStartIndex) || (columnEndIndex < columnStartIndex))
            {
                return(null);
            }
            SpanLayoutData data      = new SpanLayoutData();
            SheetSpanModel spanModel = null;

            switch (area)
            {
            case SheetArea.Cells:
                spanModel = worksheet.SpanModel;
                break;

            case (SheetArea.CornerHeader | SheetArea.RowHeader):
                spanModel = worksheet.RowHeaderSpanModel;
                break;

            case SheetArea.ColumnHeader:
                spanModel = worksheet.ColumnHeaderSpanModel;
                break;

            default:
                throw new ArgumentException("area");
            }
            if (spanModel != null)
            {
                IEnumerator enumerator = spanModel.GetEnumerator(rowStartIndex, columnStartIndex, (rowEndIndex - rowStartIndex) + 1, (columnEndIndex - columnStartIndex) + 1);
                while (enumerator.MoveNext())
                {
                    CellRange current = (CellRange)enumerator.Current;
                    data.Add(current.Row, current.Column, current.RowCount, current.ColumnCount, true);
                }
            }
            return(data);
        }
Esempio n. 2
0
        internal Rect GetRangeBounds(CellRange range, SheetArea area)
        {
            SheetSpanModel spanModel = null;

            if (Excel.ActiveSheet != null)
            {
                switch (area)
                {
                case SheetArea.Cells:
                    spanModel = Excel.ActiveSheet.SpanModel;
                    break;

                case (SheetArea.CornerHeader | SheetArea.RowHeader):
                    spanModel = Excel.ActiveSheet.RowHeaderSpanModel;
                    break;

                case SheetArea.ColumnHeader:
                    spanModel = Excel.ActiveSheet.ColumnHeaderSpanModel;
                    break;
                }
            }
            if (spanModel != null)
            {
                CellRange range2 = spanModel.Find(range.Row, range.Column);
                if (((range2 != null) && (range2.RowCount >= range.RowCount)) && (range2.ColumnCount >= range.ColumnCount))
                {
                    range = range2;
                }
            }
            RowLayoutModel    rowLayoutModel    = Excel.GetRowLayoutModel(RowViewportIndex, area);
            ColumnLayoutModel columnLayoutModel = Excel.GetColumnLayoutModel(ColumnViewportIndex, area);
            int row    = (rowLayoutModel.Count > 0) ? rowLayoutModel[0].Row : -1;
            int num2   = (rowLayoutModel.Count > 0) ? rowLayoutModel[rowLayoutModel.Count - 1].Row : -1;
            int column = (columnLayoutModel.Count > 0) ? columnLayoutModel[0].Column : -1;
            int num4   = (columnLayoutModel.Count > 0) ? columnLayoutModel[columnLayoutModel.Count - 1].Column : -1;

            if (!range.Intersects(row, column, (num2 - row) + 1, (num4 - column) + 1))
            {
                return(Rect.Empty);
            }
            int          index   = Math.Max(range.Row, row);
            int          num6    = Math.Max(range.Column, column);
            int          num7    = Math.Min((range.Row + range.RowCount) - 1, num2);
            int          num8    = Math.Min((range.Column + range.ColumnCount) - 1, num4);
            RowLayout    layout  = rowLayoutModel.Find(index);
            RowLayout    layout2 = rowLayoutModel.Find(num7);
            ColumnLayout layout3 = columnLayoutModel.Find(num6);
            ColumnLayout layout4 = columnLayoutModel.Find(num8);
            double       x       = -1.0;
            double       y       = -1.0;
            double       height  = 0.0;
            double       width   = 0.0;

            if ((layout != null) && (layout2 != null))
            {
                y      = layout.Y;
                height = (layout2.Y + layout2.Height) - layout.Y;
            }
            else if (rowLayoutModel.Count > 0)
            {
                y      = rowLayoutModel[0].Y;
                height = (rowLayoutModel[rowLayoutModel.Count - 1].Y + rowLayoutModel[rowLayoutModel.Count - 1].Height) - y;
            }
            if ((layout3 != null) && (layout4 != null))
            {
                x     = layout3.X;
                width = (layout4.X + layout4.Width) - layout3.X;
            }
            else if (columnLayoutModel.Count > 0)
            {
                x     = columnLayoutModel[0].X;
                width = (columnLayoutModel[columnLayoutModel.Count - 1].X + columnLayoutModel[columnLayoutModel.Count - 1].Width) - x;
            }
            return(new Rect(PointToClient(new Point(x, y)), new Size(width, height)));
        }
Esempio n. 3
0
        public static void UndoCellsInfo(Worksheet sheet, CopyMoveCellsInfo cellsInfo, int baseRow, int baseColumn, SheetArea area)
        {
            int rowCount    = cellsInfo.RowCount;
            int columnCount = cellsInfo.ColumnCount;

            sheet.SuspendCalcService();
            try
            {
                for (int i = 0; i < rowCount; i++)
                {
                    for (int j = 0; j < columnCount; j++)
                    {
                        if (cellsInfo.IsFormulaSaved() && (area == SheetArea.Cells))
                        {
                            sheet.SetFormula(baseRow + i, baseColumn + j, null);
                        }
                        if (cellsInfo.IsSparklineSaved() && (area == SheetArea.Cells))
                        {
                            sheet.RemoveSparkline(baseRow + i, baseColumn + j);
                        }
                        if (cellsInfo.IsValueSaved())
                        {
                            sheet.SetValue(baseRow + i, baseColumn + j, area, null);
                        }
                        if (cellsInfo.IsStyleSaved())
                        {
                            SetStyleObject(sheet, baseRow + i, baseColumn + j, area, null);
                        }
                        if (cellsInfo.IsTagSaved())
                        {
                            sheet.SetTag(baseRow + i, baseColumn + j, area, null);
                        }
                    }
                }
                if (cellsInfo.IsFormulaSaved() && (area == SheetArea.Cells))
                {
                    foreach (CellData data in cellsInfo.GetFormulas())
                    {
                        sheet.SetFormula(baseRow + data.Row, baseColumn + data.Column, (string)(data.Value as string));
                    }
                }
                if (cellsInfo.IsSparklineSaved() && (area == SheetArea.Cells))
                {
                    foreach (CellData data2 in cellsInfo.GetSparklines())
                    {
                        SparklineInfo info = data2.Value as SparklineInfo;
                        if (info == null)
                        {
                            ((ISparklineSheet)sheet).SetSparkline(baseRow + data2.Row, baseColumn + data2.Column, null);
                        }
                        else if (info.DataAxisRange == null)
                        {
                            sheet.SetSparkline(baseRow + data2.Row, baseColumn + data2.Column, info.DataRange, info.Sparkline.DataOrientation, info.Sparkline.SparklineType, info.Sparkline.Setting);
                        }
                        else
                        {
                            sheet.SetSparkline(baseRow + data2.Row, baseColumn + data2.Column, info.DataRange, info.Sparkline.DataOrientation, info.Sparkline.SparklineType, info.DataAxisRange, info.Sparkline.DateAxisOrientation, info.Sparkline.Setting);
                        }
                    }
                }
                if (cellsInfo.IsValueSaved())
                {
                    foreach (CellData data3 in cellsInfo.GetValues())
                    {
                        sheet.SetValue(baseRow + data3.Row, baseColumn + data3.Column, area, data3.Value);
                    }
                }
                if (cellsInfo.IsStyleSaved())
                {
                    foreach (CellData data4 in cellsInfo.GetStyles())
                    {
                        SetStyleObject(sheet, baseRow + data4.Row, baseColumn + data4.Column, area, data4.Value);
                    }
                }
                if (cellsInfo.IsTagSaved())
                {
                    foreach (CellData data5 in cellsInfo.GetTags())
                    {
                        sheet.SetTag(baseRow + data5.Row, baseColumn + data5.Column, area, data5.Value);
                    }
                }
                if (cellsInfo.IsArrayFormulaSaved() && (area == SheetArea.Cells))
                {
                    object[,] arrayFormula = Excel.GetsArrayFormulas(sheet, baseRow, baseColumn, rowCount, columnCount);
                    if ((arrayFormula != null) && (arrayFormula.Length > 0))
                    {
                        int length = arrayFormula.GetLength(0);
                        for (int k = 0; k < length; k++)
                        {
                            CellRange range = (CellRange)arrayFormula[k, 0];
                            sheet.SetArrayFormula(range.Row, range.Column, range.RowCount, range.ColumnCount, null);
                        }
                    }
                    arrayFormula = cellsInfo.GetArrayFormula();
                    if ((arrayFormula != null) && (arrayFormula.Length > 0))
                    {
                        int num7 = arrayFormula.GetLength(0);
                        for (int m = 0; m < num7; m++)
                        {
                            CellRange range2  = (CellRange)arrayFormula[m, 0];
                            string    formula = (string)((string)arrayFormula[m, 1]);
                            if (formula.StartsWith("{") && formula.EndsWith("}"))
                            {
                                formula = formula.Substring(1, formula.Length - 2);
                            }
                            sheet.SetArrayFormula(range2.Row, range2.Column, range2.RowCount, range2.ColumnCount, formula);
                        }
                    }
                }
            }
            finally
            {
                sheet.ResumeCalcService();
            }
            SheetSpanModel spanModel = null;

            if (area == SheetArea.Cells)
            {
                spanModel = sheet.SpanModel;
            }
            else if (area == SheetArea.ColumnHeader)
            {
                spanModel = sheet.ColumnHeaderSpanModel;
            }
            else if (area == (SheetArea.CornerHeader | SheetArea.RowHeader))
            {
                spanModel = sheet.RowHeaderSpanModel;
            }
            if ((spanModel != null) && !spanModel.IsEmpty())
            {
                List <CellRange> list6      = new List <CellRange>();
                IEnumerator      enumerator = spanModel.GetEnumerator(baseRow, baseColumn, rowCount, columnCount);
                while (enumerator.MoveNext())
                {
                    CellRange current = enumerator.Current as CellRange;
                    if (current != null)
                    {
                        list6.Add(current);
                    }
                }
                foreach (CellRange range4 in list6)
                {
                    spanModel.Remove(range4.Row, range4.Column);
                }
            }
            if (cellsInfo.IsSpanSaved() && (spanModel != null))
            {
                foreach (CellRange range5 in cellsInfo.Spans)
                {
                    spanModel.Add(range5.Row, range5.Column, range5.RowCount, range5.ColumnCount);
                }
            }
        }