Add pivot table hierarchies structures

This commit is contained in:
Viktor Andreev
2024-09-23 16:07:49 +06:00
parent e9c200e455
commit 55a2fb1b00
6 changed files with 291 additions and 35 deletions

View File

@ -162,7 +162,7 @@ SOURCES += \
../../../XlsxFormat/SharedStrings/XlsxRun.cpp \ ../../../XlsxFormat/SharedStrings/XlsxRun.cpp \
../../../XlsxFormat/SharedStrings/SharedStrings.cpp \ ../../../XlsxFormat/SharedStrings/SharedStrings.cpp \
../../../XlsxFormat/Pivot/Pivots.cpp \ ../../../XlsxFormat/Pivot/Pivots.cpp \
../../../XlsxFormat/Pivot/PivotCacheHierarchies.cpp \ ../../../XlsxFormat/Pivot/PivotHierarchies.cpp \
../../../XlsxFormat/Slicer/SlicerCache.cpp \ ../../../XlsxFormat/Slicer/SlicerCache.cpp \
../../../XlsxFormat/Slicer/SlicerCacheExt.cpp \ ../../../XlsxFormat/Slicer/SlicerCacheExt.cpp \
../../../XlsxFormat/Slicer/Slicer.cpp \ ../../../XlsxFormat/Slicer/Slicer.cpp \
@ -374,7 +374,7 @@ HEADERS += \
../../../XlsxFormat/Pivot/PivotCacheDefinition.h \ ../../../XlsxFormat/Pivot/PivotCacheDefinition.h \
../../../XlsxFormat/Pivot/PivotCacheDefinitionExt.h \ ../../../XlsxFormat/Pivot/PivotCacheDefinitionExt.h \
../../../XlsxFormat/Pivot/PivotCacheRecords.h \ ../../../XlsxFormat/Pivot/PivotCacheRecords.h \
../../../XlsxFormat/Pivot/PivotCacheHierarchies.h \ ../../../XlsxFormat/Pivot/PivotHierarchies.h \
../../../XlsxFormat/Slicer/SlicerCache.h \ ../../../XlsxFormat/Slicer/SlicerCache.h \
../../../XlsxFormat/Slicer/SlicerCacheExt.h \ ../../../XlsxFormat/Slicer/SlicerCacheExt.h \
../../../XlsxFormat/Slicer/Slicer.h \ ../../../XlsxFormat/Slicer/Slicer.h \

View File

