UNPKG

officegen-complex-table

Version:

Office Open XML Generator using Node.js streams. Supporting Microsoft Office 2007 and later Word (docx), PowerPoint (pptx,ppsx) and Excel (xlsx). This module is for all frameworks and environments. No need for any commandline tool - this module is doing e

154 lines (140 loc) 3.88 kB
var EMU = 914400; // OfficeXML measures in English Metric Units module.exports = { // assume passed in an array of row objects getTable: function(rows, options) { var options = options || {}; if (options.columnWidth === undefined) { options.columnWidth = 8 / (rows[0].length) * EMU } var self = this; return self._getBase( rows.map(function(row) { return self._getRow( row.map(function(cell) { return self._getCell(cell, options); }), options ); }), self._getColSpecs(rows, options), options ) }, "_getBase": function (rowSpecs, colSpecs, options) { var self = this; return { "p:graphicFrame": { "p:nvGraphicFramePr": { "p:cNvPr": { "@id": "6", "@name": "Table 5" }, "p:cNvGraphicFramePr": { "a:graphicFrameLocks": { "@noGrp": "1" } }, "p:nvPr": { "p:extLst": { "p:ext": { "@uri": "{D42A27DB-BD31-4B8C-83A1-F6EECF244321}", "p14:modId": { "@xmlns:p14": "http://schemas.microsoft.com/office/powerpoint/2010/main", "@val": "1579011935" } } } } }, "p:xfrm": { "a:off": { "@x": options.x || "1524000", "@y": options.y || "1397000" }, "a:ext": { "@cx": options.cx || "6096000", "@cy": options.cy || "1483360" } }, "a:graphic": { "a:graphicData": { "@uri": "http://schemas.openxmlformats.org/drawingml/2006/table", "a:tbl": { "a:tblPr": { "@firstRow": "1", "@bandRow": "1", "a:tableStyleId": "{3C2FFA5D-87B4-456A-9821-1D502468CF0F}" }, "a:tblGrid": { "#list": colSpecs }, "#list": [rowSpecs] // replace this with an array of table row objects } } } } } }, _getColSpecs: function(rows, options) { var self = this; return rows[0].map(function(val,idx) { return self._tblGrid(idx, options); }) }, _tblGrid: function(idx, options) { return { "a:gridCol": { "@w": (options.columnWidths ? options.columnWidths[idx] : options.columnWidth||"0" ) //|| "2048000" } }; }, _getRow: function (cells, options) { return { "a:tr": { "@h": options.rowHeight ||"0", //|| "370840", "#list": [cells] // populate this with an array of table cell objects } } }, _getCell: function (val, options) { var font_size = options.font_size || 14; var font_face = options.font_face || "Times New Roman"; return { "a:tc": { "a:txBody": { "a:bodyPr": {}, "a:lstStyle": {}, "a:p": { "a:r": { "a:rPr": { "@lang": "en-US", "@sz": ""+font_size*100, "@dirty": "0", "@smtClean": "0", "a:latin": { "@typeface": font_face }, "a:cs": { "@typeface": font_face } }, "a:t": val // this is the cell value }, "a:endParaRPr": { "@lang": "en-US", "@sz": ""+font_size*100, "@dirty": "0", "a:latin": { "@typeface": font_face }, "a:cs": { "@typeface": font_face } } } }, "a:tcPr": {} } } } }