From bc7bbb94aaaef878799238509c91c51fb9d22e64 Mon Sep 17 00:00:00 2001 From: RIMINMIR Date: Wed, 12 Jul 2023 18:08:02 +0600 Subject: [PATCH] added extension list conversion --- OOXML/DocxFormat/Drawing/DrawingExt.cpp | 42 ++++++++++++-- OOXML/DocxFormat/Drawing/DrawingExt.h | 7 ++- OOXML/XlsxFormat/Slicer/SlicerCacheExt.cpp | 21 ++++++- OOXML/XlsxFormat/Slicer/SlicerCacheExt.h | 2 + OOXML/XlsxFormat/Worksheets/Sparkline.cpp | 67 ++++++++++++++++++++++ OOXML/XlsxFormat/Worksheets/Sparkline.h | 2 + 6 files changed, 132 insertions(+), 9 deletions(-) diff --git a/OOXML/DocxFormat/Drawing/DrawingExt.cpp b/OOXML/DocxFormat/Drawing/DrawingExt.cpp index 90aee2b188..163f8dc343 100644 --- a/OOXML/DocxFormat/Drawing/DrawingExt.cpp +++ b/OOXML/DocxFormat/Drawing/DrawingExt.cpp @@ -129,7 +129,7 @@ namespace OOX sResult += L" relId=\"" + m_oRelId->ToString() + L"\""; } sResult += L" minVer=\"http://schemas.openxmlformats.org/drawingml/2006/diagram\"/>"; - + return sResult; } EElementType CDataModelExt::getType() const @@ -214,9 +214,9 @@ namespace OOX *m_sUri == L"{46F421CA-312F-682f-3DD2-61675219B42D}" || *m_sUri == L"{DE250136-89BD-433C-8126-D09CA5730AF9}" || *m_sUri == L"{19B8F6BF-5375-455C-9EA6-DF929625EA0E}" || - *m_sUri == L"{725AE2AE-9491-48be-B2B4-4EB974FC3084}" || + *m_sUri == L"{725AE2AE-9491-48be-B2B4-4EB974FC3084}" || *m_sUri == L"{231B7EB2-2AFC-4442-B178-5FFDF5851E7C}" || - *m_sUri == L"http://schemas.microsoft.com/office/drawing/2008/diagram")) + *m_sUri == L"http://schemas.microsoft.com/office/drawing/2008/diagram")) { int nCurDepth = oReader.GetDepth(); while (oReader.ReadNextSiblingNode(nCurDepth)) @@ -491,7 +491,7 @@ namespace OOX NSStringUtils::CStringBuilder writer; writer.StartNode(L"externalReference"); writer.StartAttributes(); - + if (m_oFileKey.IsInit()) writer.WriteAttribute(L"fileKey", *m_oFileKey); if (m_oInstanceId.IsInit()) writer.WriteAttribute(L"instanceId", *m_oInstanceId); @@ -585,7 +585,7 @@ namespace OOX } pWriter->WriteNodeEnd(ns + L"extLst"); - } + } std::wstring COfficeArtExtensionList::toXML() const { return toXMLWithNS(L"a:"); @@ -606,6 +606,38 @@ namespace OOX return sResult; } + XLS::BaseObjectPtr COfficeArtExtensionList::toBinWorksheet() + { + auto ptr(new XLSB::FRTWORKSHEET); + XLS::BaseObjectPtr objectPtr(ptr); + if(m_arrExt.empty()) + return objectPtr; + for(auto i:m_arrExt) + { + if(i->m_sUri == L"{78C0D931-6437-407d-A8EE-F0AAD7539E65}") + { + auto formatPtr(new XLSB::CONDITIONALFORMATTINGS); + ptr->m_CONDITIONALFORMATTINGS = XLS::BaseObjectPtr{formatPtr}; + for(auto j:i->m_arrConditionalFormatting) + { + formatPtr->m_arCONDITIONALFORMATTING14.push_back(j->toBin()); + } + } + else if(i->m_sUri == L"{CCE6A557-97BC-4B89-ADB6-D9C93CAAB3DF}") + { + ptr->m_DVALS14 = i->m_oDataValidations->toBin(); + } + else if(i->m_sUri == L"{05C60535-1F16-4fd2-B633-F4F36F0B64E0}") + { + ptr->m_SPARKLINEGROUPS = i->m_oSparklineGroups->toBin(); + } + else if(i->m_sUri == L"{A8765BA9-456A-4dab-B4F3-ACF838C121DE}") + { + ptr->m_SLICERSEX = i->m_oSlicerList->toBin(); + } + } + return objectPtr; + } void COfficeArtExtensionList::fromBin(XLS::BaseObjectPtr& obj) { if (obj->get_type() == XLS::typeFRTWORKBOOK) diff --git a/OOXML/DocxFormat/Drawing/DrawingExt.h b/OOXML/DocxFormat/Drawing/DrawingExt.h index 4d43332336..93d1cd95e4 100644 --- a/OOXML/DocxFormat/Drawing/DrawingExt.h +++ b/OOXML/DocxFormat/Drawing/DrawingExt.h @@ -105,7 +105,7 @@ namespace OOX //-------------------------------------------------------------------------------- // COfficeArtExtension 20.1.2.2.14 (Part 1) - //-------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------- class COfficeArtExtension : public WritingElement { @@ -150,7 +150,7 @@ namespace OOX std::vector m_oSlicerCachePivotTables; nullable m_oTableSlicerCache; nullable m_oSlicerCacheHideItemsWithNoData; - + std::vector m_arrConditionalFormatting; nullable m_oPresenceInfo; @@ -167,7 +167,7 @@ namespace OOX //-------------------------------------------------------------------------------- // COfficeArtExtensionList 20.1.2.2.15 (Part 1) - //-------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------- class COfficeArtExtensionList : public WritingElement { @@ -185,6 +185,7 @@ namespace OOX virtual std::wstring toXML() const; std::wstring toXMLWithNS(const std::wstring& sNamespace) const; void fromBin(XLS::BaseObjectPtr& obj); + XLS::BaseObjectPtr toBinWorksheet(); virtual EElementType getType() const; std::vector m_arrExt; diff --git a/OOXML/XlsxFormat/Slicer/SlicerCacheExt.cpp b/OOXML/XlsxFormat/Slicer/SlicerCacheExt.cpp index fbb809808e..9655bfca25 100644 --- a/OOXML/XlsxFormat/Slicer/SlicerCacheExt.cpp +++ b/OOXML/XlsxFormat/Slicer/SlicerCacheExt.cpp @@ -540,6 +540,15 @@ void CSlicerCache::fromPPTY(NSBinPptxRW::CBinaryFileReader* pReader) { pReader->SkipRecord(); } +XLS::BaseObjectPtr CSlicerRef::toBin() +{ + auto ptr(new XLSB::SLICEREX); + XLS::BaseObjectPtr objectPtr(ptr); + auto ptr1(new XLSB::BeginSlicerEx); + ptr1->FRTheader.relID.relId = m_oRId->GetValue(); + + return objectPtr; +} void CSlicerRef::fromBin(XLS::BaseObjectPtr &obj) { ReadAttributes(obj); @@ -557,7 +566,6 @@ void CSlicerRef::ReadAttributes(XLS::BaseObjectPtr &obj) if(!ptr1->FRTheader.relID.relId.value().empty()) m_oRId = ptr1->FRTheader.relID.relId.value(); } - } } else if(obj->get_type() == XLS::typeTABLESLICEREX) @@ -778,6 +786,17 @@ void CSlicerCaches::toXML(NSStringUtils::CStringBuilder& writer, const std::wstr } writer.EndNode(sPrefix + sName); } +XLS::BaseObjectPtr CSlicerRefs::toBin() +{ + auto ptr(new XLSB::SLICERSEX); + XLS::BaseObjectPtr objectPtr(ptr); + + for(auto i:m_oSlicer) + { + ptr->m_arSLICEREX.push_back(i.toBin()); + } + return objectPtr; +} void CSlicerRefs::fromBin(XLS::BaseObjectPtr &obj) { if(obj->get_type() == XLS::typeSLICERSEX) diff --git a/OOXML/XlsxFormat/Slicer/SlicerCacheExt.h b/OOXML/XlsxFormat/Slicer/SlicerCacheExt.h index a94ddcd7a1..fa79a0c1c9 100644 --- a/OOXML/XlsxFormat/Slicer/SlicerCacheExt.h +++ b/OOXML/XlsxFormat/Slicer/SlicerCacheExt.h @@ -206,6 +206,7 @@ namespace OOX virtual void toXML(NSStringUtils::CStringBuilder& writer, const std::wstring& sName) const; virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); void fromBin(XLS::BaseObjectPtr& obj); + XLS::BaseObjectPtr toBin(); void ReadAttributes(XLS::BaseObjectPtr& obj); void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); virtual void toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const; @@ -280,6 +281,7 @@ namespace OOX virtual void toXML(NSStringUtils::CStringBuilder& writer, const std::wstring& sName) const; virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); void fromBin(XLS::BaseObjectPtr& obj); + XLS::BaseObjectPtr toBin(); void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); virtual EElementType getType() const { diff --git a/OOXML/XlsxFormat/Worksheets/Sparkline.cpp b/OOXML/XlsxFormat/Worksheets/Sparkline.cpp index 9263752056..64ec4da5b8 100644 --- a/OOXML/XlsxFormat/Worksheets/Sparkline.cpp +++ b/OOXML/XlsxFormat/Worksheets/Sparkline.cpp @@ -393,6 +393,65 @@ namespace OOX m_oSparklines = obj; } } + XLS::BaseObjectPtr CSparklineGroup::toBin() + { + auto ptr1(new XLSB::SPARKLINEGROUP); + XLS::BaseObjectPtr objectPtr(ptr1); + + auto ptr(new XLSB::BeginSparklineGroup); + ptr1->m_BrtBeginSparklineGroup = XLS::BaseObjectPtr{ptr}; + + ptr->dManualMax.data.value = m_oManualMax->GetValue(); + ptr->dManualMin.data.value = m_oManualMin->GetValue(); + ptr->dLineWeight.data.value = m_oLineWeight->GetValue(); + ptr->isltype = static_castisltype)>(m_oType->GetValue()); + ptr->fDateAxis = m_oDateAxis->GetValue(); + ptr->fShowEmptyCellAsZero = (m_oDisplayEmptyCellsAs == OOX::Spreadsheet::ST_DispBlanksAs::st_dispblanksasZERO) ? 0x01 : 0x00; + ptr->fMarkers = m_oMarkers->GetValue(); + ptr->fHigh = m_oHigh->GetValue(); + ptr->fLow = m_oLow->GetValue(); + ptr->fFirst = m_oFirst->GetValue(); + ptr->fLast = m_oLast->GetValue(); + ptr->fNegative = m_oNegative->GetValue(); + ptr->fAxis = m_oDisplayXAxis->GetValue(); + ptr->fDisplayHidden = m_oDisplayHidden->GetValue(); + ptr->fRTL = m_oRightToLeft->GetValue(); + + if(m_oMaxAxisType == SimpleTypes::Spreadsheet::ESparklineAxisMinMax::Individual) + ptr->fIndividualAutoMax = true; + + + if(m_oColorSeries.IsInit()) + ptr->brtcolorSeries = m_oColorSeries->toColor(); + + if(m_oColorNegative.IsInit()) + ptr->brtcolorNegative = m_oColorNegative->toColor(); + + if(m_oColorAxis.IsInit()) + ptr->brtcolorAxis = m_oColorAxis->toColor(); + + if(m_oColorMarkers.IsInit()) + ptr->brtcolorMarkers = m_oColorMarkers->toColor(); + + if(m_oColorFirst.IsInit()) + ptr->brtcolorFirst = m_oColorFirst->toColor(); + + if(m_oColorLast.IsInit()) + ptr->brtcolorLast = m_oColorLast->toColor(); + + if(m_oColorHigh.IsInit()) + ptr->brtcolorHigh = m_oColorHigh->toColor(); + + if(m_oColorLow.IsInit()) + ptr->brtcolorLow = m_oColorLow->toColor(); + + if(ptr->FRTheader.rgFormulas.array.size() > 0) + { + ptr->FRTheader.rgFormulas.array[0].formula = m_oRef.get(); + } + + return objectPtr; + } EElementType CSparklineGroup::getType () const { return et_x_SparklineGroup; @@ -556,6 +615,14 @@ namespace OOX m_arrItems.push_back(new CSparklineGroup(sparklineGroup)); } } + XLS::BaseObjectPtr CSparklineGroups::toBin() + { + auto ptr(new XLSB::SPARKLINEGROUPS); + XLS::BaseObjectPtr objectPtr(ptr); + for(auto i:m_arrItems) + ptr->m_arSPARKLINEGROUP.push_back(i->toBin()); + return objectPtr; + } EElementType CSparklineGroups::getType () const { return et_x_SparklineGroups; diff --git a/OOXML/XlsxFormat/Worksheets/Sparkline.h b/OOXML/XlsxFormat/Worksheets/Sparkline.h index c2968e768d..938fc399d0 100644 --- a/OOXML/XlsxFormat/Worksheets/Sparkline.h +++ b/OOXML/XlsxFormat/Worksheets/Sparkline.h @@ -109,6 +109,7 @@ namespace OOX virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); void fromBin(XLS::BaseObjectPtr& obj); + XLS::BaseObjectPtr toBin(); virtual EElementType getType () const; private: @@ -163,6 +164,7 @@ namespace OOX virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); void fromBin(XLS::BaseObjectPtr& obj); + XLS::BaseObjectPtr toBin(); virtual EElementType getType () const; private: