Example #1
0
 void UndoFillRangeTables()
 {
     if ((_cachedTables != null) && (_cachedTables.Count > 0))
     {
         foreach (SheetTable table in _cachedTables)
         {
             CellRange range       = table.Range;
             int       row         = range.Row;
             int       column      = range.Column;
             int       rowCount    = range.RowCount;
             int       columnCount = range.ColumnCount;
             if (!table.ShowHeader)
             {
                 row--;
                 rowCount++;
             }
             if (table.ShowFooter)
             {
                 rowCount--;
             }
             SheetTable table2 = _workSheet.AddTable(table.Name, row, column, rowCount, columnCount, table.Style);
             table2.BandedColumns        = table.BandedColumns;
             table2.BandedRows           = table.BandedRows;
             table2.HighlightFirstColumn = table.HighlightFirstColumn;
             table2.HighlightLastColumn  = table.HighlightLastColumn;
             table2.ShowFooter           = table.ShowFooter;
             table2.ShowHeader           = table.ShowHeader;
         }
     }
 }
Example #2
0
 void IRangeSupport.Clear(int row, int column, int rowCount, int columnCount)
 {
     if (this.innerList != null)
     {
         List <SheetTable> list  = new List <SheetTable>();
         CellRange         range = new CellRange(row, column, rowCount, columnCount);
         foreach (SheetTable table in this.innerList)
         {
             if (range.Contains(table.Range))
             {
                 list.Add(table);
             }
         }
         foreach (SheetTable table2 in list)
         {
             this.innerList.Remove(table2);
         }
         for (int i = 0; i < this.innerList.Count; i++)
         {
             SheetTable table3 = this.innerList[i];
             if (table3 != null)
             {
                 ((IRangeSupport)table3).Clear(row, column, rowCount, columnCount);
             }
         }
     }
 }
Example #3
0
        /// <summary>
        /// 选择改变事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void OnSelectionChanged(object sender, EventArgs e)
        {
            if (!Info.Root.ViewSetting.ShowContextMenu)
            {
                return;
            }

            _selectedTable         = null;
            _excel.DecorationRange = null;

            Worksheet sheet = _excel.ActiveSheet;

            if (sheet == null || sheet.Selections.Count != 1)
            {
                return;
            }

            CellRange range = sheet.Selections[0];

            SheetTable[] st = sheet.GetTables();
            foreach (SheetTable tbl in st)
            {
                if (tbl.Range.Intersects(range.Row, range.Column, range.RowCount, range.ColumnCount))
                {
                    _selectedTable         = tbl;
                    _excel.DecorationRange = tbl.Range;
                    break;
                }
            }
            // 选择区包含表格 单行时不显示菜单
            if (_selectedTable != null || range.RowCount == 1)
            {
                return;
            }

            if (_selectionMenu == null)
            {
                _selectionMenu = new Menu {
                    IsContextMenu = true
                };
                Mi mi = new Mi {
                    ID = "转为表格", Icon = Icons.田字格
                };
                mi.Click += (s, args) => AddSheetTable(_excel.ActiveSheet.Selections[0]);
                _selectionMenu.Items.Add(mi);

                mi = new Mi {
                    ID = "生成柱状图", Icon = Icons.对比图
                };
                mi.Click += (s, args) => AddChart(_excel.ActiveSheet.Selections[0]);
                _selectionMenu.Items.Add(mi);
            }

            Point  topLeft = _excel.GetAbsolutePosition();
            Rect   rc      = _excel.ActiveSheet.GetRangeBound(range);
            double x       = topLeft.X + rc.X + rc.Width + 5 - (_excel.ActiveSheet.RowHeader.IsVisible ? 0 : _excel.ActiveSheet.RowHeader.DefaultColumnWidth);
            double y       = topLeft.Y + rc.Y - (_excel.ActiveSheet.ColumnHeader.IsVisible ? 0 : _excel.ActiveSheet.ColumnHeader.DefaultRowHeight);

            _ = _selectionMenu.OpenContextMenu(new Point(x, y));
        }
Example #4
0
 public SheetTable Add(SheetTable table)
 {
     if (table == null)
     {
         throw new ArgumentNullException("table");
     }
     if (this.innerList != null)
     {
         foreach (SheetTable table2 in this.innerList)
         {
             if ((table2 != null) && (CultureInfo.InvariantCulture.CompareInfo.Compare(table.Name, table2.Name, (CompareOptions)CompareOptions.IgnoreCase) == 0))
             {
                 throw new NotSupportedException(string.Format(ResourceStrings.TableCollectionAddTableError, (object[])new object[] { table2.Name }));
             }
         }
     }
     table.owner = this;
     if (this.innerList == null)
     {
         this.innerList = new List <SheetTable>();
     }
     this.innerList.Add(table);
     table.PropertyChanged += new PropertyChangedEventHandler(this.OnTablePropertyChanged);
     return(table);
 }
