internal void CleanUnusedNames(TWorkbook Workbook) { TDeletedRanges DeletedRanges = Workbook.FindUnreferencedRanges(-1, 0); for (int i = DeletedRanges.Count - 1; i >= 0; i--) { if (!DeletedRanges.Referenced(i) && !this[i].HasFormulaData && CanDeleteName(i)) //don't delete internal names, or macro names. { FList.RemoveAt(i); DeletedRanges.AddNameForDelete(i); } } if (DeletedRanges.NeedsUpdate) { Workbook.UpdateDeletedRanges(-1, 0, DeletedRanges); } }
internal void DeleteName(int Index, TWorkbook Workbook) { if (Index < 0 || Index >= Count) { XlsMessages.ThrowException(XlsErr.ErrXlsIndexOutBounds, Index, "Index", 0, Count - 1); } TDeletedRanges DeletedRanges = Workbook.FindUnreferencedRanges(-1, 0); if (!DeletedRanges.Referenced(Index) && CanDeleteName(Index)) //don't delete internal names, or macro names. { FList.RemoveAt(Index); DeletedRanges.AddNameForDelete(Index); Workbook.UpdateDeletedRanges(-1, 0, DeletedRanges); } else { ClearName(Index); } }
internal void DeleteSheets(int SheetIndex, int SheetCount, TWorkbook Workbook) { TDeletedRanges DeletedRanges = Workbook.FindUnreferencedRanges(SheetIndex, SheetCount); for (int i = Count - 1; i >= 0; i--) { if ((this[i].RangeSheet >= SheetIndex) && (this[i].RangeSheet < SheetIndex + SheetCount)) { /* We cannot just delete the range, or formulas referring this range would crash (or refer to the wrong name). * To actually delete here, we need to first find out whether this range is used. * If it is not, go through all the formulas, charts, pivot tables, etc, and update the references to * ranges less than this one to one less. */ if (!DeletedRanges.Referenced(i) && CanDeleteName(i)) //don't delete internal names, or macro names. { FList.RemoveAt(i); DeletedRanges.AddNameForDelete(i); } else { EnsureUniqueGlobalName(i); this[i].RangeSheet = -1; } } else { this[i].ArrangeInsertSheets(SheetIndex, -SheetCount); } } if (DeletedRanges.NeedsUpdate) { Workbook.UpdateDeletedRanges(SheetIndex, SheetCount, DeletedRanges); //Update formulas, charts, etc. } }