createStyle(sourceId) {
        let fontNode, fillNode, borderNode, xfNode;
        if (sourceId >= 0) {
            const sourceXfNode = this._cellXfsNode.children[sourceId];
            xfNode = _.cloneDeep(sourceXfNode);

            if (sourceXfNode.attributes.applyFont) {
                const fontId = sourceXfNode.attributes.fontId;
                fontNode = _.cloneDeep(this._fontsNode.children[fontId]);
            }

            if (sourceXfNode.attributes.applyFill) {
                const fillId = sourceXfNode.attributes.fillId;
                fillNode = _.cloneDeep(this._fillsNode.children[fillId]);
            }

            if (sourceXfNode.attributes.applyBorder) {
                const borderId = sourceXfNode.attributes.borderId;
                borderNode = _.cloneDeep(this._bordersNode.children[borderId]);
            }
        }

        if (!fontNode) fontNode = { name: "font", attributes: {}, children: [] };
        this._fontsNode.children.push(fontNode);

        if (!fillNode) fillNode = { name: "fill", attributes: {}, children: [] };
        this._fillsNode.children.push(fillNode);

        // The border sides must be in order
        if (!borderNode) borderNode = { name: "border", attributes: {}, children: [] };
        borderNode.children = [
            xmlq.findChild(borderNode, "left") || { name: "left", attributes: {}, children: [] },
            xmlq.findChild(borderNode, "right") || { name: "right", attributes: {}, children: [] },
            xmlq.findChild(borderNode, "top") || { name: "top", attributes: {}, children: [] },
            xmlq.findChild(borderNode, "bottom") || { name: "bottom", attributes: {}, children: [] },
            xmlq.findChild(borderNode, "diagonal") || { name: "diagonal", attributes: {}, children: [] }
        ];
        this._bordersNode.children.push(borderNode);

        if (!xfNode) xfNode = { name: "xf", attributes: {}, children: [] };
        _.assign(xfNode.attributes, {
            fontId: this._fontsNode.children.length - 1,
            fillId: this._fillsNode.children.length - 1,
            borderId: this._bordersNode.children.length - 1,
            applyFont: 1,
            applyFill: 1,
            applyBorder: 1
        });

        this._cellXfsNode.children.push(xfNode);

        return new Style(this, this._cellXfsNode.children.length - 1, xfNode, fontNode, fillNode, borderNode);
    }
Create a style.
@param {number} [sourceId] - The source style ID to copy, if provided.
@returns {Style} The style.