Example #5
0
        /// <summary>
        /// 清除表格
        /// </summary>
        void ClearTable()
        {
            Worksheet sheet = _excel.ActiveSheet;

            if (sheet == null)
            {
                return;
            }

            List <string> recText = new List <string>();
            List <object> recInst = new List <object>();
            int           idx     = 0;
            RptTextInst   inst;

            Dt.Cells.Data.Cell cell = null;
            _selectedTable = null;

            using (_excel.Defer())
            {
                _excel.DecorationRange = null;
                foreach (SheetTable tbl in sheet.GetTables())
                {
                    CellRange range  = tbl.Range;
                    int       maxRow = range.Row + range.RowCount;
                    int       maxCol = range.Column + range.ColumnCount;
                    for (int i = range.Row; i < maxRow; i++)
                    {
                        for (int j = range.Column; j < maxCol; j++)
                        {
                            cell = sheet[i, j];
                            recText.Add((cell.Text.StartsWith("Column") && cell.Tag == null) ? null : cell.Text);
                            recInst.Add(cell.Tag);
                        }
                    }
                    sheet.RemoveTable(tbl);
                    idx = 0;
                    for (int i = range.Row; i < maxRow; i++)
                    {
                        for (int j = range.Column; j < maxCol; j++)
                        {
                            sheet[i, j].Text = recText[idx];
                            sheet[i, j].Tag  = recInst[idx];
                            inst             = sheet[i, j].Tag as RptTextInst;
                            if (inst == null)
                            {
                                sheet[i, j].StyleName = "";
                            }
                            else
                            {
                                Kit.RunSync(() => { (inst.Item as RptText).ApplyStyle(sheet[i, j]); });
                            }
                            idx++;
                        }
                    }
                    recText.Clear();
                    recInst.Clear();
                }
            }
        }
Example #6
0
 /// <summary>
 /// 点击单元格
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 void OnCellClick(object sender, CellClickEventArgs e)
 {
     if (Info.ScriptObj != null &&
         _excel.ActiveSheet[e.Row, e.Column].Tag is RptTextInst inst &&
         inst.Item is RptText txt &&
         txt.HandleClick)
     {
         _selectedTable         = null;
         _excel.DecorationRange = null;
         Info.ScriptObj.OnCellClick(new RptCellArgs(inst));
     }
 }
Example #7
0
        public void TryGetPropertyMap_TypeValid_ReturnsPropertyMap()
        {
            var type        = typeof(TestType);
            var propertyMap = TypeRepository.GetPropertyMap(type);
            var sheet       = MockedSheetFactory.GetMockedSheet(TestType.TableData);
            var sheetTable  = new SheetTable(sheet);

            var res = TypeRepository.TryGetPropertyMap(sheetTable, type, out var map);

            Assert.That(res);
            Assert.That(propertyMap.Keys.All(k => !String.IsNullOrWhiteSpace(k[0])));
        }
Example #8
0
        public void Indexer_ValidRowAndColumn_ReturnsCellValue()
        {
            // Arrange:
            var sheet      = MockedSheetFactory.HeaderTestCases(5, 5).Cast <TestCaseData>().First().Arguments[0] as ISheet;
            var sheetTable = new SheetTable(sheet);

            // Action:
            var res = sheetTable[2, 2];

            // Assert:
            Assert.That(res, Is.Not.Null);
            Assert.That(res.GetType().IsAssignableFrom(typeof(CellValue)));
        }
Example #9
0
 void IRangeSupport.Copy(int fromRow, int fromColumn, int toRow, int toColumn, int rowCount, int columnCount)
 {
     if (this.innerList != null)
     {
         for (int i = 0; i < this.innerList.Count; i++)
         {
             SheetTable table = this.innerList[i];
             if (table != null)
             {
                 ((IRangeSupport)table).Copy(fromRow, fromColumn, toRow, toColumn, rowCount, columnCount);
             }
         }
     }
 }
Example #10
0
        public void Indexer_ColumnOutOfRange_Throws()
        {
            // Arrange:
            var sheet      = MockedSheetFactory.HeaderTestCases(5, 5).Cast <TestCaseData>().First().Arguments[0] as ISheet;
            var sheetTable = new SheetTable(sheet);

            // Action:
            var ex = Assert.Catch <IndexOutOfRangeException>(() =>
            {
                var res = sheetTable[0, -1];
            });

            // Assert:
            StringAssert.Contains("Column was outside the bounds of sheet table.", ex.Message);
        }
