diff --git a/ClosedXML/Excel/XLWorksheets.cs b/ClosedXML/Excel/XLWorksheets.cs index ea22509..4d14cb7 100644 --- a/ClosedXML/Excel/XLWorksheets.cs +++ b/ClosedXML/Excel/XLWorksheets.cs @@ -98,7 +98,7 @@ public IXLWorksheet Add(String sheetName) { var sheet = new XLWorksheet(sheetName, _workbook); - _worksheets.Add(sheetName, sheet); + Add(sheetName, sheet); sheet._position = _worksheets.Count + _workbook.UnsupportedSheets.Count; return sheet; } @@ -108,11 +108,19 @@ _worksheets.Values.Where(w => w._position >= position).ForEach(w => w._position += 1); _workbook.UnsupportedSheets.Where(w => w.Position >= position).ForEach(w => w.Position += 1); var sheet = new XLWorksheet(sheetName, _workbook); - _worksheets.Add(sheetName, sheet); + Add(sheetName, sheet); sheet._position = position; return sheet; } + private void Add(String sheetName, XLWorksheet sheet) + { + if (_worksheets.Any(ws => ws.Key.Equals(sheetName, StringComparison.OrdinalIgnoreCase))) + throw new ArgumentException(String.Format("A worksheet with the same name ({0}) has already been added.", sheetName), nameof(sheetName)); + + _worksheets.Add(sheetName, sheet); + } + public void Delete(String sheetName) { Delete(_worksheets[sheetName].Position); @@ -172,9 +180,12 @@ { if (XLHelper.IsNullOrWhiteSpace(oldSheetName) || !_worksheets.ContainsKey(oldSheetName)) return; + if (_worksheets.Any(ws1 => ws1.Key.Equals(newSheetName, StringComparison.OrdinalIgnoreCase))) + throw new ArgumentException(String.Format("A worksheet with the same name ({0}) has already been added.", newSheetName), nameof(newSheetName)); + var ws = _worksheets[oldSheetName]; _worksheets.Remove(oldSheetName); - _worksheets.Add(newSheetName, ws); + Add(newSheetName, ws); } } } diff --git a/ClosedXML_Tests/Excel/Worksheets/XLWorksheetTests.cs b/ClosedXML_Tests/Excel/Worksheets/XLWorksheetTests.cs index 38615bf..f679187 100644 --- a/ClosedXML_Tests/Excel/Worksheets/XLWorksheetTests.cs +++ b/ClosedXML_Tests/Excel/Worksheets/XLWorksheetTests.cs @@ -84,6 +84,21 @@ } [Test] + public void AddingDuplicateSheetNameThrowsException() + { + using (var wb = new XLWorkbook()) + { + IXLWorksheet ws; + ws = wb.AddWorksheet("Sheet1"); + + Assert.Throws(() => wb.AddWorksheet("Sheet1")); + + //Sheet names are case insensitive + Assert.Throws(() => wb.AddWorksheet("sheet1")); + } + } + + [Test] public void MergedRanges() { IXLWorksheet ws = new XLWorkbook().Worksheets.Add("Sheet1"); @@ -126,4 +141,4 @@ } } } -} +} \ No newline at end of file