mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-07-20 14:22:36 +08:00
.
This commit is contained in:
@ -147,6 +147,17 @@ namespace OOX
|
||||
m_oAltTextTable->toXML(writer);
|
||||
sResult += writer.GetData().c_str();
|
||||
}
|
||||
if (false == m_arrConditionalFormatting.empty())
|
||||
{
|
||||
sResult += L"<x14:conditionalFormattings>";
|
||||
NSStringUtils::CStringBuilder writer;
|
||||
for (size_t i = 0; i < m_arrConditionalFormatting.size(); i++)
|
||||
{
|
||||
m_arrConditionalFormatting[i]->toXML2(writer, true);
|
||||
}
|
||||
sResult += writer.GetData().c_str();
|
||||
sResult += L"</x14:conditionalFormattings>";
|
||||
}
|
||||
if (m_oId.IsInit())
|
||||
{
|
||||
sResult += L"<" + sNamespace + L"id>" + m_oId.get2() + L"</" + sNamespace + L"id>";
|
||||
|
||||
@ -220,15 +220,15 @@ namespace OOX
|
||||
}
|
||||
}
|
||||
}
|
||||
virtual std::wstring toXML() const
|
||||
virtual std::wstring toXML() const
|
||||
{
|
||||
return toXMLWithNS(_T("a:"));
|
||||
return toXMLWithNS(L"a:");
|
||||
}
|
||||
std::wstring toXMLWithNS(const std::wstring& sNamespace) const
|
||||
{
|
||||
std::wstring sResult = _T("<");
|
||||
sResult += sNamespace;
|
||||
sResult += _T("extLst>");
|
||||
if (m_arrExt.empty()) return L"";
|
||||
|
||||
std::wstring sResult = L"<" + sNamespace + L"extLst>";
|
||||
|
||||
for ( size_t nIndex = 0; nIndex < m_arrExt.size(); nIndex++ )
|
||||
{
|
||||
@ -236,9 +236,7 @@ namespace OOX
|
||||
sResult += m_arrExt[nIndex]->toXMLWithNS(sNamespace);
|
||||
}
|
||||
|
||||
sResult += _T("</");
|
||||
sResult += sNamespace;
|
||||
sResult += _T("extLst>");
|
||||
sResult += L"</" + sNamespace + L"extLst>";
|
||||
|
||||
return sResult;
|
||||
}
|
||||
|
||||
@ -60,12 +60,16 @@ namespace OOX
|
||||
{
|
||||
return L"";
|
||||
}
|
||||
virtual void toXML(NSStringUtils::CStringBuilder& writer) const
|
||||
void toXML2(NSStringUtils::CStringBuilder& writer, bool bExtendedWrite) const
|
||||
{
|
||||
writer.WriteString(L"<" + m_sNodeName + L">");
|
||||
writer.WriteEncodeXmlString(m_sText);
|
||||
writer.WriteString(L"</" + m_sNodeName + L">");
|
||||
}
|
||||
virtual void toXML(NSStringUtils::CStringBuilder& writer) const
|
||||
{
|
||||
toXML2(writer, false);
|
||||
}
|
||||
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
|
||||
{
|
||||
m_sNodeName = oReader.GetName();
|
||||
@ -97,7 +101,10 @@ namespace OOX
|
||||
|
||||
return oFormula;
|
||||
}
|
||||
|
||||
bool isExtended ()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
std::wstring m_sNodeName;
|
||||
std::wstring m_sText;
|
||||
};
|
||||
@ -121,19 +128,31 @@ namespace OOX
|
||||
}
|
||||
virtual void toXML(NSStringUtils::CStringBuilder& writer) const
|
||||
{
|
||||
if (m_oType.IsInit())
|
||||
toXML2(writer, false);
|
||||
}
|
||||
void toXML2(NSStringUtils::CStringBuilder& writer, bool bExtendedWrite) const
|
||||
{
|
||||
if (false == m_oType.IsInit()) return;
|
||||
|
||||
if (bExtendedWrite == false)
|
||||
{
|
||||
writer.WriteString(L"<cfvo");
|
||||
|
||||
if (m_oType->GetValue() == SimpleTypes::Spreadsheet::autoMin) m_oType->SetValue(SimpleTypes::Spreadsheet::Minimum);
|
||||
if (m_oType->GetValue() == SimpleTypes::Spreadsheet::autoMax) m_oType->SetValue(SimpleTypes::Spreadsheet::Maximum);
|
||||
}
|
||||
|
||||
std::wstring node_name = bExtendedWrite ? L"x14:cfvo" : L"cfvo";
|
||||
|
||||
writer.WriteString(L"<" + node_name);
|
||||
WritingStringAttrString(L"type", m_oType->ToString());
|
||||
if (m_oGte.IsInit() && false == m_oGte->ToBool())
|
||||
writer.WriteString(L" gte=\"0\"");
|
||||
WritingStringNullableAttrEncodeXmlString(L"val", m_oVal, m_oVal.get());
|
||||
writer.WriteString(L"/>");
|
||||
}
|
||||
writer.WriteString(L">");
|
||||
|
||||
if (m_oFormula.IsInit())
|
||||
m_oFormula->toXML2(writer, bExtendedWrite);
|
||||
|
||||
writer.WriteString(L"</" + node_name + L">");
|
||||
}
|
||||
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
|
||||
{
|
||||
@ -150,7 +169,6 @@ namespace OOX
|
||||
m_oFormula = oReader;
|
||||
}
|
||||
}
|
||||
|
||||
virtual EElementType getType () const
|
||||
{
|
||||
return et_x_ConditionalFormatValueObject;
|
||||
@ -161,11 +179,9 @@ namespace OOX
|
||||
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
|
||||
{
|
||||
WritingElement_ReadAttributes_Start(oReader)
|
||||
|
||||
WritingElement_ReadAttributes_Read_if (oReader, L"gte" , m_oGte)
|
||||
WritingElement_ReadAttributes_Read_else_if (oReader, L"type" , m_oType)
|
||||
WritingElement_ReadAttributes_Read_else_if (oReader, L"val" , m_oVal)
|
||||
|
||||
WritingElement_ReadAttributes_Read_if (oReader, L"gte" , m_oGte)
|
||||
WritingElement_ReadAttributes_Read_else_if (oReader, L"type" , m_oType)
|
||||
WritingElement_ReadAttributes_Read_else_if (oReader, L"val" , m_oVal)
|
||||
WritingElement_ReadAttributes_End(oReader)
|
||||
}
|
||||
|
||||
@ -196,10 +212,16 @@ namespace OOX
|
||||
}
|
||||
virtual void toXML(NSStringUtils::CStringBuilder& writer) const
|
||||
{
|
||||
writer.WriteString(L"<cfIcon>");
|
||||
toXML2(writer, false);
|
||||
}
|
||||
void toXML2(NSStringUtils::CStringBuilder& writer, bool bExtendedWrite) const
|
||||
{
|
||||
if (!bExtendedWrite) return;
|
||||
|
||||
writer.WriteString(L"<x14:cfIcon>");
|
||||
WritingStringNullableAttrString(L"iconSet", m_oIconSet, m_oIconSet->ToString())
|
||||
WritingStringNullableAttrInt(L"iconId", m_oIconId, m_oIconId->GetValue())
|
||||
writer.WriteString(L"</cfIcon>");
|
||||
writer.WriteString(L"</x14:cfIcon>");
|
||||
}
|
||||
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
|
||||
{
|
||||
@ -244,6 +266,10 @@ namespace OOX
|
||||
return L"";
|
||||
}
|
||||
virtual void toXML(NSStringUtils::CStringBuilder& writer) const
|
||||
{
|
||||
toXML2(writer, false);
|
||||
}
|
||||
void toXML2(NSStringUtils::CStringBuilder& writer, bool bExtendedWrite) const
|
||||
{
|
||||
if (1 < m_arrValues.size() && 1 < m_arrColors.size()) // min 2 + 2
|
||||
{
|
||||
@ -254,7 +280,7 @@ namespace OOX
|
||||
{
|
||||
if ( m_arrValues[i].IsInit() )
|
||||
{
|
||||
m_arrValues[i]->toXML(writer);
|
||||
m_arrValues[i]->toXML2(writer, bExtendedWrite);
|
||||
}
|
||||
//if ( (i < m_arrColors.size()) && (m_arrColors[i].IsInit()) )
|
||||
//{
|
||||
@ -334,7 +360,10 @@ namespace OOX
|
||||
}
|
||||
return oColorScale;
|
||||
}
|
||||
|
||||
bool isExtended ()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
std::vector<nullable<CConditionalFormatValueObject>> m_arrValues;
|
||||
std::vector<nullable<CColor>> m_arrColors;
|
||||
};
|
||||
@ -356,33 +385,73 @@ namespace OOX
|
||||
{
|
||||
return L"";
|
||||
}
|
||||
bool isExtended ()
|
||||
{
|
||||
if (m_oAxisColor.IsInit() || m_oAxisPosition.IsInit() || m_oDirection.IsInit() || m_oBorderColor.IsInit()
|
||||
|| m_oNegativeFillColor.IsInit() || m_oNegativeBorderColor.IsInit()
|
||||
|| m_oNegativeBarColorSameAsPositive.IsInit() || m_oNegativeBarBorderColorSameAsPositive.IsInit())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
virtual void toXML(NSStringUtils::CStringBuilder& writer) const
|
||||
{
|
||||
if (2 == m_arrValues.size() && m_oColor.IsInit())
|
||||
{
|
||||
std::wstring sValue;
|
||||
writer.WriteString(L"<dataBar");
|
||||
toXML2(writer, false);
|
||||
}
|
||||
void toXML2(NSStringUtils::CStringBuilder& writer, bool bExtendedWrite) const
|
||||
{
|
||||
if (2 != m_arrValues.size() || false == m_oColor.IsInit()) return;
|
||||
|
||||
std::wstring node_name = bExtendedWrite ? L"x14:dataBar" : L"dataBar";
|
||||
|
||||
writer.WriteString(L"<" + node_name);
|
||||
WritingStringNullableAttrInt(L"maxLength", m_oMaxLength, m_oMaxLength->GetValue());
|
||||
WritingStringNullableAttrInt(L"minLength", m_oMinLength, m_oMinLength->GetValue());
|
||||
if (m_oShowValue.IsInit() && false == m_oShowValue->ToBool())
|
||||
{
|
||||
writer.WriteString(L" showValue=\"0\"");
|
||||
}
|
||||
if (bExtendedWrite)
|
||||
{
|
||||
if (m_oBorderColor.IsInit()) writer.WriteString(L" border=\"1\"");
|
||||
WritingStringNullableAttrString(L"axisPosition", m_oAxisPosition, m_oAxisPosition->ToString())
|
||||
WritingStringNullableAttrString(L"direction", m_oDirection, m_oDirection->ToString())
|
||||
|
||||
if (m_oGradient.IsInit() && false == m_oGradient->ToBool())
|
||||
{
|
||||
writer.WriteString(L" gradient=\"0\"");
|
||||
}
|
||||
if (m_oNegativeBarColorSameAsPositive.IsInit() && true == m_oNegativeBarColorSameAsPositive->ToBool())
|
||||
{
|
||||
writer.WriteString(L" negativeBarColorSameAsPositive=\"1\"");
|
||||
}
|
||||
if (m_oNegativeBarBorderColorSameAsPositive.IsInit() && false == m_oNegativeBarBorderColorSameAsPositive->ToBool())
|
||||
{
|
||||
writer.WriteString(L" negativeBarBorderColorSameAsPositive=\"0\"");
|
||||
}
|
||||
}
|
||||
writer.WriteString(L">");
|
||||
|
||||
writer.WriteString(L">");
|
||||
|
||||
for ( size_t i = 0; i < m_arrValues.size(); ++i)
|
||||
for ( size_t i = 0; i < m_arrValues.size(); ++i)
|
||||
{
|
||||
if ( m_arrValues[i].IsInit() )
|
||||
{
|
||||
if ( m_arrValues[i].IsInit() )
|
||||
{
|
||||
m_arrValues[i]->toXML(writer);
|
||||
}
|
||||
m_arrValues[i]->toXML2(writer, bExtendedWrite);
|
||||
}
|
||||
}
|
||||
|
||||
m_oColor->toXML2(writer, L"color");
|
||||
m_oColor->toXML2(writer, bExtendedWrite ? L"x14:fillColor" : L"color");
|
||||
|
||||
writer.WriteString(L"</dataBar>");
|
||||
if (bExtendedWrite)
|
||||
{
|
||||
if (m_oBorderColor.IsInit()) m_oBorderColor->toXML2(writer, L"x14:borderColor");
|
||||
if (m_oNegativeFillColor.IsInit()) m_oNegativeFillColor->toXML2(writer, L"x14:negativeFillColor");
|
||||
if (m_oNegativeBorderColor.IsInit())m_oNegativeBorderColor->toXML2(writer, L"x14:negativeBorderColor");
|
||||
if (m_oAxisColor.IsInit()) m_oAxisColor->toXML2(writer, L"x14:axisColor");
|
||||
}
|
||||
|
||||
writer.WriteString(L"</" + node_name + L">");
|
||||
}
|
||||
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
|
||||
{
|
||||
@ -438,6 +507,7 @@ namespace OOX
|
||||
oDataBar.m_oGradient = Merge( oPrev.m_oGradient, oCurrent.m_oGradient );
|
||||
oDataBar.m_oDirection = Merge( oPrev.m_oDirection, oCurrent.m_oDirection );
|
||||
oDataBar.m_oNegativeBarColorSameAsPositive = Merge( oPrev.m_oNegativeBarColorSameAsPositive, oCurrent.m_oNegativeBarColorSameAsPositive );
|
||||
oDataBar.m_oNegativeBarBorderColorSameAsPositive = Merge( oPrev.m_oNegativeBarBorderColorSameAsPositive, oCurrent.m_oNegativeBarBorderColorSameAsPositive );
|
||||
|
||||
oDataBar.m_oColor = Merge( oPrev.m_oColor, oCurrent.m_oColor );
|
||||
oDataBar.m_oAxisColor = Merge( oPrev.m_oAxisColor, oCurrent.m_oAxisColor );
|
||||
@ -462,17 +532,16 @@ namespace OOX
|
||||
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
|
||||
{
|
||||
WritingElement_ReadAttributes_Start(oReader)
|
||||
WritingElement_ReadAttributes_Read_if (oReader, L"maxLength" , m_oMaxLength)
|
||||
WritingElement_ReadAttributes_Read_else_if (oReader, L"minLength" , m_oMinLength)
|
||||
WritingElement_ReadAttributes_Read_else_if (oReader, L"showValue" , m_oShowValue)
|
||||
|
||||
WritingElement_ReadAttributes_Read_if (oReader, L"maxLength" , m_oMaxLength)
|
||||
WritingElement_ReadAttributes_Read_else_if (oReader, L"minLength" , m_oMinLength)
|
||||
WritingElement_ReadAttributes_Read_else_if (oReader, L"showValue" , m_oShowValue)
|
||||
|
||||
WritingElement_ReadAttributes_Read_else_if (oReader, L"axisPosition", m_oAxisPosition)
|
||||
WritingElement_ReadAttributes_Read_else_if (oReader, L"border" , m_oBorder)
|
||||
WritingElement_ReadAttributes_Read_else_if (oReader, L"gradient" , m_oGradient)
|
||||
WritingElement_ReadAttributes_Read_else_if (oReader, L"direction" , m_oDirection)
|
||||
WritingElement_ReadAttributes_Read_else_if (oReader, L"negativeBarColorSameAsPositive" , m_oNegativeBarColorSameAsPositive)
|
||||
|
||||
WritingElement_ReadAttributes_Read_else_if (oReader, L"axisPosition", m_oAxisPosition)
|
||||
WritingElement_ReadAttributes_Read_else_if (oReader, L"border" , m_oBorder)
|
||||
WritingElement_ReadAttributes_Read_else_if (oReader, L"gradient" , m_oGradient)
|
||||
WritingElement_ReadAttributes_Read_else_if (oReader, L"direction" , m_oDirection)
|
||||
WritingElement_ReadAttributes_Read_else_if (oReader, L"negativeBarColorSameAsPositive", m_oNegativeBarColorSameAsPositive)
|
||||
WritingElement_ReadAttributes_Read_else_if (oReader, L"negativeBarBorderColorSameAsPositive", m_oNegativeBarBorderColorSameAsPositive)
|
||||
WritingElement_ReadAttributes_End(oReader)
|
||||
}
|
||||
|
||||
@ -484,12 +553,14 @@ namespace OOX
|
||||
nullable<CColor> m_oColor;
|
||||
|
||||
std::vector<nullable<CConditionalFormatValueObject>> m_arrValues;
|
||||
|
||||
//---ext-----------
|
||||
nullable<SimpleTypes::Spreadsheet::ST_DataBarAxisPosition<>> m_oAxisPosition;
|
||||
nullable<SimpleTypes::Spreadsheet::ST_DataBarDirection<>> m_oDirection;
|
||||
nullable<SimpleTypes::COnOff<>> m_oBorder;
|
||||
nullable<SimpleTypes::COnOff<>> m_oGradient;
|
||||
nullable<SimpleTypes::COnOff<>> m_oNegativeBarColorSameAsPositive;
|
||||
nullable<SimpleTypes::COnOff<>> m_oNegativeBarBorderColorSameAsPositive;
|
||||
|
||||
nullable<CColor> m_oAxisColor;
|
||||
nullable<CColor> m_oBorderColor;
|
||||
@ -517,45 +588,50 @@ namespace OOX
|
||||
}
|
||||
virtual void toXML(NSStringUtils::CStringBuilder& writer) const
|
||||
{
|
||||
if (1 < m_arrValues.size()) // min value = 2
|
||||
{
|
||||
std::wstring sValue;
|
||||
writer.WriteString(L"<iconSet");
|
||||
WritingStringNullableAttrString(L"iconSet", m_oIconSet, m_oIconSet->ToString())
|
||||
if (m_oPercent.IsInit() && false == m_oPercent->ToBool())
|
||||
{
|
||||
writer.WriteString(L" percent=\"0\"");
|
||||
}
|
||||
if (m_oReverse.IsInit() && true == m_oReverse->ToBool())
|
||||
{
|
||||
writer.WriteString(L" reverse=\"1\"");
|
||||
}
|
||||
if (m_oShowValue.IsInit() && false == m_oShowValue->ToBool())
|
||||
{
|
||||
writer.WriteString(L" showValue=\"0\"");
|
||||
}
|
||||
if (m_oCustom.IsInit() && true == m_oCustom->ToBool())
|
||||
{
|
||||
writer.WriteString(L" custom=\"1\"");
|
||||
}
|
||||
writer.WriteString(L">");
|
||||
toXML2(writer, false);
|
||||
}
|
||||
void toXML2(NSStringUtils::CStringBuilder& writer, bool bExtendedWrite) const
|
||||
{
|
||||
if (m_arrValues.size() < 2) return; // min value = 2
|
||||
|
||||
for ( size_t i = 0; i < m_arrValues.size(); ++i)
|
||||
{
|
||||
if ( m_arrValues[i].IsInit() )
|
||||
{
|
||||
m_arrValues[i]->toXML(writer);
|
||||
}
|
||||
}
|
||||
for ( size_t i = 0; i < m_arrIconSets.size(); ++i)
|
||||
{
|
||||
if ( m_arrIconSets[i].IsInit() )
|
||||
{
|
||||
m_arrIconSets[i]->toXML(writer);
|
||||
}
|
||||
}
|
||||
writer.WriteString(L"</iconSet>");
|
||||
std::wstring node_name = bExtendedWrite ? L"x14:iconSet" : L"iconSet";
|
||||
|
||||
std::wstring sValue;
|
||||
writer.WriteString(L"<" + node_name);
|
||||
WritingStringNullableAttrString(L"iconSet", m_oIconSet, m_oIconSet->ToString())
|
||||
if (m_oPercent.IsInit() && false == m_oPercent->ToBool())
|
||||
{
|
||||
writer.WriteString(L" percent=\"0\"");
|
||||
}
|
||||
if (m_oReverse.IsInit() && true == m_oReverse->ToBool())
|
||||
{
|
||||
writer.WriteString(L" reverse=\"1\"");
|
||||
}
|
||||
if (m_oShowValue.IsInit() && false == m_oShowValue->ToBool())
|
||||
{
|
||||
writer.WriteString(L" showValue=\"0\"");
|
||||
}
|
||||
if (bExtendedWrite && false == m_arrIconSets.empty())
|
||||
{
|
||||
writer.WriteString(L" custom=\"1\"");
|
||||
}
|
||||
writer.WriteString(L">");
|
||||
|
||||
for ( size_t i = 0; i < m_arrValues.size(); ++i)
|
||||
{
|
||||
if ( m_arrValues[i].IsInit() )
|
||||
{
|
||||
m_arrValues[i]->toXML2(writer, bExtendedWrite);
|
||||
}
|
||||
}
|
||||
for ( size_t i = 0; bExtendedWrite && i < m_arrIconSets.size(); ++i)
|
||||
{
|
||||
if ( m_arrIconSets[i].IsInit() )
|
||||
{
|
||||
m_arrIconSets[i]->toXML2(writer, bExtendedWrite);
|
||||
}
|
||||
}
|
||||
writer.WriteString(L"</" + node_name + L">");
|
||||
}
|
||||
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
|
||||
{
|
||||
@ -628,6 +704,10 @@ namespace OOX
|
||||
}
|
||||
return oIconSet;
|
||||
}
|
||||
bool isExtended ()
|
||||
{
|
||||
return (false == m_arrIconSets.empty());
|
||||
}
|
||||
private:
|
||||
|
||||
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
|
||||
@ -672,11 +752,28 @@ namespace OOX
|
||||
{
|
||||
return L"";
|
||||
}
|
||||
bool isExtended()
|
||||
{
|
||||
if (m_oDxf.IsInit()) return true;
|
||||
|
||||
if (m_oDataBar.IsInit()) return m_oDataBar->isExtended();
|
||||
if (m_oIconSet.IsInit()) return m_oIconSet->isExtended();
|
||||
if (m_oColorScale.IsInit()) return m_oColorScale->isExtended();
|
||||
if (m_oFormula.IsInit()) return m_oFormula->isExtended();
|
||||
|
||||
return false;
|
||||
}
|
||||
virtual void toXML(NSStringUtils::CStringBuilder& writer) const
|
||||
{
|
||||
if (isValid())
|
||||
{
|
||||
writer.WriteString(L"<cfRule");
|
||||
toXML2(writer, false);
|
||||
}
|
||||
void toXML2(NSStringUtils::CStringBuilder& writer, bool bExtendedWrite) const
|
||||
{
|
||||
if (false == isValid()) return;
|
||||
|
||||
std::wstring node_name = bExtendedWrite ? L"x14:cfRule" : L"cfRule";
|
||||
|
||||
writer.WriteString(L"<" + node_name);
|
||||
WritingStringAttrString(L"type", m_oType->ToString());
|
||||
WritingStringAttrInt(L"priority", m_oPriority->GetValue());
|
||||
if (m_oAboveAverage.IsInit() && false == m_oAboveAverage->ToBool())
|
||||
@ -695,20 +792,18 @@ namespace OOX
|
||||
writer.WriteString(L" stopIfTrue=\"1\"");
|
||||
WritingStringNullableAttrEncodeXmlString(L"text", m_oText, m_oText.get());
|
||||
WritingStringNullableAttrString(L"timePeriod", m_oTimePeriod, m_oTimePeriod.get());
|
||||
writer.WriteString(L">");
|
||||
|
||||
writer.WriteString(L">");
|
||||
if (m_oIconSet.IsInit())
|
||||
m_oIconSet->toXML2(writer, bExtendedWrite);
|
||||
if (m_oColorScale.IsInit())
|
||||
m_oColorScale->toXML2(writer, bExtendedWrite);
|
||||
if (m_oDataBar.IsInit())
|
||||
m_oDataBar->toXML2(writer, bExtendedWrite);
|
||||
if (m_oFormula.IsInit())
|
||||
m_oFormula->toXML2(writer, bExtendedWrite);
|
||||
|
||||
if (m_oIconSet.IsInit())
|
||||
m_oIconSet->toXML(writer);
|
||||
if (m_oColorScale.IsInit())
|
||||
m_oColorScale->toXML(writer);
|
||||
if (m_oDataBar.IsInit())
|
||||
m_oDataBar->toXML(writer);
|
||||
if (m_oFormula.IsInit())
|
||||
m_oFormula->toXML(writer);
|
||||
|
||||
writer.WriteString(L"</cfRule>");
|
||||
}
|
||||
writer.WriteString(L"</" + node_name + L">");
|
||||
}
|
||||
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
|
||||
{
|
||||
@ -868,7 +963,7 @@ namespace OOX
|
||||
{
|
||||
public:
|
||||
WritingElement_AdditionConstructors(CConditionalFormatting)
|
||||
CConditionalFormatting()
|
||||
CConditionalFormatting() : m_bIsExtended(false), m_bIsValid(false)
|
||||
{
|
||||
}
|
||||
virtual ~CConditionalFormatting()
|
||||
@ -881,41 +976,66 @@ namespace OOX
|
||||
{
|
||||
return L"";
|
||||
}
|
||||
virtual void toXML(NSStringUtils::CStringBuilder& writer) const
|
||||
bool IsExtended()
|
||||
{
|
||||
bool isValid = false;
|
||||
m_bIsExtended = false;
|
||||
m_bIsValid = false;
|
||||
|
||||
if (m_oSqRef.IsInit() == false) return m_bIsExtended;
|
||||
|
||||
m_bIsValid = true;
|
||||
|
||||
for ( size_t i = 0; i < m_arrItems.size(); ++i)
|
||||
{
|
||||
if ( (m_arrItems[i]) && (m_arrItems[i]->isValid()) )
|
||||
{
|
||||
isValid = true;
|
||||
break;
|
||||
}
|
||||
if ( !m_arrItems[i]) continue;
|
||||
|
||||
if (m_arrItems[i]->isValid() == false)
|
||||
m_bIsValid = false;
|
||||
if (m_arrItems[i]->isExtended() == true)
|
||||
m_bIsExtended = true;
|
||||
}
|
||||
if (m_oSqRef.IsInit() && isValid)
|
||||
{
|
||||
writer.WriteString(L"<conditionalFormatting");
|
||||
WritingStringAttrString(L"sqref", m_oSqRef.get());
|
||||
return m_bIsExtended;
|
||||
}
|
||||
virtual void toXML(NSStringUtils::CStringBuilder& writer) const
|
||||
{
|
||||
if (m_bIsValid == false) return;
|
||||
|
||||
if (m_bIsExtended == false)
|
||||
toXML2(writer, false);
|
||||
}
|
||||
void toXML2(NSStringUtils::CStringBuilder& writer, bool bExtendedWrite) const
|
||||
{
|
||||
std::wstring node_name = bExtendedWrite ? L"x14:conditionalFormatting" : L"conditionalFormatting";
|
||||
|
||||
writer.WriteString(L"<" + node_name);
|
||||
if (bExtendedWrite)
|
||||
{
|
||||
WritingStringAttrString(L"xmlns:xm", L"http://schemas.microsoft.com/office/excel/2006/main");
|
||||
}
|
||||
else
|
||||
{
|
||||
WritingStringAttrString(L"sqref", m_oSqRef.get());
|
||||
}
|
||||
if (m_oPivot.IsInit() && true == m_oPivot->ToBool())
|
||||
{
|
||||
writer.WriteString(L" pivot=\"1\"");
|
||||
}
|
||||
|
||||
writer.WriteString(L">");
|
||||
|
||||
for ( size_t i = 0; i < m_arrItems.size(); ++i)
|
||||
writer.WriteString(L">");
|
||||
|
||||
for ( size_t i = 0; i < m_arrItems.size(); ++i)
|
||||
{
|
||||
if ( m_arrItems[i] )
|
||||
{
|
||||
if ( m_arrItems[i] )
|
||||
{
|
||||
m_arrItems[i]->toXML(writer);
|
||||
}
|
||||
m_arrItems[i]->toXML2(writer, bExtendedWrite);
|
||||
}
|
||||
|
||||
writer.WriteString(L"</conditionalFormatting>");
|
||||
}
|
||||
if (bExtendedWrite)
|
||||
{
|
||||
writer.WriteString(L"<xm:sqref>" + m_oSqRef.get() + L"</xm:sqref>");
|
||||
}
|
||||
writer.WriteString(L"</" + node_name + L">");
|
||||
}
|
||||
|
||||
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
|
||||
{
|
||||
ReadAttributes(oReader);
|
||||
@ -959,9 +1079,13 @@ namespace OOX
|
||||
|
||||
WritingElement_ReadAttributes_End(oReader)
|
||||
}
|
||||
|
||||
mutable bool m_bIsExtended;
|
||||
mutable bool m_bIsValid;
|
||||
public:
|
||||
nullable<SimpleTypes::COnOff<>> m_oPivot;
|
||||
nullable<std::wstring > m_oSqRef; // ToDo переделать на тип "sqref" (18.18.76) - последовательность "ref", разделенные пробелом
|
||||
|
||||
nullable<SimpleTypes::COnOff<>> m_oPivot;
|
||||
nullable<std::wstring > m_oSqRef; // ToDo переделать на тип "sqref" (18.18.76) - последовательность "ref", разделенные пробелом
|
||||
};
|
||||
} //Spreadsheet
|
||||
} // namespace OOX
|
||||
|
||||
@ -739,7 +739,8 @@ namespace BinXlsxRW
|
||||
AxisPosition = 9,
|
||||
Direction = 10,
|
||||
GradientEnabled = 11,
|
||||
NegativeBarColorSameAsPositive = 12
|
||||
NegativeBarColorSameAsPositive = 12,
|
||||
NegativeBarBorderColorSameAsPositive = 13
|
||||
};}
|
||||
namespace c_oSer_ConditionalFormattingIconSet{enum c_oSer_ConditionalFormattingIconSet
|
||||
{
|
||||
|
||||
@ -4349,6 +4349,12 @@ namespace BinXlsxRW
|
||||
m_oBcw.m_oStream.WriteBOOL(oDataBar.m_oNegativeBarColorSameAsPositive->ToBool());
|
||||
m_oBcw.WriteItemEnd(nCurPos);
|
||||
}
|
||||
if (oDataBar.m_oNegativeBarBorderColorSameAsPositive.IsInit())
|
||||
{
|
||||
nCurPos = m_oBcw.WriteItemStart(c_oSer_ConditionalFormattingDataBar::NegativeBarBorderColorSameAsPositive);
|
||||
m_oBcw.m_oStream.WriteBOOL(oDataBar.m_oNegativeBarBorderColorSameAsPositive->ToBool());
|
||||
m_oBcw.WriteItemEnd(nCurPos);
|
||||
}
|
||||
if (oDataBar.m_oAxisPosition.IsInit())
|
||||
{
|
||||
nCurPos = m_oBcw.WriteItemStart(c_oSer_ConditionalFormattingDataBar::AxisPosition);
|
||||
|
||||
@ -2702,10 +2702,37 @@ namespace BinXlsxRW
|
||||
oMergeCells.m_oCount->SetValue((unsigned int)oMergeCells.m_arrItems.size());
|
||||
SEEK_TO_POS_END(oMergeCells);
|
||||
|
||||
OOX::Drawing::COfficeArtExtension* pOfficeArtExtensionCF = new OOX::Drawing::COfficeArtExtension();
|
||||
|
||||
SEEK_TO_POS_START(c_oSerWorksheetsTypes::ConditionalFormatting);
|
||||
OOX::Spreadsheet::CConditionalFormatting oConditionalFormatting;
|
||||
READ1_DEF(length, res, this->ReadConditionalFormatting, &oConditionalFormatting);
|
||||
SEEK_TO_POS_END(oConditionalFormatting);
|
||||
OOX::Spreadsheet::CConditionalFormatting *pConditionalFormatting = new OOX::Spreadsheet::CConditionalFormatting();
|
||||
READ1_DEF(length, res, this->ReadConditionalFormatting, pConditionalFormatting);
|
||||
|
||||
if (pConditionalFormatting->IsExtended())
|
||||
{
|
||||
pOfficeArtExtensionCF->m_arrConditionalFormatting.push_back(pConditionalFormatting);
|
||||
}
|
||||
else
|
||||
{
|
||||
pConditionalFormatting->toXML(oStreamWriter);
|
||||
delete pConditionalFormatting;
|
||||
}
|
||||
SEEK_TO_POS_END2();
|
||||
|
||||
if (pOfficeArtExtensionCF->m_arrConditionalFormatting.empty())
|
||||
{
|
||||
delete pOfficeArtExtensionCF;
|
||||
}
|
||||
else
|
||||
{
|
||||
pOfficeArtExtensionCF->m_sUri.Init();
|
||||
pOfficeArtExtensionCF->m_sUri = L"{78C0D931-6437-407d-A8EE-F0AAD7539E65}";
|
||||
pOfficeArtExtensionCF->m_sAdditionalNamespace = L"xmlns:x14=\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/main\"";
|
||||
|
||||
if (m_pCurWorksheet->m_oExtLst.IsInit() == false)
|
||||
m_pCurWorksheet->m_oExtLst.Init();
|
||||
m_pCurWorksheet->m_oExtLst->m_arrExt.push_back(pOfficeArtExtensionCF);
|
||||
}
|
||||
|
||||
SEEK_TO_POS_START(c_oSerWorksheetsTypes::Hyperlinks);
|
||||
OOX::Spreadsheet::CHyperlinks oHyperlinks;
|
||||
@ -2882,12 +2909,19 @@ namespace BinXlsxRW
|
||||
READ1_DEF(length, res, this->ReadSparklineGroups, pOfficeArtExtension->m_oSparklineGroups.GetPointer());
|
||||
|
||||
pOfficeArtExtension->m_sUri.Init();
|
||||
pOfficeArtExtension->m_sUri->append(_T("{05C60535-1F16-4fd2-B633-F4F36F0B64E0}"));
|
||||
pOfficeArtExtension->m_sAdditionalNamespace = _T("xmlns:x14=\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/main\"");
|
||||
OOX::Drawing::COfficeArtExtensionList oExtLst;
|
||||
oExtLst.m_arrExt.push_back(pOfficeArtExtension);
|
||||
oStreamWriter.WriteString(oExtLst.toXMLWithNS(_T("")));
|
||||
pOfficeArtExtension->m_sUri = L"{05C60535-1F16-4fd2-B633-F4F36F0B64E0}";
|
||||
pOfficeArtExtension->m_sAdditionalNamespace = L"xmlns:x14=\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/main\"";
|
||||
|
||||
if (m_pCurWorksheet->m_oExtLst.IsInit() == false)
|
||||
m_pCurWorksheet->m_oExtLst.Init();
|
||||
m_pCurWorksheet->m_oExtLst->m_arrExt.push_back(pOfficeArtExtension);
|
||||
|
||||
SEEK_TO_POS_END2();
|
||||
|
||||
if (m_pCurWorksheet->m_oExtLst.IsInit())
|
||||
{
|
||||
oStreamWriter.WriteString(m_pCurWorksheet->m_oExtLst->toXMLWithNS(L""));
|
||||
}
|
||||
|
||||
SEEK_TO_POS_START(c_oSerWorksheetsTypes::WorksheetProp);
|
||||
READ2_DEF_SPREADSHEET(length, res, this->ReadWorksheetProp, poResult);
|
||||
@ -2911,6 +2945,8 @@ namespace BinXlsxRW
|
||||
}
|
||||
SEEK_TO_POS_END2();
|
||||
|
||||
|
||||
|
||||
m_oBufferedStream.Seek(nOldPos);
|
||||
m_pCurWorksheet->toXMLEnd(oStreamWriter);
|
||||
return res;
|
||||
@ -4416,6 +4452,11 @@ namespace BinXlsxRW
|
||||
pDataBar->m_oNegativeBarColorSameAsPositive.Init();
|
||||
pDataBar->m_oNegativeBarColorSameAsPositive->FromBool(m_oBufferedStream.GetBool());
|
||||
}
|
||||
else if(c_oSer_ConditionalFormattingDataBar::NegativeBarBorderColorSameAsPositive == type)
|
||||
{
|
||||
pDataBar->m_oNegativeBarBorderColorSameAsPositive.Init();
|
||||
pDataBar->m_oNegativeBarBorderColorSameAsPositive->FromBool(m_oBufferedStream.GetBool());
|
||||
}
|
||||
else if(c_oSer_ConditionalFormattingDataBar::AxisPosition == type)
|
||||
{
|
||||
pDataBar->m_oAxisPosition.Init();
|
||||
|
||||
Reference in New Issue
Block a user