add 3dBarChartConversion

This commit is contained in:
Viktor Andreev
2026-01-29 15:58:06 +06:00
parent c155a4c53a
commit e2ad965d7c
3 changed files with 48 additions and 0 deletions

View File

@ -6518,6 +6518,48 @@ xmlns:c16r2=\"http://schemas.microsoft.com/office/drawing/2015/06/chart\"");
writer.WriteString(sNodeName);
writer.WriteString(L">");
}
XLS::BaseObjectPtr CT_Bar3DChart::toXLS(const unsigned short chartIndex, XLS::BaseObjectPtr ChartFormats)
{
auto ChartFormatsPtr = static_cast<XLS::CHARTFORMATS*>(ChartFormats.get());
for(auto ser : m_ser)
{
if(ser != nullptr)
{
ChartFormatsPtr->m_arSERIESFORMAT.push_back(ser->GetXLSFormat(chartIndex));
}
}
auto ptr = new XLS::CRT;
auto chartFormat = new XLS::ChartFormat;
chartFormat->icrt = chartIndex;
ptr->m_ChartFormat = XLS::BaseObjectPtr(chartFormat);
auto chartType = new XLS::Bar;
ptr->m_ChartType = XLS::BaseObjectPtr(chartType);
if(m_barDir.IsInit() && m_barDir->m_eValue == 0)
chartType->fTranspose = true;
if(m_gapWidth.IsInit())
{
_INT16 gapVal = 0;
try
{
gapVal = stoi(m_gapWidth.get());
}
catch (std::exception)
{}
chartType->pcGap = gapVal;
}
auto chart3Dpart = new XLS::Chart3d;
chart3Dpart->anRot = 20;
chart3Dpart->anElev = 15;
chart3Dpart->pcDist = 30;
chart3Dpart->pcHeight3D = 63;
chart3Dpart->pcDepth = 100;
chart3Dpart->pcGap = 150;
chart3Dpart->fNotPieChart = true;
chart3Dpart->fCluster = true;
ptr->m_Chart3d = XLS::BaseObjectPtr(chart3Dpart);
return XLS::BaseObjectPtr(ptr);
}
EElementType CT_Bar3DChart::getType() { return et_ct_bar3dchart; }
ST_BarDir CBarDir::FromString(const std::wstring &sValue)

View File

@ -1593,6 +1593,7 @@ namespace OOX
void fromXML(XmlUtils::CXmlLiteReader& oReader);
void toXML(const std::wstring& sNodeName, NSStringUtils::CStringBuilder& writer) const;
XLS::BaseObjectPtr toXLS(const unsigned short chartIndex, XLS::BaseObjectPtr ChartFormatsPtr);
EElementType getType();
};
class CT_BarChart

View File

@ -344,6 +344,11 @@ namespace OOX
}
AxisParentUnion->m_arCRT.push_back(barChart->toXLS(chartIndex, ptr->m_CHARTFORMATS));
}
if(*ChartFile->m_oChartSpace.m_chart->m_plotArea->m_ItemsElementName0.at(chartIndex) == OOX::Spreadsheet::itemschoicetype5BAR3DCHART)
{
auto barChart = static_cast<CT_Bar3DChart*>(ChartFile->m_oChartSpace.m_chart->m_plotArea->m_Items.at(chartIndex));
AxisParentUnion->m_arCRT.push_back(barChart->toXLS(chartIndex, ptr->m_CHARTFORMATS));
}
else if(*ChartFile->m_oChartSpace.m_chart->m_plotArea->m_ItemsElementName0.at(chartIndex) == OOX::Spreadsheet::itemschoicetype5PIECHART)
{
auto PieChart = static_cast<CT_PieChart*>(ChartFile->m_oChartSpace.m_chart->m_plotArea->m_Items.at(chartIndex));