Example #11
0
        public void Indexer_SheetTableContainsOnlyHeaders_Throws()
        {
            // Arrange:
            var sheet      = MockedSheetFactory.HeaderTestCases(5, 5).Cast <TestCaseData>().Where(tc => tc.TestName.Contains("#8"))?.First().Arguments[0] as ISheet;
            var sheetTable = new SheetTable(sheet);

            // Action:
            var ex = Assert.Catch <InvalidOperationException>(() =>
            {
                var res = sheetTable[0, 0];
            });

            // Assert:
            StringAssert.Contains("Sheet has only headers.", ex.Message);
        }
Example #12
0
 public void RemoveTable(SheetTable table)
 {
     if (table == null)
     {
         throw new NullReferenceException("table");
     }
     if (this.innerList != null)
     {
         table.PropertyChanged -= new PropertyChangedEventHandler(this.OnTablePropertyChanged);
         if (this.innerList.Remove(table))
         {
             table.Clear();
         }
     }
 }
Example #13
0
 public SheetTable FindTable(int row, int column)
 {
     if (this.innerList != null)
     {
         for (int i = 0; i < this.innerList.Count; i++)
         {
             SheetTable table = this.innerList[i];
             CellRange  range = table.Range;
             if (((range.Row <= row) && (row <= ((range.Row + range.RowCount) - 1))) && ((range.Column <= column) && (column <= ((range.Column + range.ColumnCount) - 1))))
             {
                 return(table);
             }
         }
     }
     return(null);
 }
Example #14
0
        /// <summary>
        /// 添加表格
        /// </summary>
        /// <param name="p_range"></param>
        SheetTable AddSheetTable(CellRange p_range)
        {
            Worksheet sheet  = _excel.ActiveSheet;
            int       maxRow = p_range.Row + p_range.RowCount;
            int       maxCol = p_range.Column + p_range.ColumnCount;

            for (int i = p_range.Row; i < maxRow; i++)
            {
                for (int j = p_range.Column; j < maxCol; j++)
                {
                    sheet[i, j].StyleName = "";
                }
            }
            SheetTable table = sheet.AddTable("table" + Kit.NewGuid, p_range.Row, p_range.Column, p_range.RowCount, p_range.ColumnCount, TableStyles.Light21);

            sheet.SetActiveCell(0, 0, true);
            return(table);
        }
Example #15
0
 void OnTablePropertyChanged(object sender, PropertyChangedEventArgs e)
 {
     if (e.PropertyName == "Name")
     {
         SheetTable table = sender as SheetTable;
         string     str   = (table == null) ? string.Empty : table.Name;
         if (this.innerList != null)
         {
             foreach (SheetTable table2 in this.innerList)
             {
                 if (!object.ReferenceEquals(table2, sender) && (CultureInfo.InvariantCulture.CompareInfo.Compare(table2.Name, str, (CompareOptions)CompareOptions.IgnoreCase) == 0))
                 {
                     throw new NotSupportedException(string.Format(ResourceStrings.TableCollectionAddTableError, (object[])new object[] { str }));
                 }
             }
         }
     }
     if (this.SheetTableChanged != null)
     {
         this.SheetTableChanged(this, new TableChangedArgs(sender as SheetTable, e.PropertyName));
     }
 }