@ -32,7 +32,7 @@
#pragma once #pragma once
#include "PivotTable.h" #include "PivotTable.h"
#include "PivotCacheHierarchies.h" #include "PivotHierarchies.h"
namespace SimpleTypes namespace SimpleTypes
{ {

View File

@ -30,7 +30,7 @@
* *
*/ */
#pragma once #pragma once
#include "PivotCacheHierarchies.h" #include "PivotHierarchies.h"
#include "../../XlsbFormat/Biff12_unions/PCDHIERARCHIES.h" #include "../../XlsbFormat/Biff12_unions/PCDHIERARCHIES.h"
#include "../../XlsbFormat/Biff12_unions/PCDHIERARCHY.h" #include "../../XlsbFormat/Biff12_unions/PCDHIERARCHY.h"
@ -52,6 +52,8 @@ namespace OOX
{ {
namespace Spreadsheet namespace Spreadsheet
{ {
//pivot cache hierarchies
void CpivotCacheHierarchies::fromXML(XmlUtils::CXmlLiteReader& oReader) void CpivotCacheHierarchies::fromXML(XmlUtils::CXmlLiteReader& oReader)
{ {
WritingElement_ReadAttributes_Start( oReader ) WritingElement_ReadAttributes_Start( oReader )
@ -97,6 +99,8 @@ namespace Spreadsheet
void CpivotCacheHierarchy::fromXML(XmlUtils::CXmlLiteReader& oReader) void CpivotCacheHierarchy::fromXML(XmlUtils::CXmlLiteReader& oReader)
{ {
ReadAttributes( oReader ); ReadAttributes( oReader );
if(oReader.IsEmptyNode())
return;
auto nCurDepth = oReader.GetDepth(); auto nCurDepth = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nCurDepth ) ) while( oReader.ReadNextSiblingNode( nCurDepth ) )
{ {
@ -212,6 +216,10 @@ namespace Spreadsheet
ptr->stUnique = m_oUniqueName.get(); ptr->stUnique = m_oUniqueName.get();
else else
ptr->stUnique = L""; ptr->stUnique = L"";
if(m_oIconSet.IsInit())
ptr->iconSet.set = m_oIconSet.get();
else
ptr->iconSet.set = 0;
if(m_oFieldsUsage.IsInit()) if(m_oFieldsUsage.IsInit())
ptr1->m_PCDHFIELDSUSAGE = m_oFieldsUsage->toBin(); ptr1->m_PCDHFIELDSUSAGE = m_oFieldsUsage->toBin();
@ -563,6 +571,77 @@ namespace Spreadsheet
return objectPtr; return objectPtr;
} }
//pivot table hierarchies
void CpivotTableHierarchies::fromXML(XmlUtils::CXmlLiteReader& oReader)
{
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, L"count", m_oCount )
WritingElement_ReadAttributes_End( oReader )
auto nCurDepth = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nCurDepth ) )
{
std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName());
if ( L"pivotHierarchy" == sName )
{
CpivotTableHierarchy* pPivotCacheHierarchy = new CpivotTableHierarchy();
*pPivotCacheHierarchy = oReader;
m_arrItems.push_back(pPivotCacheHierarchy);
}
}
}
void CpivotTableHierarchies::toXML(NSStringUtils::CStringBuilder& writer) const
{
writer.WriteString(L"<pivotHierarchies");
WritingStringAttrInt(L"count", (int)m_arrItems.size());
writer.WriteString(L">");
for ( size_t i = 0; i < m_arrItems.size(); ++i)
{
if ( m_arrItems[i] )
{
m_arrItems[i]->toXML(writer);
}
}
writer.WriteString(L"</pivotHierarchies>");
}
XLS::BaseObjectPtr CpivotTableHierarchies::toBin()
{
auto ptr(new XLSB::PCDHIERARCHIES);
XLS::BaseObjectPtr objectPtr(ptr);
for(auto i : m_arrItems)
ptr->m_arPCDHIERARCHY.push_back(i->toBin());
return objectPtr;
}
void CpivotTableHierarchy::fromXML(XmlUtils::CXmlLiteReader& oReader)
{
ReadAttributes( oReader );
}
void CpivotTableHierarchy::ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, L"outline", m_oOutline )
WritingElement_ReadAttributes_Read_else_if( oReader, L"multipleItemSelectionAllowed", m_oMultipleItemSelectionAllowed )
WritingElement_ReadAttributes_End( oReader )
}
void CpivotTableHierarchy::toXML(NSStringUtils::CStringBuilder& writer) const
{
writer.WriteString(L"<groupMember");
writer.WriteString(L"/>");
}
XLS::BaseObjectPtr CpivotTableHierarchy::toBin()
{
auto ptr1(new XLSB::PCDHGLGMEMBER);
XLS::BaseObjectPtr objectPtr(ptr1);
auto ptr(new XLSB::BeginPCDHGLGMember);
ptr1->m_BrtBeginPCDHGLGMember = XLS::BaseObjectPtr{ptr};
return objectPtr;
}
} }
} }

View File

