From fd0bf4cac554d32a6e2cc389dbc97298dfd54d15 Mon Sep 17 00:00:00 2001 From: Andreas Lind Date: Tue, 19 Dec 2017 14:12:10 +0100 Subject: [PATCH] Don't break when loading an Excel file containing a chartsheet Test case found here: http://www.excel-easy.com/examples/excel-files/chart-sheet.xlsx --- lib/xlsx/xform/book/workbook-xform.js | 13 ++++++++++--- spec/integration/data/chart-sheet.xlsx | Bin 0 -> 14362 bytes spec/integration/worksheet.spec.js | 8 ++++++++ 3 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 spec/integration/data/chart-sheet.xlsx diff --git a/lib/xlsx/xform/book/workbook-xform.js b/lib/xlsx/xform/book/workbook-xform.js index f8ebce597..20bc46a87 100644 --- a/lib/xlsx/xform/book/workbook-xform.js +++ b/lib/xlsx/xform/book/workbook-xform.js @@ -158,9 +158,16 @@ utils.inherits(WorkbookXform, BaseXform, { return; } worksheet = model.worksheetHash['xl/' + rel.Target]; - worksheet.name = sheet.name; - worksheet.id = sheet.id; - worksheets[index++] = worksheet; + // If there are "chartsheets" in the file, rel.Target will + // come out as chartsheets/sheet1.xml or similar here, and + // that won't be in model.worksheetHash. + // As we don't have the infrastructure to support chartsheets, + // we will ignore them for now: + if (worksheet) { + worksheet.name = sheet.name; + worksheet.id = sheet.id; + worksheets[index++] = worksheet; + } }); // reconcile print areas diff --git a/spec/integration/data/chart-sheet.xlsx b/spec/integration/data/chart-sheet.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..c8d7b3c0130019ce492584fd759b1e3ddee4847f GIT binary patch literal 14362 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