UNPKG

write-excel-file

Version:

Write simple `*.xlsx` files in a browser or Node.js

139 lines (137 loc) 6.47 kB
var _excluded = ["fileName"]; function _createForOfIteratorHelperLoose(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } // Copy-pasted from: // https://github.com/davidramos-om/zipcelx-on-steroids/blob/master/src/zipcelx.js import JSZip from 'jszip'; import FileSaver from 'file-saver'; import getImageFileName from './getImageFileName.js'; import generateWorkbookXml from './files/workbook.xml.js'; import generateWorkbookXmlRels from './files/workbook.xml.rels.js'; import rels from './files/rels.js'; import generateContentTypesXml from './files/[Content_Types].xml.js'; import generateDrawingXml from './files/drawing.xml.js'; import generateDrawingXmlRels from './files/drawing.xml.rels.js'; import generateSheetXmlRels from './files/sheet.xml.rels.js'; import generateSharedStringsXml from './files/sharedStrings.xml.js'; import generateStylesXml from './files/styles.xml.js'; import { generateSheets } from './writeXlsxFile.common.js'; export default function writeXlsxFile(data) { var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, fileName = _ref.fileName, rest = _objectWithoutProperties(_ref, _excluded); return generateXlsxFile(data, rest).then(function (blob) { if (fileName) { return FileSaver.saveAs(blob, fileName); } return blob; }); } /** * Writes an *.xlsx file into a "blob". * https://github.com/egeriis/zipcelx/issues/68 * "The reason if you want to send the excel file or store it natively on Cordova/capacitor app". * @return {Blob} */ function generateXlsxFile(data, _ref2) { var sheetName = _ref2.sheet, sheetNames = _ref2.sheets, schema = _ref2.schema, columns = _ref2.columns, images = _ref2.images, headerStyle = _ref2.headerStyle, getHeaderStyle = _ref2.getHeaderStyle, fontFamily = _ref2.fontFamily, fontSize = _ref2.fontSize, orientation = _ref2.orientation, stickyRowsCount = _ref2.stickyRowsCount, stickyColumnsCount = _ref2.stickyColumnsCount, showGridLines = _ref2.showGridLines, rightToLeft = _ref2.rightToLeft, dateFormat = _ref2.dateFormat; var zip = new JSZip(); var _generateSheets = generateSheets({ data: data, sheetName: sheetName, sheetNames: sheetNames, schema: schema, columns: columns, images: images, headerStyle: headerStyle, getHeaderStyle: getHeaderStyle, fontFamily: fontFamily, fontSize: fontSize, orientation: orientation, stickyRowsCount: stickyRowsCount, stickyColumnsCount: stickyColumnsCount, showGridLines: showGridLines, rightToLeft: rightToLeft, dateFormat: dateFormat }), sheets = _generateSheets.sheets, getSharedStrings = _generateSheets.getSharedStrings, getStyles = _generateSheets.getStyles; zip.file('_rels/.rels', rels); zip.file('[Content_Types].xml', generateContentTypesXml({ images: images, sheets: sheets })); var xl = zip.folder('xl'); xl.file('_rels/workbook.xml.rels', generateWorkbookXmlRels({ sheets: sheets })); xl.file('workbook.xml', generateWorkbookXml({ sheets: sheets, stickyRowsCount: stickyRowsCount, stickyColumnsCount: stickyColumnsCount })); xl.file('styles.xml', generateStylesXml(getStyles())); xl.file('sharedStrings.xml', generateSharedStringsXml(getSharedStrings())); for (var _iterator = _createForOfIteratorHelperLoose(sheets), _step; !(_step = _iterator()).done;) { var _step$value = _step.value, id = _step$value.id, _data = _step$value.data, _images = _step$value.images; xl.file("worksheets/sheet".concat(id, ".xml"), _data); xl.file("worksheets/_rels/sheet".concat(id, ".xml.rels"), generateSheetXmlRels({ id: id, images: _images })); if (_images) { xl.file("drawings/drawing".concat(id, ".xml"), generateDrawingXml({ images: _images })); xl.file("drawings/_rels/drawing".concat(id, ".xml.rels"), generateDrawingXmlRels({ images: _images, sheetId: id })); // Copy images to `xl/media` folder. for (var _iterator2 = _createForOfIteratorHelperLoose(_images), _step2; !(_step2 = _iterator2()).done;) { var image = _step2.value; // According to `JSZip` docs: // https://stuk.github.io/jszip/documentation/api_jszip/file_data.html // `.file()` function supports `data` argument of type: // * String // * ArrayBuffer // * Uint8Array // * Buffer // * Blob // * Promise // * Nodejs stream xl.file("media/".concat(getImageFileName(image, { sheetId: id, sheetImages: _images })), image.content); } } } return zip.generateAsync({ type: 'blob', mimeType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', compression: 'deflate' }); } //# sourceMappingURL=writeXlsxFileBrowser.js.map