Example #16
0
 public bool Undo(object parameter)
 {
     if (Worksheet != null)
     {
         bool flag = false;
         if ((_cachedTables != null) && (_cachedTables.Count > 0))
         {
             foreach (SheetTable table in _cachedTables)
             {
                 CellRange range       = table.Range;
                 int       row         = range.Row;
                 int       column      = range.Column;
                 int       rowCount    = range.RowCount;
                 int       columnCount = range.ColumnCount;
                 if (!table.ShowHeader)
                 {
                     row--;
                     rowCount++;
                 }
                 if (table.ShowFooter)
                 {
                     rowCount--;
                 }
                 SheetTable table2 = Worksheet.AddTable(table.Name, row, column, rowCount, columnCount, table.Style);
                 table2.BandedColumns        = table.BandedColumns;
                 table2.BandedRows           = table.BandedRows;
                 table2.HighlightFirstColumn = table.HighlightFirstColumn;
                 table2.HighlightLastColumn  = table.HighlightLastColumn;
                 table2.ShowFooter           = table.ShowFooter;
                 table2.ShowHeader           = table.ShowHeader;
             }
         }
         CellRange range2 = FixRange(Worksheet, ClearRange);
         if (((_cachedValues != null) && (range2.ColumnCount > 0)) && (range2.RowCount > 0))
         {
             try
             {
                 _excel = parameter as Excel;
                 Worksheet.CellChanged += new EventHandler <CellChangedEventArgs>(OnEditedCellChanged);
                 int num5 = range2.RowCount;
                 int num6 = range2.ColumnCount;
                 for (int i = 0; i < num5; i++)
                 {
                     for (int j = 0; j < num6; j++)
                     {
                         int   num9  = range2.Row + i;
                         int   num10 = range2.Column + j;
                         ulong num11 = CopyMoveHelper.ConvertToKey(i, j);
                         if (_cachedValues.ContainsKey(num11))
                         {
                             CellValueEntry entry = _cachedValues[num11];
                             if (entry.IsFormula)
                             {
                                 Worksheet.SetFormula(num9, num10, (string)(entry.Value as string));
                             }
                             else
                             {
                                 Worksheet.SetFormula(num9, num10, null);
                                 Worksheet.SetValue(num9, num10, entry.Value);
                             }
                         }
                         else
                         {
                             Worksheet.SetFormula(num9, num10, null);
                             Worksheet.SetValue(num9, num10, null);
                         }
                     }
                 }
                 foreach (KeyValuePair <CellRange, string> pair in _arrayFormulas)
                 {
                     Worksheet.SetArrayFormula(pair.Key.Row, pair.Key.Column, pair.Key.RowCount, pair.Key.ColumnCount, pair.Value);
                 }
                 flag = true;
             }
             finally
             {
                 Worksheet.CellChanged -= new EventHandler <CellChangedEventArgs>(OnEditedCellChanged);
                 _excel = null;
             }
         }
         if (((_cachedFilteredColumns != null) && (_cachedFilteredColumns.Count > 0)) && (Worksheet.RowFilter != null))
         {
             foreach (int num12 in _cachedFilteredColumns)
             {
                 Worksheet.RowFilter.Filter(num12);
             }
         }
         if (flag)
         {
             RefreshUI(parameter);
             return(true);
         }
     }
     return(false);
 }
Example #17
0
        public void HeadersGetter_NotEmptySheet_ReturnsNotEmptyCollection(ISheet sheet)
        {
            var sheetTable = new SheetTable(sheet);

            Assert.That(sheetTable.Headers.Any());
        }
Example #18
0
        public static IList <SpreadChartBase> GetChartShapeAffectedBySheetTable(Worksheet worksheet, SheetTable table)
        {
            if ((worksheet == null) || (table == null))
            {
                return(null);
            }
            List <SpreadChartBase> list  = new List <SpreadChartBase>();
            List <SpreadChartBase> list2 = new List <SpreadChartBase>();

            foreach (SpreadChart chart in worksheet.Charts)
            {
                list.Add(chart);
            }
            foreach (SpreadChartBase base2 in list)
            {
                SheetCellRange[] rangeArray = null;
                if (base2 is SpreadChart)
                {
                    rangeArray = SheetCellRangeUtility.ExtractAllExternalReference(worksheet, (base2 as SpreadChart).Formula);
                }
                if (rangeArray != null)
                {
                    foreach (SheetCellRange range in rangeArray)
                    {
                        if ((range.Sheet == worksheet) && table.DataRange.Intersects(range.Row, range.Column, range.RowCount, range.ColumnCount))
                        {
                            list2.Add(base2);
                            break;
                        }
                    }
                }
            }
            return((IList <SpreadChartBase>)list2);
        }
Example #19
0
 public ExcelWorksheet()
 {
     Table = new SheetTable();
 }
Example #20
0
 public TableChangedArgs(SheetTable table, string property)
 {
     this.sheetTable   = table;
     this.propertyName = property;
 }
Example #21
0
 public TableCalcEvaluatorContext(SheetTable table, ICalcSource source, bool arrayFormulaMode = false, int baseRowIndex = 0, int baseColumnIndex = 0, int baseRowCount = 1, int baseColumnCount = 1) : base(source, arrayFormulaMode, baseRowIndex, baseColumnIndex, baseRowCount, baseColumnCount)
 {
     this.table = table;
 }
Example #22
0
 public TableFilter(SheetTable owner)
 {
     this.table = owner;
 }
Example #23
0
        public (int, int) Ctor_EmptySheet_ReturnsExpectedRowAndColumnLenghts(ISheet sheet)
        {
            var sheetTable = new SheetTable(sheet);

            return(sheetTable.RowCount, sheetTable.ColumnCount);
        }
Example #24
0
        bool IsCoverTable(int row, int column, int rowCount, int columnCount, SheetTable table)
        {
            CellRange range = table.Range;

            return((((row <= range.Row) && (column <= range.Column)) && ((row + rowCount) >= (range.Row + range.RowCount))) && ((column + columnCount) >= (range.Column + range.ColumnCount)));
        }