This commit is contained in:
ElenaSubbotina
2019-02-18 17:38:05 +03:00
parent a8668df5fd
commit ccbc044f11
6 changed files with 314 additions and 133 deletions

View File

@ -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>";

View File

@ -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;
}

View File

@ -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

View File

@ -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
{

View File

@ -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);

View File

@ -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();