diff --git a/ooxml/XSSF/UserModel/XSSFWorkbook.cs b/ooxml/XSSF/UserModel/XSSFWorkbook.cs index 0ff02e2fd..58518cc62 100644 --- a/ooxml/XSSF/UserModel/XSSFWorkbook.cs +++ b/ooxml/XSSF/UserModel/XSSFWorkbook.cs @@ -35,6 +35,7 @@ limitations under the License. using NPOI.OpenXml4Net.Exceptions; using NPOI.SS; using System.Globalization; +using System.Linq; namespace NPOI.XSSF.UserModel { @@ -261,7 +262,7 @@ public XSSFWorkbook(Stream is1) public XSSFWorkbook(FileInfo file) : this(OPCPackage.Open(file)) { - + } /** @@ -928,7 +929,7 @@ public ISheet CreateSheet(String sheetname) private void ValidateSheetName(String sheetName) { if (ContainsSheet(sheetName, sheets.Count)) - throw new ArgumentException(string.Format("The workbook already contains a sheet named '{0}'",sheetName)); + throw new ArgumentException(string.Format("The workbook already contains a sheet named '{0}'", sheetName)); } protected XSSFDialogsheet CreateDialogsheet(String sheetname, CT_Dialogsheet dialogsheet) { @@ -1271,7 +1272,7 @@ public void RemoveName(int nameIndex) public void RemoveName(String name) { List names = namedRangesByName[name.ToLower()]; - if (names.Count==0) + if (names.Count == 0) { throw new ArgumentException("Named range was not found: " + name); } @@ -1280,7 +1281,7 @@ public void RemoveName(String name) private bool RemoveMapping(string key, XSSFName item) { - if(namedRangesByName.ContainsKey(key)) + if (namedRangesByName.ContainsKey(key)) { var values = namedRangesByName[key]; return values.Remove(item); @@ -1571,7 +1572,7 @@ public XSSFName GetBuiltInName(String builtInCode, int sheetNumber) { if (!namedRangesByName.ContainsKey(builtInCode.ToLower())) return null; - + foreach (XSSFName name in namedRangesByName[builtInCode.ToLower()]) { if (name.SheetIndex == sheetNumber) @@ -1644,7 +1645,7 @@ public void SetSheetName(int sheetIndex, String sheetname) // Check it isn't already taken if (ContainsSheet(sheetname, sheetIndex)) - throw new ArgumentException(string.Format("The workbook already contains a sheet named '{0}'",sheetname)); + throw new ArgumentException(string.Format("The workbook already contains a sheet named '{0}'", sheetname)); // Update references to the name XSSFFormulaUtils utils = new XSSFFormulaUtils(this); @@ -2219,7 +2220,7 @@ public void RemovePivotTables() foreach (var xssfPivotTable in pivotTables) { var sheet = xssfPivotTable.GetParent(); - if ( sheet is XSSFSheet ) + if (sheet is XSSFSheet) { sheet.RemoveRelation(xssfPivotTable); } @@ -2229,7 +2230,7 @@ public void RemovePivotTables() { if (poixmlDocumentPart is XSSFPivotCacheDefinition) { - var pivotCacheDefinition = (XSSFPivotCacheDefinition)poixmlDocumentPart; + var pivotCacheDefinition = (XSSFPivotCacheDefinition)poixmlDocumentPart; RemoveRelation(pivotCacheDefinition); } } @@ -2587,8 +2588,16 @@ public bool IsReadOnly public bool Remove(ISheet item) { + string sheetName = item.SheetName; + int idx = sheets.FindIndex(_ => _.SheetName.Equals(sheetName, StringComparison.CurrentCultureIgnoreCase)); - return this.sheets.Remove((XSSFSheet)item); + if (idx != -1) + { + RemoveSheetAt(idx); + return true; + } + + return false; } #endregion diff --git a/testcases/ooxml/XSSF/UserModel/TestXSSFWorkbook.cs b/testcases/ooxml/XSSF/UserModel/TestXSSFWorkbook.cs index 69c4d59f7..abede86b4 100644 --- a/testcases/ooxml/XSSF/UserModel/TestXSSFWorkbook.cs +++ b/testcases/ooxml/XSSF/UserModel/TestXSSFWorkbook.cs @@ -1196,5 +1196,25 @@ public void TestRemoveSheet() wb.Close(); } + [Test] + public void TestRemoveSheetMethod() + { + using (XSSFWorkbook wb = new XSSFWorkbook()) + { + var sheet1 = wb.CreateSheet("Sheet1"); + var sheet2 = wb.CreateSheet("Sheet2"); + + Assert.True(wb.Remove(sheet2)); + Assert.AreEqual(1, wb.NumberOfSheets); + Assert.AreEqual("Sheet1", wb.GetSheetName(0)); + Assert.AreEqual(sheet1, wb.GetSheet("Sheet1")); + + using (var wbCopy = XSSFTestDataSamples.WriteOutAndReadBack(wb)) + { + Assert.AreEqual(1, wbCopy.NumberOfSheets); + Assert.AreEqual("Sheet1", wb.GetSheetName(0)); + } + } + } } }