private static void DeleteFilterAddress(ExcelRangeBase range, ExcelAddressBase effectedAddress, eShiftTypeDelete shift) { var ws = range.Worksheet; if (ws.AutoFilterAddress != null && effectedAddress.Collide(ws.AutoFilterAddress) != ExcelAddressBase.eAddressCollition.No) { var firstRow = new ExcelAddress(ws.AutoFilterAddress._fromRow, ws.AutoFilterAddress._fromCol, ws.AutoFilterAddress._fromRow, ws.AutoFilterAddress._toCol); if (range.Collide(firstRow, true) >= ExcelAddressBase.eAddressCollition.Inside) { ws.AutoFilterAddress = null; } else if (shift == eShiftTypeDelete.Up) { ws.AutoFilterAddress = ws.AutoFilterAddress.DeleteRow(range._fromRow, range.Rows); } else { ws.AutoFilterAddress = ws.AutoFilterAddress.DeleteColumn(range._fromCol, range.Columns); } } }
private static Dictionary <int, ExcelAddress> GetCopiedMergedCells(ExcelRangeBase sourceRange, ExcelRangeBase Destination) { var toRow = sourceRange._toRow; var toCol = sourceRange._toCol; var fromRow = sourceRange._fromRow; var fromCol = sourceRange._fromCol; var worksheet = sourceRange._worksheet; var copiedMergedCells = new Dictionary <int, ExcelAddress>(); //Merged cells var csem = new CellStoreEnumerator <int>(worksheet.MergedCells._cells, fromRow, fromCol, toRow, toCol); while (csem.Next()) { if (!copiedMergedCells.ContainsKey(csem.Value)) { var adr = new ExcelAddress(worksheet.Name, worksheet.MergedCells._list[csem.Value]); var collideResult = sourceRange.Collide(adr); if (collideResult == eAddressCollition.Inside || collideResult == eAddressCollition.Equal) { copiedMergedCells.Add(csem.Value, new ExcelAddress( Destination._fromRow + (adr.Start.Row - fromRow), Destination._fromCol + (adr.Start.Column - fromCol), Destination._fromRow + (adr.End.Row - fromRow), Destination._fromCol + (adr.End.Column - fromCol))); } else { //Partial merge of the address ignore. copiedMergedCells.Add(csem.Value, null); } } } return(copiedMergedCells); }
private static void DeleteSparkLinesAddress(ExcelRangeBase range, eShiftTypeDelete shift, ExcelAddressBase effectedAddress) { var delSparklineGroups = new List <ExcelSparklineGroup>(); foreach (var slg in range.Worksheet.SparklineGroups) { if (slg.DateAxisRange != null && effectedAddress.Collide(slg.DateAxisRange) >= ExcelAddressBase.eAddressCollition.Inside) { string address; if (shift == eShiftTypeDelete.Up) { address = slg.DateAxisRange.DeleteRow(range._fromRow, range.Rows).Address; } else { address = slg.DateAxisRange.DeleteColumn(range._fromCol, range.Columns).Address; } slg.DateAxisRange = address == null? null : range.Worksheet.Cells[address]; } var delSparklines = new List <ExcelSparkline>(); foreach (var sl in slg.Sparklines) { if (range.Collide(sl.Cell.Row, sl.Cell.Column) >= ExcelAddressBase.eAddressCollition.Inside) { delSparklines.Add(sl); } else if (shift == eShiftTypeDelete.Up) { if (effectedAddress.Collide(sl.RangeAddress) >= ExcelAddressBase.eAddressCollition.Inside || range.CollideFullRow(sl.RangeAddress._fromRow, sl.RangeAddress._toRow)) { sl.RangeAddress = sl.RangeAddress.DeleteRow(range._fromRow, range.Rows); } if (sl.Cell.Row >= range._fromRow && sl.Cell.Column >= range._fromCol && sl.Cell.Column <= range._toCol) { sl.Cell = new ExcelCellAddress(sl.Cell.Row - range.Rows, sl.Cell.Column); } } else { if (effectedAddress.Collide(sl.RangeAddress) >= ExcelAddressBase.eAddressCollition.Inside || range.CollideFullColumn(sl.RangeAddress._fromCol, sl.RangeAddress._toCol)) { sl.RangeAddress = sl.RangeAddress.DeleteColumn(range._fromCol, range.Columns); } if (sl.Cell.Column >= range._fromCol && sl.Cell.Row >= range._fromRow && sl.Cell.Row <= range._toRow) { sl.Cell = new ExcelCellAddress(sl.Cell.Row, sl.Cell.Column - range.Columns); } } } delSparklines.ForEach(x => slg.Sparklines.Remove(x)); if (slg.Sparklines.Count == 0) { delSparklineGroups.Add(slg); } } delSparklineGroups.ForEach(x => range.Worksheet.SparklineGroups.Remove(x)); }