From 43a04cef0789a3979d73416e94e961389fbcf302 Mon Sep 17 00:00:00 2001 From: hsinfu Date: Tue, 29 May 2018 16:30:49 +0800 Subject: [PATCH] sheet add state for hidden or show --- lib/doc/worksheet.js | 14 +++++++++----- lib/stream/xlsx/workbook-writer.js | 1 + lib/stream/xlsx/worksheet-writer.js | 3 +++ lib/xlsx/workbook.xml | 4 ++-- lib/xlsx/xform/book/sheet-xform.js | 6 ++++-- lib/xlsx/xform/book/workbook-xform.js | 1 + 6 files changed, 20 insertions(+), 9 deletions(-) diff --git a/lib/doc/worksheet.js b/lib/doc/worksheet.js index ccc626a52..3b43e3b03 100644 --- a/lib/doc/worksheet.js +++ b/lib/doc/worksheet.js @@ -31,6 +31,9 @@ var Worksheet = module.exports = function(options) { // and a name this.name = options.name || 'Sheet' + this.id; + // add a state + this.state = options.state || 'show'; + // rows allows access organised by row. Sparse array of arrays indexed by row-1, col // Note: _rows is zero based. Must subtract 1 to go from cell.row to index this._rows = []; @@ -46,7 +49,7 @@ var Worksheet = module.exports = function(options) { // record of all row and column pageBreaks this.rowBreaks = []; - + this._workbook = options.workbook; // for tabColor, default row height, outline levels, etc @@ -56,7 +59,7 @@ var Worksheet = module.exports = function(options) { outlineLevelCol: 0, outlineLevelRow: 0 }, options.properties); - + // for all things printing this.pageSetup = Object.assign({}, { margins: {left: 0.7, right: 0.7, top: 0.75, bottom: 0.75, header: 0.3, footer: 0.3 }, @@ -207,7 +210,7 @@ Worksheet.prototype = { } }); } - + // splice column definitions var nExpand = inserts.length - count; var nKeep = start + count; @@ -313,7 +316,7 @@ Worksheet.prototype = { self.addRow(row); }); }, - + spliceRows: function(start, count) { // same problem as row.splice, except worse. var inserts = Array.prototype.slice.call(arguments, 2); @@ -436,7 +439,7 @@ Worksheet.prototype = { delete this._merges[master.address]; } }, - + get hasMerges() { return _.some(this._merges, function() { // TODO: this doesn't look right @@ -559,6 +562,7 @@ Worksheet.prototype = { name: this.name, dataValidations: this.dataValidations.model, properties: this.properties, + state: this.state, pageSetup: this.pageSetup, rowBreaks: this.rowBreaks, views: this.views, diff --git a/lib/stream/xlsx/workbook-writer.js b/lib/stream/xlsx/workbook-writer.js index e0e533e78..3cf9efa53 100644 --- a/lib/stream/xlsx/workbook-writer.js +++ b/lib/stream/xlsx/workbook-writer.js @@ -153,6 +153,7 @@ WorkbookWriter.prototype = { workbook: this, useSharedStrings: useSharedStrings, properties: options.properties, + state: options.state, pageSetup: options.pageSetup, views: options.views, autoFilter: options.autoFilter diff --git a/lib/stream/xlsx/worksheet-writer.js b/lib/stream/xlsx/worksheet-writer.js index fc6349c43..180a8f7d6 100644 --- a/lib/stream/xlsx/worksheet-writer.js +++ b/lib/stream/xlsx/worksheet-writer.js @@ -63,6 +63,9 @@ var WorksheetWriter = module.exports = function(options) { // and a name this.name = options.name || 'Sheet' + this.id; + // add a state + this.state = options.state || 'show'; + // rows are stored here while they need to be worked on. // when they are committed, they will be deleted. this._rows = []; diff --git a/lib/xlsx/workbook.xml b/lib/xlsx/workbook.xml index 1f14c28bd..63ab23cd2 100644 --- a/lib/xlsx/workbook.xml +++ b/lib/xlsx/workbook.xml @@ -8,9 +8,9 @@ - <% worksheets.forEach(function(worksheet) { %> + <% worksheets.forEach(function(worksheet) { %> <% }); %> <%=definedNames.xml%> - \ No newline at end of file + diff --git a/lib/xlsx/xform/book/sheet-xform.js b/lib/xlsx/xform/book/sheet-xform.js index 7200e855f..ae85b3733 100644 --- a/lib/xlsx/xform/book/sheet-xform.js +++ b/lib/xlsx/xform/book/sheet-xform.js @@ -13,20 +13,22 @@ var WorksheetXform = module.exports = function() { }; utils.inherits(WorksheetXform, BaseXform, { - + render: function(xmlStream, model) { xmlStream.leafNode('sheet', { sheetId: model.id, name: model.name, + state: model.state, 'r:id': model.rId }); }, - + parseOpen: function(node) { if (node.name === 'sheet') { this.model = { name: utils.xmlDecode(node.attributes.name), id: parseInt(node.attributes.sheetId, 10), + state: node.attributes.state, rId: node.attributes['r:id'] }; return true; diff --git a/lib/xlsx/xform/book/workbook-xform.js b/lib/xlsx/xform/book/workbook-xform.js index 20bc46a87..9455009dc 100644 --- a/lib/xlsx/xform/book/workbook-xform.js +++ b/lib/xlsx/xform/book/workbook-xform.js @@ -166,6 +166,7 @@ utils.inherits(WorkbookXform, BaseXform, { if (worksheet) { worksheet.name = sheet.name; worksheet.id = sheet.id; + worksheet.state = sheet.state; worksheets[index++] = worksheet; } });