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; } } }
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); } } } }
/// <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)); }
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); }
/// <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(); } } }
/// <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)); } }
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]))); }
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))); }
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); } } } }
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); }
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); }
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(); } } }
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); }
/// <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); }
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)); } }
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); }
public void HeadersGetter_NotEmptySheet_ReturnsNotEmptyCollection(ISheet sheet) { var sheetTable = new SheetTable(sheet); Assert.That(sheetTable.Headers.Any()); }
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); }
public ExcelWorksheet() { Table = new SheetTable(); }
public TableChangedArgs(SheetTable table, string property) { this.sheetTable = table; this.propertyName = property; }
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; }
public TableFilter(SheetTable owner) { this.table = owner; }
public (int, int) Ctor_EmptySheet_ReturnsExpectedRowAndColumnLenghts(ISheet sheet) { var sheetTable = new SheetTable(sheet); return(sheetTable.RowCount, sheetTable.ColumnCount); }
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))); }