diff --git a/lib/doc/workbook.js b/lib/doc/workbook.js index a6e4de920..28cd697d1 100644 --- a/lib/doc/workbook.js +++ b/lib/doc/workbook.js @@ -112,7 +112,9 @@ class Workbook { return this._worksheets[id]; } if (typeof id === 'string') { - return this._worksheets.find(worksheet => worksheet && worksheet.name === id); + // Case-insensitive to match addWorksheet's uniqueness rule (and Excel itself). + const target = id.toLowerCase(); + return this._worksheets.find(ws => ws && ws.name.toLowerCase() === target); } return undefined; } diff --git a/spec/integration/issues/issue-3028-getworksheet-case-insensitive.spec.js b/spec/integration/issues/issue-3028-getworksheet-case-insensitive.spec.js new file mode 100644 index 000000000..8be194363 --- /dev/null +++ b/spec/integration/issues/issue-3028-getworksheet-case-insensitive.spec.js @@ -0,0 +1,46 @@ +const ExcelJS = verquire('exceljs'); + +describe('github issues', () => { + describe('issue 3028 - workbook.getWorksheet should be case-insensitive', () => { + it('returns the same worksheet regardless of name casing', () => { + const wb = new ExcelJS.Workbook(); + const ws = wb.addWorksheet('TestSheet'); + + expect(wb.getWorksheet('TestSheet')).to.equal(ws); + expect(wb.getWorksheet('testsheet')).to.equal(ws); + expect(wb.getWorksheet('TESTSHEET')).to.equal(ws); + expect(wb.getWorksheet('tEsTsHeEt')).to.equal(ws); + }); + + it('returns undefined for genuinely unknown names', () => { + const wb = new ExcelJS.Workbook(); + wb.addWorksheet('TestSheet'); + + expect(wb.getWorksheet('OtherSheet')).to.equal(undefined); + }); + + it('preserves numeric id lookup', () => { + const wb = new ExcelJS.Workbook(); + const ws = wb.addWorksheet('TestSheet'); + + expect(wb.getWorksheet(ws.id)).to.equal(ws); + }); + + it('preserves the no-arg first-worksheet shortcut', () => { + const wb = new ExcelJS.Workbook(); + const ws = wb.addWorksheet('TestSheet'); + + expect(wb.getWorksheet()).to.equal(ws); + }); + + it('aligns getWorksheet with addWorksheet case-insensitive uniqueness', () => { + // addWorksheet rejects "testsheet" as a duplicate of "TestSheet"; + // therefore getWorksheet("testsheet") must locate the existing sheet. + const wb = new ExcelJS.Workbook(); + const ws = wb.addWorksheet('TestSheet'); + + expect(() => wb.addWorksheet('testsheet')).to.throw(); + expect(wb.getWorksheet('testsheet')).to.equal(ws); + }); + }); +});