diff --git a/README.md b/README.md
index ee1b92b60..ceead5e59 100644
--- a/README.md
+++ b/README.md
@@ -1099,6 +1099,15 @@ worksheet.properties.outlineLevelCol = 2;
expect(worksheet.getColumn(3).collapsed).to.be.false;
```
+The outline properties can be set on the worksheet
+
+```javascript
+worksheet.properties.outlineProperties = {
+ summaryBelow: false,
+ summaryRight: false,
+};
+```
+
## Images
Adding images to a worksheet is a two-step process.
diff --git a/lib/stream/xlsx/worksheet-writer.js b/lib/stream/xlsx/worksheet-writer.js
index 24a7d6c97..fc6349c43 100644
--- a/lib/stream/xlsx/worksheet-writer.js
+++ b/lib/stream/xlsx/worksheet-writer.js
@@ -418,6 +418,7 @@ WorksheetWriter.prototype = {
},
_writeSheetProperties: function(xmlBuf, properties, pageSetup) {
var sheetPropertiesModel = {
+ outlineProperties: properties && properties.outlineProperties,
tabColor: properties && properties.tabColor,
pageSetup: pageSetup && pageSetup.fitToPage ? {
fitToPage: pageSetup.fitToPage
diff --git a/lib/xlsx/xform/sheet/outline-properties-xform.js b/lib/xlsx/xform/sheet/outline-properties-xform.js
new file mode 100644
index 000000000..f2c995031
--- /dev/null
+++ b/lib/xlsx/xform/sheet/outline-properties-xform.js
@@ -0,0 +1,46 @@
+/**
+ * Copyright (c) 2015 Guyon Roche
+ * LICENCE: MIT - please refer to LICENCE file included with this module
+ * or https://github.com/guyonroche/exceljs/blob/master/LICENSE
+ */
+
+'use strict';
+
+var utils = require('../../../utils/utils');
+var BaseXform = require('../base-xform');
+
+var OutlinePropertiesXform = module.exports = function() {};
+
+var isDefined = (attr) => typeof attr !== 'undefined';
+
+utils.inherits(OutlinePropertiesXform, BaseXform, {
+
+ get tag() { return 'outlinePr'; },
+
+ render: function(xmlStream, model) {
+ if (model && (isDefined(model.summaryBelow) || isDefined(model.summaryRight))) {
+ xmlStream.leafNode(this.tag, {
+ summaryBelow: isDefined(model.summaryBelow) ? Number(model.summaryBelow) : undefined,
+ summaryRight: isDefined(model.summaryRight) ? Number(model.summaryRight) : undefined,
+ });
+ return true;
+ }
+ return false;
+ },
+
+ parseOpen: function(node) {
+ if (node.name === this.tag) {
+ this.model = {
+ summaryBelow: isDefined(node.attributes.summaryBelow) ? Boolean(Number(node.attributes.summaryBelow)) : undefined,
+ summaryRight: isDefined(node.attributes.summaryRight) ? Boolean(Number(node.attributes.summaryRight)) : undefined,
+ };
+ return true;
+ }
+ return false;
+ },
+ parseText: function() {
+ },
+ parseClose: function() {
+ return false;
+ }
+});
diff --git a/lib/xlsx/xform/sheet/sheet-properties-xform.js b/lib/xlsx/xform/sheet/sheet-properties-xform.js
index 09a47a414..62363d929 100644
--- a/lib/xlsx/xform/sheet/sheet-properties-xform.js
+++ b/lib/xlsx/xform/sheet/sheet-properties-xform.js
@@ -10,11 +10,13 @@ var utils = require('../../../utils/utils');
var BaseXform = require('../base-xform');
var ColorXform = require('../style/color-xform');
var PageSetupPropertiesXform = require('./page-setup-properties-xform');
+var OutlinePropertiesXform = require('./outline-properties-xform');
var SheetPropertiesXform = module.exports = function() {
this.map = {
tabColor: new ColorXform('tabColor'),
- pageSetUpPr: new PageSetupPropertiesXform()
+ pageSetUpPr: new PageSetupPropertiesXform(),
+ outlinePr: new OutlinePropertiesXform(),
};
};
@@ -30,6 +32,7 @@ utils.inherits(SheetPropertiesXform, BaseXform, {
var inner = false;
inner = this.map.tabColor.render(xmlStream, model.tabColor) || inner;
inner = this.map.pageSetUpPr.render(xmlStream, model.pageSetup) || inner;
+ inner = this.map.outlinePr.render(xmlStream, model.outlineProperties) || inner;
if (inner) {
xmlStream.closeNode();
@@ -39,7 +42,7 @@ utils.inherits(SheetPropertiesXform, BaseXform, {
}
}
},
-
+
parseOpen: function(node) {
if (this.parser) {
this.parser.parseOpen(node);
@@ -70,7 +73,7 @@ utils.inherits(SheetPropertiesXform, BaseXform, {
}
return true;
}
- if (this.map.tabColor.model || this.map.pageSetUpPr.model) {
+ if (this.map.tabColor.model || this.map.pageSetUpPr.model || this.map.outlinePr.model) {
this.model = {};
if (this.map.tabColor.model) {
this.model.tabColor = this.map.tabColor.model;
@@ -78,6 +81,9 @@ utils.inherits(SheetPropertiesXform, BaseXform, {
if (this.map.pageSetUpPr.model) {
this.model.pageSetup = this.map.pageSetUpPr.model;
}
+ if (this.map.outlinePr.model) {
+ this.model.outlineProperties = this.map.outlinePr.model;
+ }
} else {
this.model = null;
}
diff --git a/lib/xlsx/xform/sheet/worksheet-xform.js b/lib/xlsx/xform/sheet/worksheet-xform.js
index dcfed7376..a25bc2605 100644
--- a/lib/xlsx/xform/sheet/worksheet-xform.js
+++ b/lib/xlsx/xform/sheet/worksheet-xform.js
@@ -153,6 +153,7 @@ utils.inherits(WorkSheetXform, BaseXform, {
outlineLevelRow: model.properties.outlineLevelRow
} : undefined;
var sheetPropertiesModel = {
+ outlineProperties: model.properties && model.properties.outlineProperties,
tabColor: model.properties && model.properties.tabColor,
pageSetup: model.pageSetup && model.pageSetup.fitToPage ? {
fitToPage: model.pageSetup.fitToPage
@@ -183,7 +184,7 @@ utils.inherits(WorkSheetXform, BaseXform, {
this.map.drawing.render(xmlStream, model.drawing);
this.map.picture.render(xmlStream, model.background); // Note: must be after drawing
this.map.rowBreaks.render(xmlStream, model.rowBreaks);
-
+
xmlStream.closeNode();
},
@@ -224,6 +225,9 @@ utils.inherits(WorkSheetXform, BaseXform, {
if (this.map.sheetPr.model && this.map.sheetPr.model.tabColor) {
properties.tabColor = this.map.sheetPr.model.tabColor;
}
+ if (this.map.sheetPr.model && this.map.sheetPr.model.outlineProperties) {
+ properties.outlineProperties = this.map.sheetPr.model.outlinePropertiesx;
+ }
var sheetProperties = {
fitToPage: (this.map.sheetPr.model && this.map.sheetPr.model.pageSetup && this.map.sheetPr.model.pageSetup.fitToPage) || false,
margins: this.map.pageMargins.model
diff --git a/spec/unit/xlsx/xform/sheet/outline-properties-xform.spec.js b/spec/unit/xlsx/xform/sheet/outline-properties-xform.spec.js
new file mode 100644
index 000000000..351942187
--- /dev/null
+++ b/spec/unit/xlsx/xform/sheet/outline-properties-xform.spec.js
@@ -0,0 +1,43 @@
+'use strict';
+
+var OutlinePropertiesXform = require('../../../../../lib/xlsx/xform/sheet/outline-properties-xform');
+var testXformHelper = require('./../test-xform-helper');
+
+var expectations = [
+ {
+ title: 'empty',
+ create: function() { return new OutlinePropertiesXform(); },
+ preparedModel: {},
+ xml: '',
+ parsedModel: {},
+ tests: ['render', 'renderIn']
+ },
+ {
+ title: 'summaryBelow',
+ create: function() { return new OutlinePropertiesXform(); },
+ preparedModel: { summaryBelow: false },
+ xml: '
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: