From 8ca56499cee2deff91b04435982230bd762f9e45 Mon Sep 17 00:00:00 2001 From: Bob Senoff Date: Thu, 7 May 2026 14:45:30 -0500 Subject: [PATCH] Fix #3028: make getWorksheet case-insensitive to match addWorksheet --- lib/doc/workbook.js | 4 +- ...3028-getworksheet-case-insensitive.spec.js | 46 +++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 spec/integration/issues/issue-3028-getworksheet-case-insensitive.spec.js 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); + }); + }); +});