diff --git a/TODO.txt b/TODO.txt
index 613775c01..a451e0993 100644
--- a/TODO.txt
+++ b/TODO.txt
@@ -1,6 +1,8 @@
TODO:
+On the way to the impossible we might find something eminently doable
+
Page Setup
Themes:
diff --git a/lib/stream/xlsx/hyperlink-writer.js b/lib/stream/xlsx/sheet-rels-writer.js
similarity index 60%
rename from lib/stream/xlsx/hyperlink-writer.js
rename to lib/stream/xlsx/sheet-rels-writer.js
index b10e905c5..92658c393 100644
--- a/lib/stream/xlsx/hyperlink-writer.js
+++ b/lib/stream/xlsx/sheet-rels-writer.js
@@ -23,17 +23,30 @@
'use strict';
var utils = require('../../utils/utils');
+var RelType = require('../../xlsx/rel-type');
-var HyperlinkWriter = module.exports = function(options) {
+var HyperlinksProxy = function(sheetRelsWriter) {
+ this.writer = sheetRelsWriter;
+};
+HyperlinksProxy.prototype = {
+ push: function(hyperlink) {
+ this.writer.addHyperlink(hyperlink);
+ }
+};
+
+var SheetRelsWriter = module.exports = function(options) {
// in a workbook, each sheet will have a number
this.id = options.id;
+ // count of all relationships
+ this.count = 0;
+
// keep record of all hyperlinks
this._hyperlinks = [];
this._workbook = options.workbook;
};
-HyperlinkWriter.prototype = {
+SheetRelsWriter.prototype = {
get stream() {
if (!this._stream) {
@@ -50,24 +63,32 @@ HyperlinkWriter.prototype = {
return this._hyperlinks.forEach(fn);
},
- push: function(hyperlink) {
- // if first hyperlink, must open stream and write xml intro
- if (!this._hyperlinks.length) {
- this._writeOpen();
- }
+ get hyperlinksProxy() {
+ return this._hyperlinksProxy ||
+ (this._hyperlinksProxy = new HyperlinksProxy(this));
+ },
+ addHyperlink: function(hyperlink) {
+ // Write to stream
+ var relationship = {
+ Target: hyperlink.target,
+ Type: RelType.Hyperlink,
+ TargetMode: 'External'
+ };
+ var rId = this._writeRelationship(relationship);
// store sheet stuff for later
this._hyperlinks.push({
- address: hyperlink.address,
- rId: hyperlink.rId
+ rId: rId,
+ address: hyperlink.address
});
+ },
- // and write to stream
- this._writeRelationship(hyperlink);
+ addMedia: function(media) {
+ return this._writeRelationship(media);
},
commit: function() {
- if (this._hyperlinks.length) {
+ if (this.count) {
// write xml utro
this._writeClose();
// and close stream
@@ -81,14 +102,32 @@ HyperlinkWriter.prototype = {
'' +
'');
},
- _writeRelationship: function(hyperlink) {
- this.stream.write(
- '');
+ _writeRelationship: function(relationship) {
+ if (!this.count) {
+ this._writeOpen();
+ }
+
+ var rId = 'rId' + ++this.count;
+
+ if (relationship.TargetMode) {
+ this.stream.write(
+ '');
+ } else {
+ this.stream.write(
+ '');
+ }
+
+
+ return rId;
},
_writeClose: function() {
this.stream.write('');
diff --git a/lib/stream/xlsx/workbook-writer.js b/lib/stream/xlsx/workbook-writer.js
index 100ca6b2a..8f6b89a21 100644
--- a/lib/stream/xlsx/workbook-writer.js
+++ b/lib/stream/xlsx/workbook-writer.js
@@ -216,7 +216,7 @@ WorkbookWriter.prototype = {
return new Bluebird(function(resolve) {
var xform = new RelationshipsXform();
var xml = xform.toXml([
- {rId: 'rId1', type: RelType.OfficeDocument, target: 'xl/workbook.xml'}
+ {Id: 'rId1', Type: RelType.OfficeDocument, Target: 'xl/workbook.xml'}
]);
self.zip.append(xml, {name: '/_rels/.rels'});
resolve();
@@ -273,19 +273,19 @@ WorkbookWriter.prototype = {
var self = this;
var count = 1;
var relationships = [
- {rId: 'rId' + (count++), type: RelType.Styles, target: 'styles.xml'},
- {rId: 'rId' + (count++), type: RelType.Theme, target: 'theme/theme1.xml'}
+ {Id: 'rId' + (count++), Type: RelType.Styles, Target: 'styles.xml'},
+ {Id: 'rId' + (count++), Type: RelType.Theme, Target: 'theme/theme1.xml'}
];
if (this.streamedValues.count) {
relationships.push(
- {rId: 'rId' + (count++), type: RelType.SharedStrings, target: 'sharedStrings.xml'}
+ {Id: 'rId' + (count++), Type: RelType.SharedStrings, Target: 'sharedStrings.xml'}
);
}
this._worksheets.forEach(function (worksheet) {
if (worksheet) {
worksheet.rId = 'rId' + (count++);
relationships.push(
- {rId: worksheet.rId, type: RelType.Worksheet, target: 'worksheets/sheet' + worksheet.id + '.xml'}
+ {Id: worksheet.rId, Type: RelType.Worksheet, Target: 'worksheets/sheet' + worksheet.id + '.xml'}
);
}
});
diff --git a/lib/stream/xlsx/worksheet-writer.js b/lib/stream/xlsx/worksheet-writer.js
index 911487182..8f04c8748 100644
--- a/lib/stream/xlsx/worksheet-writer.js
+++ b/lib/stream/xlsx/worksheet-writer.js
@@ -26,6 +26,8 @@ var fs = require('fs');
var _ = require('lodash');
var utils = require('../../utils/utils');
+var RelType = require('../../xlsx/rel-type');
+
var colCache = require('../../utils/col-cache');
var Dimensions = require('../../doc/range');
@@ -34,7 +36,7 @@ var StringBuf = require('../../utils/string-buf');
var Row = require('../../doc/row');
var Column = require('../../doc/column');
-var HyperlinkWriter = require('./hyperlink-writer');
+var SheetRelsWriter = require('./sheet-rels-writer');
var DataValidations = require('../../doc/data-validations');
var xml = new StringBuf();
@@ -51,6 +53,7 @@ var HyperlinkXform = require('../../xlsx/xform/sheet/hyperlink-xform');
var SheetViewXform = require('../../xlsx/xform/sheet/sheet-view-xform');
var PageMarginsXform = require('../../xlsx/xform/sheet/page-margins-xform');
var PageSetupXform = require('../../xlsx/xform/sheet/page-setup-xform');
+var PictureXform = require('../../xlsx/xform/sheet/picture-xform');
// since prepare and render is functional, we can use singletons
var xform = {
@@ -62,7 +65,8 @@ var xform = {
hyperlinks: new ListXform({tag: 'hyperlinks', length: false, childXform: new HyperlinkXform()}),
sheetViews: new ListXform({tag: 'sheetViews', length: false, childXform: new SheetViewXform()}),
pageMargins: new PageMarginsXform(),
- pageSeteup: new PageSetupXform()
+ pageSeteup: new PageSetupXform(),
+ picture: new PictureXform()
};
@@ -90,7 +94,7 @@ var WorksheetWriter = module.exports = function(options) {
this._merges.add = function(){}; // ignore cell instruction
// keep record of all hyperlinks
- this._hyperlinkWriter = new HyperlinkWriter(options);
+ this._sheetRelsWriter = new SheetRelsWriter(options);
// keep a record of dimensions
this._dimensions = new Dimensions();
@@ -147,6 +151,18 @@ var WorksheetWriter = module.exports = function(options) {
// start writing to stream now
this._writeOpenWorksheet();
+ // background
+ if (options.background && options.background.type === 'image') {
+ var imageName = this._workbook.addMedia(options.background);
+ var pictureId = this._sheetRelsWriter.addMedia({
+ Target: '../media/' + imageName,
+ Type: RelType.Image
+ });
+ this._background = {
+ rId: pictureId
+ };
+ }
+
this.startedData = false;
};
@@ -197,13 +213,14 @@ WorksheetWriter.prototype = {
this._writeDataValidations();
this._writePageMargins();
this._writePageSetup();
+ this._writeBackground();
this._writeCloseWorksheet();
// signal end of stream to workbook
this.stream.end();
// also commit the hyperlinks if any
- this._hyperlinkWriter.commit();
+ this._sheetRelsWriter.commit();
this.committed = true;
},
@@ -452,7 +469,7 @@ WorksheetWriter.prototype = {
var options = {
styles: this._workbook.styles,
sharedStrings: self.useSharedStrings ? self._workbook.sharedStrings : undefined,
- hyperlinks: this._hyperlinkWriter,
+ hyperlinks: this._sheetRelsWriter.hyperlinksProxy,
merges: this._merges
};
xform.row.prepare(model, options);
@@ -474,11 +491,10 @@ WorksheetWriter.prototype = {
xml.addText('');
this.stream.write(xml);
- //stringBufStack.push(xml);
}
},
_writeHyperlinks: function() {
- this.stream.write(xform.hyperlinks.toXml(this._hyperlinkWriter._hyperlinks));
+ this.stream.write(xform.hyperlinks.toXml(this._sheetRelsWriter._hyperlinks));
},
_writeDataValidations: function() {
this.stream.write(xform.dataValidations.toXml(this.dataValidations.model));
@@ -489,6 +505,11 @@ WorksheetWriter.prototype = {
_writePageSetup: function() {
this.stream.write(xform.pageSeteup.toXml(this.pageSetup));
},
+ _writeBackground: function() {
+ if (this._background) {
+ this.stream.write(xform.picture.toXml(this._background));
+ }
+ },
_writeDimensions: function() {
this._write('');
},
diff --git a/lib/xlsx/xform/core/content-types-xform.js b/lib/xlsx/xform/core/content-types-xform.js
index 34abd4be4..bc82bf3ed 100644
--- a/lib/xlsx/xform/core/content-types-xform.js
+++ b/lib/xlsx/xform/core/content-types-xform.js
@@ -57,7 +57,7 @@ utils.inherits(ContentTypesXform, BaseXform, {
xmlStream.openNode('Types', ContentTypesXform.TYPES_PROPERTY_ATTRIBUTES);
var mediaHash = {};
- model.media.forEach(function(medium) {
+ (model.media || []).forEach(function(medium) {
if (medium.type === 'image') {
var imageType = medium.image.type;
if (!mediaHash[imageType]) {
diff --git a/lib/xlsx/xform/sheet/worksheet-xform.js b/lib/xlsx/xform/sheet/worksheet-xform.js
index 9d8c9918b..de5eab57f 100644
--- a/lib/xlsx/xform/sheet/worksheet-xform.js
+++ b/lib/xlsx/xform/sheet/worksheet-xform.js
@@ -95,7 +95,7 @@ utils.inherits(WorkSheetXform, BaseXform, {
Id: rId,
Type: RelType.Hyperlink,
Target: hyperlink.target,
- TargetType: 'External'
+ TargetMode: 'External'
});
});
@@ -223,7 +223,7 @@ utils.inherits(WorkSheetXform, BaseXform, {
return h;
}, {});
options.hyperlinkMap = (model.hyperlinks || []).reduce(function(h, hyperlink) {
- h[hyperlink.address] = rels[hyperlink.Id];
+ h[hyperlink.address] = rels[hyperlink.rId].Target;
return h;
}, {});
diff --git a/spec/integration/workbook-styles.spec.js b/spec/integration/workbook-styles.spec.js
index b8cc9761a..893e7b711 100644
--- a/spec/integration/workbook-styles.spec.js
+++ b/spec/integration/workbook-styles.spec.js
@@ -119,40 +119,40 @@ describe('Workbook', function() {
var ws = wb.addWorksheet('basket');
ws.getCell('A1').value = 5;
- ws.getCell('A1').numFmt = testutils.styles.numFmts.numFmt1;
- ws.getCell('A1').font = testutils.styles.fonts.arialBlackUI14;
+ ws.getCell('A1').numFmt = testUtils.styles.numFmts.numFmt1;
+ ws.getCell('A1').font = testUtils.styles.fonts.arialBlackUI14;
ws.getCell('C1').value = 'Hello, World!';
- ws.getCell('C1').alignment = testutils.styles.namedAlignments.bottomRight;
- ws.getCell('C1').border = testutils.styles.borders.doubleRed;
- ws.getCell('C1').fill = testutils.styles.fills.redDarkVertical;
-
- ws.getRow(1).numFmt = testutils.styles.numFmts.numFmt2;
- ws.getRow(1).font = testutils.styles.fonts.comicSansUdB16;
- ws.getRow(1).alignment = testutils.styles.namedAlignments.middleCentre;
- ws.getRow(1).border = testutils.styles.borders.thin;
- ws.getRow(1).fill = testutils.styles.fills.redGreenDarkTrellis;
-
- expect(ws.getCell('A1').numFmt).to.equal(testutils.styles.numFmts.numFmt2);
- expect(ws.getCell('A1').font).to.deep.equal(testutils.styles.fonts.comicSansUdB16);
- expect(ws.getCell('A1').alignment).to.deep.equal(testutils.styles.namedAlignments.middleCentre);
- expect(ws.getCell('A1').border).to.deep.equal(testutils.styles.borders.thin);
- expect(ws.getCell('A1').fill).to.deep.equal(testutils.styles.fills.redGreenDarkTrellis);
+ ws.getCell('C1').alignment = testUtils.styles.namedAlignments.bottomRight;
+ ws.getCell('C1').border = testUtils.styles.borders.doubleRed;
+ ws.getCell('C1').fill = testUtils.styles.fills.redDarkVertical;
+
+ ws.getRow(1).numFmt = testUtils.styles.numFmts.numFmt2;
+ ws.getRow(1).font = testUtils.styles.fonts.comicSansUdB16;
+ ws.getRow(1).alignment = testUtils.styles.namedAlignments.middleCentre;
+ ws.getRow(1).border = testUtils.styles.borders.thin;
+ ws.getRow(1).fill = testUtils.styles.fills.redGreenDarkTrellis;
+
+ expect(ws.getCell('A1').numFmt).to.equal(testUtils.styles.numFmts.numFmt2);
+ expect(ws.getCell('A1').font).to.deep.equal(testUtils.styles.fonts.comicSansUdB16);
+ expect(ws.getCell('A1').alignment).to.deep.equal(testUtils.styles.namedAlignments.middleCentre);
+ expect(ws.getCell('A1').border).to.deep.equal(testUtils.styles.borders.thin);
+ expect(ws.getCell('A1').fill).to.deep.equal(testUtils.styles.fills.redGreenDarkTrellis);
expect(ws.findCell('B1')).to.be.undefined;
- expect(ws.getCell('C1').numFmt).to.equal(testutils.styles.numFmts.numFmt2);
- expect(ws.getCell('C1').font).to.deep.equal(testutils.styles.fonts.comicSansUdB16);
- expect(ws.getCell('C1').alignment).to.deep.equal(testutils.styles.namedAlignments.middleCentre);
- expect(ws.getCell('C1').border).to.deep.equal(testutils.styles.borders.thin);
- expect(ws.getCell('C1').fill).to.deep.equal(testutils.styles.fills.redGreenDarkTrellis);
+ expect(ws.getCell('C1').numFmt).to.equal(testUtils.styles.numFmts.numFmt2);
+ expect(ws.getCell('C1').font).to.deep.equal(testUtils.styles.fonts.comicSansUdB16);
+ expect(ws.getCell('C1').alignment).to.deep.equal(testUtils.styles.namedAlignments.middleCentre);
+ expect(ws.getCell('C1').border).to.deep.equal(testUtils.styles.borders.thin);
+ expect(ws.getCell('C1').fill).to.deep.equal(testUtils.styles.fills.redGreenDarkTrellis);
// when we 'get' the previously null cell, it should inherit the row styles
- expect(ws.getCell('B1').numFmt).to.equal(testutils.styles.numFmts.numFmt2);
- expect(ws.getCell('B1').font).to.deep.equal(testutils.styles.fonts.comicSansUdB16);
- expect(ws.getCell('B1').alignment).to.deep.equal(testutils.styles.namedAlignments.middleCentre);
- expect(ws.getCell('B1').border).to.deep.equal(testutils.styles.borders.thin);
- expect(ws.getCell('B1').fill).to.deep.equal(testutils.styles.fills.redGreenDarkTrellis);
+ expect(ws.getCell('B1').numFmt).to.equal(testUtils.styles.numFmts.numFmt2);
+ expect(ws.getCell('B1').font).to.deep.equal(testUtils.styles.fonts.comicSansUdB16);
+ expect(ws.getCell('B1').alignment).to.deep.equal(testUtils.styles.namedAlignments.middleCentre);
+ expect(ws.getCell('B1').border).to.deep.equal(testUtils.styles.borders.thin);
+ expect(ws.getCell('B1').fill).to.deep.equal(testUtils.styles.fills.redGreenDarkTrellis);
});
@@ -161,42 +161,41 @@ describe('Workbook', function() {
var ws = wb.addWorksheet('basket');
ws.getCell('A1').value = 5;
- ws.getCell('A1').numFmt = testutils.styles.numFmts.numFmt1;
- ws.getCell('A1').font = testutils.styles.fonts.arialBlackUI14;
+ ws.getCell('A1').numFmt = testUtils.styles.numFmts.numFmt1;
+ ws.getCell('A1').font = testUtils.styles.fonts.arialBlackUI14;
ws.getCell('A3').value = 'Hello, World!';
- ws.getCell('A3').alignment = testutils.styles.namedAlignments.bottomRight;
- ws.getCell('A3').border = testutils.styles.borders.doubleRed;
- ws.getCell('A3').fill = testutils.styles.fills.redDarkVertical;
-
- ws.getColumn('A').numFmt = testutils.styles.numFmts.numFmt2;
- ws.getColumn('A').font = testutils.styles.fonts.comicSansUdB16;
- ws.getColumn('A').alignment = testutils.styles.namedAlignments.middleCentre;
- ws.getColumn('A').border = testutils.styles.borders.thin;
- ws.getColumn('A').fill = testutils.styles.fills.redGreenDarkTrellis;
-
- expect(ws.getCell('A1').numFmt).to.equal(testutils.styles.numFmts.numFmt2);
- expect(ws.getCell('A1').font).to.deep.equal(testutils.styles.fonts.comicSansUdB16);
- expect(ws.getCell('A1').alignment).to.deep.equal(testutils.styles.namedAlignments.middleCentre);
- expect(ws.getCell('A1').border).to.deep.equal(testutils.styles.borders.thin);
- expect(ws.getCell('A1').fill).to.deep.equal(testutils.styles.fills.redGreenDarkTrellis);
+ ws.getCell('A3').alignment = testUtils.styles.namedAlignments.bottomRight;
+ ws.getCell('A3').border = testUtils.styles.borders.doubleRed;
+ ws.getCell('A3').fill = testUtils.styles.fills.redDarkVertical;
+
+ ws.getColumn('A').numFmt = testUtils.styles.numFmts.numFmt2;
+ ws.getColumn('A').font = testUtils.styles.fonts.comicSansUdB16;
+ ws.getColumn('A').alignment = testUtils.styles.namedAlignments.middleCentre;
+ ws.getColumn('A').border = testUtils.styles.borders.thin;
+ ws.getColumn('A').fill = testUtils.styles.fills.redGreenDarkTrellis;
+
+ expect(ws.getCell('A1').numFmt).to.equal(testUtils.styles.numFmts.numFmt2);
+ expect(ws.getCell('A1').font).to.deep.equal(testUtils.styles.fonts.comicSansUdB16);
+ expect(ws.getCell('A1').alignment).to.deep.equal(testUtils.styles.namedAlignments.middleCentre);
+ expect(ws.getCell('A1').border).to.deep.equal(testUtils.styles.borders.thin);
+ expect(ws.getCell('A1').fill).to.deep.equal(testUtils.styles.fills.redGreenDarkTrellis);
expect(ws.findRow(2)).to.be.undefined;
- expect(ws.getCell('A3').numFmt).to.equal(testutils.styles.numFmts.numFmt2);
- expect(ws.getCell('A3').font).to.deep.equal(testutils.styles.fonts.comicSansUdB16);
- expect(ws.getCell('A3').alignment).to.deep.equal(testutils.styles.namedAlignments.middleCentre);
- expect(ws.getCell('A3').border).to.deep.equal(testutils.styles.borders.thin);
- expect(ws.getCell('A3').fill).to.deep.equal(testutils.styles.fills.redGreenDarkTrellis);
+ expect(ws.getCell('A3').numFmt).to.equal(testUtils.styles.numFmts.numFmt2);
+ expect(ws.getCell('A3').font).to.deep.equal(testUtils.styles.fonts.comicSansUdB16);
+ expect(ws.getCell('A3').alignment).to.deep.equal(testUtils.styles.namedAlignments.middleCentre);
+ expect(ws.getCell('A3').border).to.deep.equal(testUtils.styles.borders.thin);
+ expect(ws.getCell('A3').fill).to.deep.equal(testUtils.styles.fills.redGreenDarkTrellis);
// when we 'get' the previously null cell, it should inherit the column styles
- expect(ws.getCell('A2').numFmt).to.equal(testutils.styles.numFmts.numFmt2);
- expect(ws.getCell('A2').font).to.deep.equal(testutils.styles.fonts.comicSansUdB16);
- expect(ws.getCell('A2').alignment).to.deep.equal(testutils.styles.namedAlignments.middleCentre);
- expect(ws.getCell('A2').border).to.deep.equal(testutils.styles.borders.thin);
- expect(ws.getCell('A2').fill).to.deep.equal(testutils.styles.fills.redGreenDarkTrellis);
+ expect(ws.getCell('A2').numFmt).to.equal(testUtils.styles.numFmts.numFmt2);
+ expect(ws.getCell('A2').font).to.deep.equal(testUtils.styles.fonts.comicSansUdB16);
+ expect(ws.getCell('A2').alignment).to.deep.equal(testUtils.styles.namedAlignments.middleCentre);
+ expect(ws.getCell('A2').border).to.deep.equal(testUtils.styles.borders.thin);
+ expect(ws.getCell('A2').fill).to.deep.equal(testUtils.styles.fills.redGreenDarkTrellis);
});
-
});
});
diff --git a/spec/integration/workbook-xlsx-writer.spec.js b/spec/integration/workbook-xlsx-writer.spec.js
index 6ec649d8d..508104a52 100644
--- a/spec/integration/workbook-xlsx-writer.spec.js
+++ b/spec/integration/workbook-xlsx-writer.spec.js
@@ -217,5 +217,44 @@ describe('WorkbookWriter', function() {
testUtils.checkTestBook(wb2, 'xlsx', ['dataValidations']);
});
});
+
+ });
+
+ describe('Images', function() {
+ it('stores background image', function() {
+ var wb = new Excel.stream.xlsx.WorkbookWriter({filename: TEST_FILE_NAME, useSharedStrings: true});
+ var ws = wb.addWorksheet('blort');
+ var ws2;
+ ws.getCell('A1').value = 'Hello, World!';
+ ws.background = {
+ type: 'image',
+ image: {
+ filename: __dirname + '/data/image.png',
+ type: 'png'
+ }
+ };
+ return wb.xlsx.writeFile(TEST_XLSX_FILE_NAME)
+ .then(function() {
+ var wb2 = new Excel.Workbook();
+ return wb2.xlsx.readFile(TEST_XLSX_FILE_NAME);
+ })
+ .then(function(wb2) {
+ ws2 = wb2.getWorksheet('blort');
+ expect(ws2).to.not.be.undefined;
+
+ return fsReadFileAsync(__dirname + '/data/image.png');
+ })
+ .then(function(data) {
+ expect(ws2.background.type).to.equal('image');
+ expect(ws2.background.image.type).to.equal('png');
+ expect(Buffer.compare(data, ws2.background.image.buffer)).to.equal(0);
+ })
+ });
+ it('stores embedded image', function() {
+ expect(true).to.equal(false);
+ });
+ it('stores images and hyperlinks', function() {
+ expect(true).to.equal(false);
+ });
});
});
diff --git a/spec/integration/workbook.spec.js b/spec/integration/workbook.spec.js
index b04e4d5fb..6052fa952 100644
--- a/spec/integration/workbook.spec.js
+++ b/spec/integration/workbook.spec.js
@@ -27,6 +27,20 @@ describe('Workbook', function() {
describe('Serialise', function() {
+ it('xlsx file', function() {
+
+ var wb = testUtils.createTestBook(new Excel.Workbook(), 'xlsx');
+
+ return wb.xlsx.writeFile(TEST_XLSX_FILE_NAME)
+ .then(function() {
+ var wb2 = new Excel.Workbook();
+ return wb2.xlsx.readFile(TEST_XLSX_FILE_NAME);
+ })
+ .then(function(wb2) {
+ testUtils.checkTestBook(wb2, 'xlsx');
+ });
+ });
+
it('sheets with correct names', function() {
var wb = new Excel.Workbook();
var ws1 = wb.addWorksheet('Hello, World!');
@@ -128,20 +142,6 @@ describe('Workbook', function() {
});
});
- it('xlsx file', function() {
-
- var wb = testUtils.createTestBook(new Excel.Workbook(), 'xlsx');
-
- return wb.xlsx.writeFile(TEST_XLSX_FILE_NAME)
- .then(function() {
- var wb2 = new Excel.Workbook();
- return wb2.xlsx.readFile(TEST_XLSX_FILE_NAME);
- })
- .then(function(wb2) {
- testUtils.checkTestBook(wb2, 'xlsx');
- });
- });
-
it('dataValidations', function() {
var wb = testUtils.createTestBook(new Excel.Workbook(), 'xlsx', ['dataValidations']);
@@ -469,7 +469,7 @@ describe('Workbook', function() {
});
describe('Images', function() {
- it.only('stores background image', function() {
+ it('stores background image', function() {
var wb = new Excel.Workbook();
var ws = wb.addWorksheet('blort');
var ws2;
diff --git a/spec/unit/xlsx/xform/sheet/cell-xform.spec.js b/spec/unit/xlsx/xform/sheet/cell-xform.spec.js
index dc5ef221d..ad6778a4e 100644
--- a/spec/unit/xlsx/xform/sheet/cell-xform.spec.js
+++ b/spec/unit/xlsx/xform/sheet/cell-xform.spec.js
@@ -24,14 +24,7 @@ var fakeStyles = {
};
var fakeHyperlinkMap = {
- getHyperlink: function(address) {
- switch(address) {
- case 'H1':
- return 'http://www.foo.com';
- default:
- return;
- }
- }
+ H1: 'http://www.foo.com'
};
var expectations = [
diff --git a/spec/unit/xlsx/xform/sheet/data/sheet.1.1.json b/spec/unit/xlsx/xform/sheet/data/sheet.1.1.json
index 110af7001..52641662a 100644
--- a/spec/unit/xlsx/xform/sheet/data/sheet.1.1.json
+++ b/spec/unit/xlsx/xform/sheet/data/sheet.1.1.json
@@ -64,9 +64,15 @@
"hyperlinks": [
{
"address": "B6", "rId": "rId1",
- "target": "https://www.npmjs.com/package/exceljs",
- "targetMode": "External",
- "type": "http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink"
+ "target": "https://www.npmjs.com/package/exceljs"
+ }
+ ],
+ "rels": [
+ {
+ "Id": "rId1",
+ "Target": "https://www.npmjs.com/package/exceljs",
+ "TargetType": "External",
+ "Type": "http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink"
}
]
}
diff --git a/spec/unit/xlsx/xform/sheet/data/sheet.2.1.json b/spec/unit/xlsx/xform/sheet/data/sheet.2.1.json
index 75fc890ab..252ca3090 100644
--- a/spec/unit/xlsx/xform/sheet/data/sheet.2.1.json
+++ b/spec/unit/xlsx/xform/sheet/data/sheet.2.1.json
@@ -41,6 +41,7 @@
],
"mergeCells": [],
"hyperlinks": [],
+ "rels": [],
"dataValidations": {
"B1": { "type": "list", "allowBlank": true, "showInputMessage": true, "showErrorMessage": true, "formulae": ["$C$1:$C$3"]},
"B5": { "type": "list", "allowBlank": true, "showInputMessage": true, "showErrorMessage": true, "formulae": ["\"value 1, value 2, value 3\""]},
diff --git a/spec/unit/xlsx/xform/sheet/data/sheet.3.1.json b/spec/unit/xlsx/xform/sheet/data/sheet.3.1.json
index 1f0fb8cc9..40b1bec97 100644
--- a/spec/unit/xlsx/xform/sheet/data/sheet.3.1.json
+++ b/spec/unit/xlsx/xform/sheet/data/sheet.3.1.json
@@ -4,5 +4,6 @@
"views": [],
"rows": [],
"mergeCells": [],
- "hyperlinks": []
+ "hyperlinks": [],
+ "rels": []
}
diff --git a/spec/unit/xlsx/xform/sheet/worksheet-xform.spec.js b/spec/unit/xlsx/xform/sheet/worksheet-xform.spec.js
index 948139ee9..de2289608 100644
--- a/spec/unit/xlsx/xform/sheet/worksheet-xform.spec.js
+++ b/spec/unit/xlsx/xform/sheet/worksheet-xform.spec.js
@@ -32,14 +32,7 @@ var fakeStyles = {
};
var fakeHyperlinkMap = {
- getHyperlink: function(address) {
- switch(address) {
- case 'B6':
- return 'https://www.npmjs.com/package/exceljs';
- default:
- return;
- }
- }
+ B6: 'https://www.npmjs.com/package/exceljs'
};
function fixDate(model) {