excel-builder-vanilla
Version:
An easy way of building Excel files with javascript
48 lines (41 loc) • 1.54 kB
text/typescript
import { uniqueId } from '../utilities/uniqueId.js';
import type { Drawing } from './Drawing/Drawing.js';
import type { Picture } from './Drawing/Picture.js';
import { RelationshipManager } from './RelationshipManager.js';
import { Util } from './Util.js';
/**
* @module Excel/Drawings
*/
export class Drawings {
drawings: (Drawing | Picture)[] = [];
relations = new RelationshipManager();
id = uniqueId('Drawings');
/**
* Adds a drawing (more likely a subclass of a Drawing) to the 'Drawings' for a particular worksheet.
*
* @param {Drawing} drawing
* @returns {undefined}
*/
addDrawing(drawing: Drawing) {
this.drawings.push(drawing);
}
getCount() {
return this.drawings.length;
}
toXML() {
const doc = Util.createXmlDoc(Util.schemas.spreadsheetDrawing, 'xdr:wsDr');
const drawings = doc.documentElement;
drawings.setAttribute('xmlns:a', Util.schemas.drawing);
drawings.setAttribute('xmlns:r', Util.schemas.relationships);
drawings.setAttribute('xmlns:xdr', Util.schemas.spreadsheetDrawing);
for (let i = 0, l = this.drawings.length; i < l; i++) {
let rId = this.relations.getRelationshipId((this.drawings[i] as Picture).getMediaData());
if (!rId) {
rId = this.relations.addRelation((this.drawings[i] as Picture).getMediaData(), (this.drawings[i] as Picture).getMediaType()); //chart
}
(this.drawings[i] as Picture).setRelationshipId(rId);
drawings.appendChild((this.drawings[i] as Picture).toXML(doc));
}
return doc;
}
}