public override Response Delete(string objectType, IList <string> identifiers) { Response response = new Response(); try { if (identifiers == null || identifiers.Count == 0) { Status status = new Status(); status.Level = StatusLevel.Warning; status.Messages.Add("Nothing to delete."); response.Append(status); return(response); } SpreadsheetTable cftable = _provider.GetConfigurationTable(objectType); SpreadsheetReference tableReference = cftable.GetReference(); WorksheetPart worksheetPart = _provider.GetWorksheetPart(tableReference.SheetName); SpreadsheetColumn column = cftable.Columns.First <SpreadsheetColumn>(c => cftable.Identifier.Equals(c.Name)); IEnumerable <Row> rows = worksheetPart.Worksheet.Descendants <Row>(); foreach (string identifier in identifiers) { Status status = new Status(); status.Identifier = identifier; try { foreach (Row row in rows) { Cell cell = row.Descendants <Cell>().First(c => SpreadsheetReference.GetColumnName(c.CellReference).Equals(column.ColumnIdx)); if (_provider.GetValue(cell).Equals(identifier)) { row.Remove(); string message = String.Format( "DataObject [{0}] deleted successfully.", identifier ); status.Messages.Add(message); } } } catch (Exception ex) { _logger.Error("Error in Delete: " + ex); status.Level = StatusLevel.Error; string message = String.Format( "Error while deleting dataObject [{0}]. {1}", identifier, ex ); status.Messages.Add(message); } response.Append(status); rows = worksheetPart.Worksheet.Descendants <Row>().OrderBy(r => r.RowIndex.Value); uint i = 1; foreach (Row row in rows) { row.RowIndex.Value = i++; } tableReference.EndRow = --i; worksheetPart.Worksheet.SheetDimension.Reference = tableReference.GetReference(false); cftable.Reference = tableReference.GetReference(true); worksheetPart.Worksheet.Save(); } } finally { _provider.Dispose(); } return(response); }