@ -39,6 +39,7 @@ namespace OOX
{ {
namespace Spreadsheet namespace Spreadsheet
{ {
///pivot cache hierarchies
class CGroupMember : public WritingElement class CGroupMember : public WritingElement
{ {
public: public:
@ -274,28 +275,201 @@ namespace Spreadsheet
}; };
class CpivotCacheHierarchies : public WritingElementWithChilds<CpivotCacheHierarchy> class CpivotCacheHierarchies : public WritingElementWithChilds<CpivotCacheHierarchy>
{ {
public: public:
WritingElement_AdditionMethods(CpivotCacheHierarchies) WritingElement_AdditionMethods(CpivotCacheHierarchies)
WritingElement_XlsbConstructors(CpivotCacheHierarchies) WritingElement_XlsbConstructors(CpivotCacheHierarchies)
CpivotCacheHierarchies(){} CpivotCacheHierarchies(){}
virtual ~CpivotCacheHierarchies() {} virtual ~CpivotCacheHierarchies() {}
virtual void fromXML(XmlUtils::CXmlNode& node) virtual void fromXML(XmlUtils::CXmlNode& node)
{ {
} }
virtual std::wstring toXML() const virtual std::wstring toXML() const
{ {
return _T(""); return _T("");
} }
virtual void toXML(NSStringUtils::CStringBuilder& writer) const; virtual void toXML(NSStringUtils::CStringBuilder& writer) const;
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); virtual void fromXML(XmlUtils::CXmlLiteReader& oReader);
void fromBin(XLS::BaseObjectPtr& obj); void fromBin(XLS::BaseObjectPtr& obj);
XLS::BaseObjectPtr toBin(); XLS::BaseObjectPtr toBin();
nullable<SimpleTypes::CUnsignedDecimalNumber> m_oCount; nullable<SimpleTypes::CUnsignedDecimalNumber> m_oCount;
}; };
///pivot table hierarchies
class CMemberProperty : public WritingElement
{
public:
WritingElement_AdditionMethods(CMemberProperty)
WritingElement_XlsbConstructors(CMemberProperty)
CMemberProperty(){}
virtual ~CMemberProperty() {}
virtual void fromXML(XmlUtils::CXmlNode& node)
{
}
virtual std::wstring toXML() const
{
return _T("");
}
virtual void toXML(NSStringUtils::CStringBuilder& writer) const;
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader);
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader);
void fromBin(XLS::BaseObjectPtr& obj);
XLS::BaseObjectPtr toBin();
nullable_bool m_oShowCell;
nullable_bool m_oShowTip;
nullable_bool m_oShowAsCaption;
nullable_string m_oName;
nullable_uint m_oNameLen;
nullable_uint m_oPPos;
nullable_uint m_oPLen;
nullable_uint m_oLevel;
nullable_uint m_oField;
};
class CMemberProperties : public WritingElementWithChilds<CMemberProperty>
{
public:
WritingElement_AdditionMethods(CMemberProperties)
WritingElement_XlsbConstructors(CMemberProperties)
CMemberProperties(){}
virtual ~CMemberProperties() {}
virtual void fromXML(XmlUtils::CXmlNode& node)
{
}
virtual std::wstring toXML() const
{
return _T("");
}
virtual void toXML(NSStringUtils::CStringBuilder& writer) const;
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader);
void fromBin(XLS::BaseObjectPtr& obj);
XLS::BaseObjectPtr toBin();
nullable<SimpleTypes::CUnsignedDecimalNumber> m_oCount;
};
class CMember : public WritingElement
{
public:
WritingElement_AdditionMethods(CMember)
WritingElement_XlsbConstructors(CMember)
CMember(){}
virtual ~CMember() {}
virtual void fromXML(XmlUtils::CXmlNode& node)
{
}
virtual std::wstring toXML() const
{
return _T("");
}
virtual void toXML(NSStringUtils::CStringBuilder& writer) const;
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader);
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader);
void fromBin(XLS::BaseObjectPtr& obj);
XLS::BaseObjectPtr toBin();
nullable_string m_oName;
};
class CMembers : public WritingElementWithChilds<CMember>
{
public:
WritingElement_AdditionMethods(CMembers)
WritingElement_XlsbConstructors(CMembers)
CMembers(){}
virtual ~CMembers() {}
virtual void fromXML(XmlUtils::CXmlNode& node)
{
}
virtual std::wstring toXML() const
{
return _T("");
}
virtual void toXML(NSStringUtils::CStringBuilder& writer) const;
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader);
void fromBin(XLS::BaseObjectPtr& obj);
XLS::BaseObjectPtr toBin();
nullable<SimpleTypes::CUnsignedDecimalNumber> m_oCount;
nullable<SimpleTypes::CUnsignedDecimalNumber> m_oLevel;
};
class CpivotTableHierarchy : public WritingElement
{
public:
WritingElement_AdditionMethods(CpivotTableHierarchy)
WritingElement_XlsbConstructors(CpivotTableHierarchy)
CpivotTableHierarchy(){}
virtual ~CpivotTableHierarchy() {}
virtual void fromXML(XmlUtils::CXmlNode& node)
{
}
virtual std::wstring toXML() const
{
return _T("");
}
virtual void toXML(NSStringUtils::CStringBuilder& writer) const;
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader);
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader);
void fromBin(XLS::BaseObjectPtr& obj);
XLS::BaseObjectPtr toBin();
nullable_bool m_oOutline;
nullable_bool m_oMultipleItemSelectionAllowed;
nullable_bool m_oSubtotalTop;
nullable_bool m_oShowInFieldList;
nullable_bool m_oDragToRow;
nullable_bool m_oDragToCol;
nullable_bool m_oDragToPage;
nullable_bool m_oDragToData;
nullable_bool m_oDragOff;
nullable_bool m_oIncludeNewItemsInFilter;
nullable_string m_oCaption;
nullable<CMemberProperties> m_oMemberProperties;
nullable<CGroupLevels> m_oGroupLevels;
};
class CpivotTableHierarchies : public WritingElementWithChilds<CpivotTableHierarchy>
{
public:
WritingElement_AdditionMethods(CpivotTableHierarchies)
WritingElement_XlsbConstructors(CpivotTableHierarchies)
CpivotTableHierarchies(){}
virtual ~CpivotTableHierarchies() {}
virtual void fromXML(XmlUtils::CXmlNode& node)
{
}
virtual std::wstring toXML() const
{
return _T("");
}
virtual void toXML(NSStringUtils::CStringBuilder& writer) const;
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader);
void fromBin(XLS::BaseObjectPtr& obj);
XLS::BaseObjectPtr toBin();
nullable<SimpleTypes::CUnsignedDecimalNumber> m_oCount;
};
} }
} }

