From 6366306f9c044aec658f5fadf2236fefb15bbdfd Mon Sep 17 00:00:00 2001 From: Viktor Andreev Date: Wed, 29 Apr 2026 13:26:46 +0600 Subject: [PATCH] Add gradient fill conversion --- OOXML/XlsxFormat/Styles/XlsxStyles.cpp | 35 ++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/OOXML/XlsxFormat/Styles/XlsxStyles.cpp b/OOXML/XlsxFormat/Styles/XlsxStyles.cpp index 6309e7ac7e..06a7eba3c5 100644 --- a/OOXML/XlsxFormat/Styles/XlsxStyles.cpp +++ b/OOXML/XlsxFormat/Styles/XlsxStyles.cpp @@ -788,6 +788,41 @@ namespace OOX ext->rgExt.push_back(XLS::BiffStructurePtr(fillProp)); } } + else if(cellFill->m_oGradientFill.IsInit()) + { + auto fillProp = new XLS::ExtProp; + fillProp->extType = XLS::ExtProp::_type::GradientColor; + if(cellFill->m_oGradientFill->m_oDegree.IsInit()) + fillProp->extPropData.gradient_fill.gradient.numDegree = cellFill->m_oGradientFill->m_oDegree->GetValue(); + if(cellFill->m_oGradientFill->m_oType.IsInit()) + fillProp->extPropData.gradient_fill.gradient.type1 = cellFill->m_oGradientFill->m_oType->GetValue(); + + if(cellFill->m_oGradientFill->m_oLeft.IsInit()) + fillProp->extPropData.gradient_fill.gradient.numFillToLeft = cellFill->m_oGradientFill->m_oLeft->GetValue(); + if(cellFill->m_oGradientFill->m_oRight.IsInit()) + fillProp->extPropData.gradient_fill.gradient.numFillToRight = cellFill->m_oGradientFill->m_oRight->GetValue(); + if(cellFill->m_oGradientFill->m_oTop.IsInit()) + fillProp->extPropData.gradient_fill.gradient.numFillToTop = cellFill->m_oGradientFill->m_oTop->GetValue(); + if(cellFill->m_oGradientFill->m_oBottom.IsInit()) + fillProp->extPropData.gradient_fill.gradient.numFillToBottom = cellFill->m_oGradientFill->m_oBottom->GetValue(); + + fillProp->extPropData.gradient_fill.cGradStops = cellFill->m_oGradientFill->m_arrItems.size(); + for(auto i : cellFill->m_oGradientFill->m_arrItems) + { + XLS::GradStop gradStop; + if(i->m_oColor.IsInit()) + { + auto tempClr = getXLSColor(i->m_oColor.get()); + gradStop.xclrType = tempClr.xclrType; + gradStop.numTint.data.value = tempClr.nTintShade; + gradStop.xclrValue = tempClr.xclrValue; + } + if(i->m_oPosition.IsInit()) + gradStop.numPosition.data.value = i->m_oPosition->GetValue(); + fillProp->extPropData.gradient_fill.rgGradStops.push_back(gradStop); + } + ext->rgExt.push_back(XLS::BiffStructurePtr(fillProp)); + } } if(cellXf->m_oFontId.IsInit() && m_oFonts->m_arrItems.size() > cellXf->m_oFontId->GetValue()) {