View File

@ -31,6 +31,8 @@
*/ */
#pragma once #pragma once
#include "PivotHierarchies.h"
#include "../WritingElement.h" #include "../WritingElement.h"
#include "../FileTypes_Spreadsheet.h" #include "../FileTypes_Spreadsheet.h"
@ -911,21 +913,21 @@ namespace OOX
void ReadAttributes(XLS::BaseObjectPtr& obj); void ReadAttributes(XLS::BaseObjectPtr& obj);
XLS::BaseObjectPtr writeAttributes(); XLS::BaseObjectPtr writeAttributes();
//---------- //----------
nullable<CColumnRowFields> m_oColFields; nullable<CColumnRowFields> m_oColFields;
nullable<CColumnRowItems> m_oColItems; nullable<CColumnRowItems> m_oColItems;
nullable<CDataFields> m_oDataFields; nullable<CDataFields> m_oDataFields;
nullable<CPivotTableFormats> m_oFormats; nullable<CPivotTableFormats> m_oFormats;
nullable<CPivotTableLocation> m_oLocation; nullable<CPivotTableLocation> m_oLocation;
nullable<CPageFields> m_oPageFields; nullable<CPageFields> m_oPageFields;
nullable<CPivotFields> m_oPivotFields; nullable<CPivotFields> m_oPivotFields;
nullable<CColumnRowFields> m_oRowFields; nullable<CColumnRowFields> m_oRowFields;
nullable<CColumnRowItems> m_oRowItems; nullable<CColumnRowItems> m_oRowItems;
nullable<CPivotTableStyleInfo> m_oPivotTableStyleInfo; nullable<CPivotTableStyleInfo> m_oPivotTableStyleInfo;
nullable<CpivotTableHierarchies> m_oPivotHierarchies;
//nullable<CPivotTableFilters> m_oFilters; //nullable<CPivotTableFilters> m_oFilters;
//nullable<CPivotChartFormats> m_oChartFormats; //nullable<CPivotChartFormats> m_oChartFormats;
//nullable<Pivot Conditional Formats> m_oConditionalFormats; //nullable<Pivot Conditional Formats> m_oConditionalFormats;
//nullable<Column OLAP Hierarchy References> m_oColHierarchiesUsage; //nullable<Column OLAP Hierarchy References> m_oColHierarchiesUsage;
//nullable<PivotTable OLAP Hierarchies> m_oPivotHierarchies;
//nullable<Row OLAP Hierarchy References> m_oRowHierarchiesUsage; //nullable<Row OLAP Hierarchy References> m_oRowHierarchiesUsage;
nullable<OOX::Drawing::COfficeArtExtensionList> m_oExtLst; nullable<OOX::Drawing::COfficeArtExtensionList> m_oExtLst;

View File

@ -409,6 +409,7 @@ xmlns:xr16=\"http://schemas.microsoft.com/office/spreadsheetml/2017/revision16\"
else if (L"pivotTableStyleInfo" == sName) m_oPivotTableStyleInfo = oReader; else if (L"pivotTableStyleInfo" == sName) m_oPivotTableStyleInfo = oReader;
else if (L"rowFields" == sName) m_oRowFields = oReader; else if (L"rowFields" == sName) m_oRowFields = oReader;
else if (L"rowItems" == sName) m_oRowItems = oReader; else if (L"rowItems" == sName) m_oRowItems = oReader;
else if (L"pivotHierarchies" == sName) m_oPivotHierarchies = oReader;
//else if (L"filters" == sName) m_oFilters = oReader; //else if (L"filters" == sName) m_oFilters = oReader;
//else if (L"chartFormats" == sName) m_oChartFormats = oReader; //else if (L"chartFormats" == sName) m_oChartFormats = oReader;
//else if (L"colHierarchiesUsage" == sName) m_oColHierarchiesUsage = oReader; //else if (L"colHierarchiesUsage" == sName) m_oColHierarchiesUsage = oReader;