From b6a4ddf4d8c45030dbe3fc68b51f9366109041bd Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Wed, 29 Jul 2020 16:13:12 +0200 Subject: loplugin:flatten in sc/filter/xml Change-Id: I93117f601a8f450ebfcde32c156802137b87da76 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/99701 Tested-by: Jenkins Reviewed-by: Noel Grandin --- .../filter/xml/XMLCalculationSettingsContext.cxx | 172 +-- sc/source/filter/xml/XMLCellRangeSourceContext.cxx | 80 +- .../filter/xml/XMLChangeTrackingExportHelper.cxx | 140 +- .../filter/xml/XMLChangeTrackingImportHelper.cxx | 324 ++--- sc/source/filter/xml/XMLConsolidationContext.cxx | 110 +- sc/source/filter/xml/XMLConverter.cxx | 101 +- sc/source/filter/xml/XMLDDELinksContext.cxx | 170 +-- sc/source/filter/xml/XMLDetectiveContext.cxx | 44 +- sc/source/filter/xml/XMLExportDDELinks.cxx | 64 +- sc/source/filter/xml/XMLExportDataPilot.cxx | 452 +++--- sc/source/filter/xml/XMLExportIterator.cxx | 128 +- sc/source/filter/xml/XMLStylesExportHelper.cxx | 310 ++--- sc/source/filter/xml/XMLTableMasterPageExport.cxx | 74 +- sc/source/filter/xml/XMLTableShapeResizer.cxx | 76 +- sc/source/filter/xml/XMLTableSourceContext.cxx | 100 +- sc/source/filter/xml/XMLTrackedChangesContext.cxx | 44 +- sc/source/filter/xml/datastreamimport.cxx | 50 +- sc/source/filter/xml/xmlbodyi.cxx | 46 +- sc/source/filter/xml/xmlcelli.cxx | 272 ++-- sc/source/filter/xml/xmlcoli.cxx | 48 +- sc/source/filter/xml/xmlcondformat.cxx | 28 +- sc/source/filter/xml/xmlcvali.cxx | 260 ++-- sc/source/filter/xml/xmldpimp.cxx | 534 +++---- sc/source/filter/xml/xmldrani.cxx | 112 +- sc/source/filter/xml/xmlexprt.cxx | 1464 ++++++++++---------- sc/source/filter/xml/xmlexternaltabi.cxx | 172 +-- sc/source/filter/xml/xmlfilti.cxx | 246 ++-- sc/source/filter/xml/xmlfonte.cxx | 72 +- sc/source/filter/xml/xmlimprt.cxx | 460 +++--- sc/source/filter/xml/xmllabri.cxx | 28 +- sc/source/filter/xml/xmlrowi.cxx | 128 +- sc/source/filter/xml/xmlsceni.cxx | 108 +- sc/source/filter/xml/xmlsorti.cxx | 130 +- sc/source/filter/xml/xmlstyle.cxx | 152 +- sc/source/filter/xml/xmlsubti.cxx | 136 +- sc/source/filter/xml/xmltransformationi.cxx | 168 +-- 36 files changed, 3502 insertions(+), 3501 deletions(-) diff --git a/sc/source/filter/xml/XMLCalculationSettingsContext.cxx b/sc/source/filter/xml/XMLCalculationSettingsContext.cxx index 9917eaaa0ba1..26161c092360 100644 --- a/sc/source/filter/xml/XMLCalculationSettingsContext.cxx +++ b/sc/source/filter/xml/XMLCalculationSettingsContext.cxx @@ -48,43 +48,43 @@ ScXMLCalculationSettingsContext::ScXMLCalculationSettingsContext( ScXMLImport& r aNullDate.Day = 30; aNullDate.Month = 12; aNullDate.Year = 1899; - if ( rAttrList.is() ) + if ( !rAttrList.is() ) + return; + + for (auto &aIter : *rAttrList) { - for (auto &aIter : *rAttrList) + switch (aIter.getToken()) { - switch (aIter.getToken()) - { - case XML_ELEMENT( TABLE, XML_CASE_SENSITIVE ): - if( IsXMLToken( aIter, XML_FALSE ) ) - bIgnoreCase = true; - break; - case XML_ELEMENT( TABLE, XML_PRECISION_AS_SHOWN ): - if( IsXMLToken( aIter, XML_TRUE ) ) - bCalcAsShown = true; - break; - case XML_ELEMENT( TABLE, XML_SEARCH_CRITERIA_MUST_APPLY_TO_WHOLE_CELL ): - if( IsXMLToken( aIter, XML_FALSE ) ) - bMatchWholeCell = false; - break; - case XML_ELEMENT( TABLE, XML_AUTOMATIC_FIND_LABELS ): - if( IsXMLToken( aIter, XML_FALSE ) ) - bLookUpLabels = false; - break; - case XML_ELEMENT( TABLE, XML_NULL_YEAR ): - sal_Int32 nTemp; - ::sax::Converter::convertNumber( nTemp, aIter.toString() ); - nYear2000 = static_cast(nTemp); - break; - case XML_ELEMENT( TABLE, XML_USE_REGULAR_EXPRESSIONS ): - // Overwrite only the default (regex true) value, not wildcard. - if( eSearchType == utl::SearchParam::SearchType::Regexp && IsXMLToken( aIter, XML_FALSE ) ) - eSearchType = utl::SearchParam::SearchType::Normal; - break; - case XML_ELEMENT( TABLE, XML_USE_WILDCARDS ): - if( IsXMLToken( aIter, XML_TRUE ) ) - eSearchType = utl::SearchParam::SearchType::Wildcard; - break; - } + case XML_ELEMENT( TABLE, XML_CASE_SENSITIVE ): + if( IsXMLToken( aIter, XML_FALSE ) ) + bIgnoreCase = true; + break; + case XML_ELEMENT( TABLE, XML_PRECISION_AS_SHOWN ): + if( IsXMLToken( aIter, XML_TRUE ) ) + bCalcAsShown = true; + break; + case XML_ELEMENT( TABLE, XML_SEARCH_CRITERIA_MUST_APPLY_TO_WHOLE_CELL ): + if( IsXMLToken( aIter, XML_FALSE ) ) + bMatchWholeCell = false; + break; + case XML_ELEMENT( TABLE, XML_AUTOMATIC_FIND_LABELS ): + if( IsXMLToken( aIter, XML_FALSE ) ) + bLookUpLabels = false; + break; + case XML_ELEMENT( TABLE, XML_NULL_YEAR ): + sal_Int32 nTemp; + ::sax::Converter::convertNumber( nTemp, aIter.toString() ); + nYear2000 = static_cast(nTemp); + break; + case XML_ELEMENT( TABLE, XML_USE_REGULAR_EXPRESSIONS ): + // Overwrite only the default (regex true) value, not wildcard. + if( eSearchType == utl::SearchParam::SearchType::Regexp && IsXMLToken( aIter, XML_FALSE ) ) + eSearchType = utl::SearchParam::SearchType::Normal; + break; + case XML_ELEMENT( TABLE, XML_USE_WILDCARDS ): + if( IsXMLToken( aIter, XML_TRUE ) ) + eSearchType = utl::SearchParam::SearchType::Wildcard; + break; } } } @@ -110,31 +110,31 @@ uno::Reference< xml::sax::XFastContextHandler > SAL_CALL ScXMLCalculationSetting void SAL_CALL ScXMLCalculationSettingsContext::endFastElement( sal_Int32 /*nElement*/ ) { - if (GetScImport().GetModel().is()) + if (!GetScImport().GetModel().is()) + return; + + uno::Reference xPropertySet (GetScImport().GetModel(), uno::UNO_QUERY); + if (!xPropertySet.is()) + return; + + xPropertySet->setPropertyValue( SC_UNO_CALCASSHOWN, uno::makeAny(bCalcAsShown) ); + xPropertySet->setPropertyValue( SC_UNO_IGNORECASE, uno::makeAny(bIgnoreCase) ); + xPropertySet->setPropertyValue( SC_UNO_LOOKUPLABELS, uno::makeAny(bLookUpLabels) ); + xPropertySet->setPropertyValue( SC_UNO_MATCHWHOLE, uno::makeAny(bMatchWholeCell) ); + bool bWildcards, bRegex; + utl::SearchParam::ConvertToBool( eSearchType, bWildcards, bRegex); + xPropertySet->setPropertyValue( SC_UNO_REGEXENABLED, uno::makeAny(bRegex) ); + xPropertySet->setPropertyValue( SC_UNO_WILDCARDSENABLED, uno::makeAny(bWildcards) ); + xPropertySet->setPropertyValue( SC_UNO_ITERENABLED, uno::makeAny(bIsIterationEnabled) ); + xPropertySet->setPropertyValue( SC_UNO_ITERCOUNT, uno::makeAny(nIterationCount) ); + xPropertySet->setPropertyValue( SC_UNO_ITEREPSILON, uno::makeAny(fIterationEpsilon) ); + xPropertySet->setPropertyValue( SC_UNO_NULLDATE, uno::makeAny(aNullDate) ); + if (GetScImport().GetDocument()) { - uno::Reference xPropertySet (GetScImport().GetModel(), uno::UNO_QUERY); - if (xPropertySet.is()) - { - xPropertySet->setPropertyValue( SC_UNO_CALCASSHOWN, uno::makeAny(bCalcAsShown) ); - xPropertySet->setPropertyValue( SC_UNO_IGNORECASE, uno::makeAny(bIgnoreCase) ); - xPropertySet->setPropertyValue( SC_UNO_LOOKUPLABELS, uno::makeAny(bLookUpLabels) ); - xPropertySet->setPropertyValue( SC_UNO_MATCHWHOLE, uno::makeAny(bMatchWholeCell) ); - bool bWildcards, bRegex; - utl::SearchParam::ConvertToBool( eSearchType, bWildcards, bRegex); - xPropertySet->setPropertyValue( SC_UNO_REGEXENABLED, uno::makeAny(bRegex) ); - xPropertySet->setPropertyValue( SC_UNO_WILDCARDSENABLED, uno::makeAny(bWildcards) ); - xPropertySet->setPropertyValue( SC_UNO_ITERENABLED, uno::makeAny(bIsIterationEnabled) ); - xPropertySet->setPropertyValue( SC_UNO_ITERCOUNT, uno::makeAny(nIterationCount) ); - xPropertySet->setPropertyValue( SC_UNO_ITEREPSILON, uno::makeAny(fIterationEpsilon) ); - xPropertySet->setPropertyValue( SC_UNO_NULLDATE, uno::makeAny(aNullDate) ); - if (GetScImport().GetDocument()) - { - ScXMLImport::MutexGuard aGuard(GetScImport()); - ScDocOptions aDocOptions (GetScImport().GetDocument()->GetDocOptions()); - aDocOptions.SetYear2000(nYear2000); - GetScImport().GetDocument()->SetDocOptions(aDocOptions); - } - } + ScXMLImport::MutexGuard aGuard(GetScImport()); + ScDocOptions aDocOptions (GetScImport().GetDocument()->GetDocOptions()); + aDocOptions.SetYear2000(nYear2000); + GetScImport().GetDocument()->SetDocOptions(aDocOptions); } } @@ -143,19 +143,19 @@ ScXMLNullDateContext::ScXMLNullDateContext( ScXMLImport& rImport, ScXMLCalculationSettingsContext* pCalcSet) : ScXMLImportContext( rImport ) { - if ( rAttrList.is() ) + if ( !rAttrList.is() ) + return; + + auto aIter( rAttrList->find( XML_ELEMENT( TABLE, XML_DATE_VALUE ) ) ); + if (aIter != rAttrList->end()) { - auto aIter( rAttrList->find( XML_ELEMENT( TABLE, XML_DATE_VALUE ) ) ); - if (aIter != rAttrList->end()) - { - util::DateTime aDateTime; - ::sax::Converter::parseDateTime(aDateTime, aIter.toString()); - util::Date aDate; - aDate.Day = aDateTime.Day; - aDate.Month = aDateTime.Month; - aDate.Year = aDateTime.Year; - pCalcSet->SetNullDate(aDate); - } + util::DateTime aDateTime; + ::sax::Converter::parseDateTime(aDateTime, aIter.toString()); + util::Date aDate; + aDate.Day = aDateTime.Day; + aDate.Month = aDateTime.Month; + aDate.Year = aDateTime.Year; + pCalcSet->SetNullDate(aDate); } } @@ -168,23 +168,23 @@ ScXMLIterationContext::ScXMLIterationContext( ScXMLImport& rImport, ScXMLCalculationSettingsContext* pCalcSet) : ScXMLImportContext( rImport ) { - if ( rAttrList.is() ) + if ( !rAttrList.is() ) + return; + + for (auto &aIter : *rAttrList) { - for (auto &aIter : *rAttrList) + switch (aIter.getToken()) { - switch (aIter.getToken()) - { - case XML_ELEMENT( TABLE, XML_STATUS ): - if (IsXMLToken(aIter, XML_ENABLE)) - pCalcSet->SetIterationStatus(true); - break; - case XML_ELEMENT( TABLE, XML_STEPS ): - pCalcSet->SetIterationCount(aIter.toInt32()); - break; - case XML_ELEMENT( TABLE, XML_MAXIMUM_DIFFERENCE ): - pCalcSet->SetIterationEpsilon( aIter.toDouble() ); - break; - } + case XML_ELEMENT( TABLE, XML_STATUS ): + if (IsXMLToken(aIter, XML_ENABLE)) + pCalcSet->SetIterationStatus(true); + break; + case XML_ELEMENT( TABLE, XML_STEPS ): + pCalcSet->SetIterationCount(aIter.toInt32()); + break; + case XML_ELEMENT( TABLE, XML_MAXIMUM_DIFFERENCE ): + pCalcSet->SetIterationEpsilon( aIter.toDouble() ); + break; } } } diff --git a/sc/source/filter/xml/XMLCellRangeSourceContext.cxx b/sc/source/filter/xml/XMLCellRangeSourceContext.cxx index 936f565c93a6..70608c430cb9 100644 --- a/sc/source/filter/xml/XMLCellRangeSourceContext.cxx +++ b/sc/source/filter/xml/XMLCellRangeSourceContext.cxx @@ -40,50 +40,50 @@ ScXMLCellRangeSourceContext::ScXMLCellRangeSourceContext( ScMyImpCellRangeSource* pCellRangeSource ) : ScXMLImportContext( rImport ) { - if ( rAttrList.is() ) + if ( !rAttrList.is() ) + return; + + for (auto &aIter : *rAttrList) { - for (auto &aIter : *rAttrList) + switch (aIter.getToken()) { - switch (aIter.getToken()) + case XML_ELEMENT( TABLE, XML_NAME ): + pCellRangeSource->sSourceStr = aIter.toString(); + break; + case XML_ELEMENT( TABLE, XML_FILTER_NAME ): + pCellRangeSource->sFilterName = aIter.toString(); + break; + case XML_ELEMENT( TABLE, XML_FILTER_OPTIONS ): + pCellRangeSource->sFilterOptions = aIter.toString(); + break; + case XML_ELEMENT( XLINK, XML_HREF ): + pCellRangeSource->sURL = GetScImport().GetAbsoluteReference(aIter.toString()); + break; + case XML_ELEMENT( TABLE, XML_LAST_COLUMN_SPANNED ): + { + sal_Int32 nValue; + if (::sax::Converter::convertNumber( nValue, aIter.toString(), 1 )) + pCellRangeSource->nColumns = nValue; + else + pCellRangeSource->nColumns = 1; + } + break; + case XML_ELEMENT( TABLE, XML_LAST_ROW_SPANNED ): + { + sal_Int32 nValue; + if (::sax::Converter::convertNumber( nValue, aIter.toString(), 1 )) + pCellRangeSource->nRows = nValue; + else + pCellRangeSource->nRows = 1; + } + break; + case XML_ELEMENT( TABLE, XML_REFRESH_DELAY ): { - case XML_ELEMENT( TABLE, XML_NAME ): - pCellRangeSource->sSourceStr = aIter.toString(); - break; - case XML_ELEMENT( TABLE, XML_FILTER_NAME ): - pCellRangeSource->sFilterName = aIter.toString(); - break; - case XML_ELEMENT( TABLE, XML_FILTER_OPTIONS ): - pCellRangeSource->sFilterOptions = aIter.toString(); - break; - case XML_ELEMENT( XLINK, XML_HREF ): - pCellRangeSource->sURL = GetScImport().GetAbsoluteReference(aIter.toString()); - break; - case XML_ELEMENT( TABLE, XML_LAST_COLUMN_SPANNED ): - { - sal_Int32 nValue; - if (::sax::Converter::convertNumber( nValue, aIter.toString(), 1 )) - pCellRangeSource->nColumns = nValue; - else - pCellRangeSource->nColumns = 1; - } - break; - case XML_ELEMENT( TABLE, XML_LAST_ROW_SPANNED ): - { - sal_Int32 nValue; - if (::sax::Converter::convertNumber( nValue, aIter.toString(), 1 )) - pCellRangeSource->nRows = nValue; - else - pCellRangeSource->nRows = 1; - } - break; - case XML_ELEMENT( TABLE, XML_REFRESH_DELAY ): - { - double fTime; - if (::sax::Converter::convertDuration( fTime, aIter.toString() )) - pCellRangeSource->nRefresh = std::max( static_cast(fTime * 86400.0), sal_Int32(0) ); - } - break; + double fTime; + if (::sax::Converter::convertDuration( fTime, aIter.toString() )) + pCellRangeSource->nRefresh = std::max( static_cast(fTime * 86400.0), sal_Int32(0) ); } + break; } } } diff --git a/sc/source/filter/xml/XMLChangeTrackingExportHelper.cxx b/sc/source/filter/xml/XMLChangeTrackingExportHelper.cxx index 1efca32d0efe..4a8af8b60dcd 100644 --- a/sc/source/filter/xml/XMLChangeTrackingExportHelper.cxx +++ b/sc/source/filter/xml/XMLChangeTrackingExportHelper.cxx @@ -503,64 +503,64 @@ void ScChangeTrackingExportHelper::AddDeletionAttributes(const ScChangeActionDel break; } rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_POSITION, OUString::number(nPosition)); - if (pDelAction->GetType() != SC_CAT_DELETE_TABS) + if (pDelAction->GetType() == SC_CAT_DELETE_TABS) + return; + + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_TABLE, OUString::number(nStartSheet)); + if (!(pDelAction->IsMultiDelete() && !pDelAction->GetDx() && !pDelAction->GetDy())) + return; + + const ScChangeAction* p = pDelAction->GetNext(); + sal_Int32 nSlavesCount (1); + while (p) { - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_TABLE, OUString::number(nStartSheet)); - if (pDelAction->IsMultiDelete() && !pDelAction->GetDx() && !pDelAction->GetDy()) + if (p->GetType() != pDelAction->GetType()) + break; + else { - const ScChangeAction* p = pDelAction->GetNext(); - sal_Int32 nSlavesCount (1); - while (p) + const ScChangeActionDel* pDel = static_cast(p); + if ( (pDel->GetDx() > pDelAction->GetDx() || pDel->GetDy() > pDelAction->GetDy()) && + pDel->GetBigRange() == pDelAction->GetBigRange() ) { - if (p->GetType() != pDelAction->GetType()) - break; - else - { - const ScChangeActionDel* pDel = static_cast(p); - if ( (pDel->GetDx() > pDelAction->GetDx() || pDel->GetDy() > pDelAction->GetDy()) && - pDel->GetBigRange() == pDelAction->GetBigRange() ) - { - ++nSlavesCount; - p = p->GetNext(); - } - else - break; - } + ++nSlavesCount; + p = p->GetNext(); } - - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_MULTI_DELETION_SPANNED, OUString::number(nSlavesCount)); + else + break; } } + + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_MULTI_DELETION_SPANNED, OUString::number(nSlavesCount)); } void ScChangeTrackingExportHelper::WriteCutOffs(const ScChangeActionDel* pAction) { const ScChangeActionIns* pCutOffIns = pAction->GetCutOffInsert(); const ScChangeActionDelMoveEntry* pLinkMove = pAction->GetFirstMoveEntry(); - if (pCutOffIns || pLinkMove) + if (!(pCutOffIns || pLinkMove)) + return; + + SvXMLElementExport aCutOffsElem (rExport, XML_NAMESPACE_TABLE, XML_CUT_OFFS, true, true); + if (pCutOffIns) + { + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_ID, GetChangeID(pCutOffIns->GetActionNumber())); + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_POSITION, OUString::number(pAction->GetCutOffCount())); + SvXMLElementExport aInsertCutOffElem (rExport, XML_NAMESPACE_TABLE, XML_INSERTION_CUT_OFF, true, true); + } + while (pLinkMove) { - SvXMLElementExport aCutOffsElem (rExport, XML_NAMESPACE_TABLE, XML_CUT_OFFS, true, true); - if (pCutOffIns) + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_ID, GetChangeID(pLinkMove->GetAction()->GetActionNumber())); + if (pLinkMove->GetCutOffFrom() == pLinkMove->GetCutOffTo()) { - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_ID, GetChangeID(pCutOffIns->GetActionNumber())); - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_POSITION, OUString::number(pAction->GetCutOffCount())); - SvXMLElementExport aInsertCutOffElem (rExport, XML_NAMESPACE_TABLE, XML_INSERTION_CUT_OFF, true, true); + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_POSITION, OUString::number(pLinkMove->GetCutOffFrom())); } - while (pLinkMove) + else { - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_ID, GetChangeID(pLinkMove->GetAction()->GetActionNumber())); - if (pLinkMove->GetCutOffFrom() == pLinkMove->GetCutOffTo()) - { - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_POSITION, OUString::number(pLinkMove->GetCutOffFrom())); - } - else - { - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_START_POSITION, OUString::number(pLinkMove->GetCutOffFrom())); - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_END_POSITION, OUString::number(pLinkMove->GetCutOffTo())); - } - SvXMLElementExport aMoveCutOffElem (rExport, XML_NAMESPACE_TABLE, XML_MOVEMENT_CUT_OFF, true, true); - pLinkMove = pLinkMove->GetNext(); + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_START_POSITION, OUString::number(pLinkMove->GetCutOffFrom())); + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_END_POSITION, OUString::number(pLinkMove->GetCutOffTo())); } + SvXMLElementExport aMoveCutOffElem (rExport, XML_NAMESPACE_TABLE, XML_MOVEMENT_CUT_OFF, true, true); + pLinkMove = pLinkMove->GetNext(); } } @@ -652,45 +652,45 @@ void ScChangeTrackingExportHelper::WorkWithChangeAction(ScChangeAction* pAction) void ScChangeTrackingExportHelper::CollectAutoStyles() { - if (pChangeTrack) + if (!pChangeTrack) + return; + + sal_uInt32 nCount (pChangeTrack->GetActionMax()); + if (!nCount) + return; + + ScChangeAction* pAction = pChangeTrack->GetFirst(); + CollectActionAutoStyles(pAction); + ScChangeAction* pLastAction = pChangeTrack->GetLast(); + while (pAction != pLastAction) { - sal_uInt32 nCount (pChangeTrack->GetActionMax()); - if (nCount) - { - ScChangeAction* pAction = pChangeTrack->GetFirst(); - CollectActionAutoStyles(pAction); - ScChangeAction* pLastAction = pChangeTrack->GetLast(); - while (pAction != pLastAction) - { - pAction = pAction->GetNext(); - CollectActionAutoStyles(pAction); - } - pAction = pChangeTrack->GetFirstGenerated(); - while (pAction) - { - CollectActionAutoStyles(pAction); - pAction = pAction->GetNext(); - } - } + pAction = pAction->GetNext(); + CollectActionAutoStyles(pAction); + } + pAction = pChangeTrack->GetFirstGenerated(); + while (pAction) + { + CollectActionAutoStyles(pAction); + pAction = pAction->GetNext(); } } void ScChangeTrackingExportHelper::CollectAndWriteChanges() { - if (pChangeTrack) + if (!pChangeTrack) + return; + + SvXMLElementExport aCangeListElem(rExport, XML_NAMESPACE_TABLE, XML_TRACKED_CHANGES, true, true); { - SvXMLElementExport aCangeListElem(rExport, XML_NAMESPACE_TABLE, XML_TRACKED_CHANGES, true, true); + ScChangeAction* pAction = pChangeTrack->GetFirst(); + if (pAction) { - ScChangeAction* pAction = pChangeTrack->GetFirst(); - if (pAction) + WorkWithChangeAction(pAction); + ScChangeAction* pLastAction = pChangeTrack->GetLast(); + while (pAction != pLastAction) { + pAction = pAction->GetNext(); WorkWithChangeAction(pAction); - ScChangeAction* pLastAction = pChangeTrack->GetLast(); - while (pAction != pLastAction) - { - pAction = pAction->GetNext(); - WorkWithChangeAction(pAction); - } } } } diff --git a/sc/source/filter/xml/XMLChangeTrackingImportHelper.cxx b/sc/source/filter/xml/XMLChangeTrackingImportHelper.cxx index a9a7cb3f126c..dc1a93a7c913 100644 --- a/sc/source/filter/xml/XMLChangeTrackingImportHelper.cxx +++ b/sc/source/filter/xml/XMLChangeTrackingImportHelper.cxx @@ -531,46 +531,46 @@ void ScXMLChangeTrackingImportHelper::SetDeletionDependencies(ScMyDelAction* pAc OSL_FAIL("no cut off insert action"); } } - if (!pAction->aMoveCutOffs.empty()) + if (pAction->aMoveCutOffs.empty()) + return; + + OSL_ENSURE(((pAction->nActionType == SC_CAT_DELETE_COLS) || + (pAction->nActionType == SC_CAT_DELETE_ROWS) || + (pAction->nActionType == SC_CAT_DELETE_TABS)), "wrong action type"); + for (auto it = pAction->aMoveCutOffs.crbegin(); it != pAction->aMoveCutOffs.crend(); ++it) { - OSL_ENSURE(((pAction->nActionType == SC_CAT_DELETE_COLS) || - (pAction->nActionType == SC_CAT_DELETE_ROWS) || - (pAction->nActionType == SC_CAT_DELETE_TABS)), "wrong action type"); - for (auto it = pAction->aMoveCutOffs.crbegin(); it != pAction->aMoveCutOffs.crend(); ++it) + const ScMyMoveCutOff & rCutOff = *it; + ScChangeAction* pChangeAction = pTrack->GetAction(rCutOff.nID); + if (pChangeAction && (pChangeAction->GetType() == SC_CAT_MOVE)) { - const ScMyMoveCutOff & rCutOff = *it; - ScChangeAction* pChangeAction = pTrack->GetAction(rCutOff.nID); - if (pChangeAction && (pChangeAction->GetType() == SC_CAT_MOVE)) - { - ScChangeActionMove* pMoveAction = static_cast(pChangeAction); - if (pDelAct) - pDelAct->AddCutOffMove(pMoveAction, static_cast(rCutOff.nStartPosition), - static_cast(rCutOff.nEndPosition)); - } - else - { - OSL_FAIL("no cut off move action"); - } + ScChangeActionMove* pMoveAction = static_cast(pChangeAction); + if (pDelAct) + pDelAct->AddCutOffMove(pMoveAction, static_cast(rCutOff.nStartPosition), + static_cast(rCutOff.nEndPosition)); + } + else + { + OSL_FAIL("no cut off move action"); } - pAction->aMoveCutOffs.clear(); } + pAction->aMoveCutOffs.clear(); } void ScXMLChangeTrackingImportHelper::SetMovementDependencies(ScMyMoveAction* pAction, ScChangeActionMove* pMoveAct) { - if (!pAction->aGeneratedList.empty()) + if (pAction->aGeneratedList.empty()) + return; + + if (pAction->nActionType == SC_CAT_MOVE) { - if (pAction->nActionType == SC_CAT_MOVE) + if (pMoveAct) { - if (pMoveAct) + for (const ScMyGenerated & rGenerated : pAction->aGeneratedList) { - for (const ScMyGenerated & rGenerated : pAction->aGeneratedList) - { - OSL_ENSURE(rGenerated.nID, "a not inserted generated action"); - pMoveAct->SetDeletedInThis(rGenerated.nID, pTrack); - } - pAction->aGeneratedList.clear(); + OSL_ENSURE(rGenerated.nID, "a not inserted generated action"); + pMoveAct->SetDeletedInThis(rGenerated.nID, pTrack); } + pAction->aGeneratedList.clear(); } } } @@ -648,169 +648,169 @@ void ScXMLChangeTrackingImportHelper::SetDependencies(ScMyBaseAction* pAction) void ScXMLChangeTrackingImportHelper::SetNewCell(const ScMyContentAction* pAction) { ScChangeAction* pChangeAction = pTrack->GetAction(pAction->nActionNumber); - if (pChangeAction) + if (!pChangeAction) + return; + + assert(dynamic_cast(pChangeAction)); + ScChangeActionContent* pChangeActionContent = static_cast(pChangeAction); + if (!(pChangeActionContent->IsTopContent() && !pChangeActionContent->IsDeletedIn())) + return; + + sal_Int32 nCol, nRow, nTab, nCol2, nRow2, nTab2; + pAction->aBigRange.GetVars(nCol, nRow, nTab, nCol2, nRow2, nTab2); + if ((nCol >= 0) && (nCol <= pDoc->MaxCol()) && + (nRow >= 0) && (nRow <= pDoc->MaxRow()) && + (nTab >= 0) && (nTab <= MAXTAB)) { - assert(dynamic_cast(pChangeAction)); - ScChangeActionContent* pChangeActionContent = static_cast(pChangeAction); - if (pChangeActionContent->IsTopContent() && !pChangeActionContent->IsDeletedIn()) + ScAddress aAddress (static_cast(nCol), + static_cast(nRow), + static_cast(nTab)); + ScCellValue aCell; + aCell.assign(*pDoc, aAddress); + if (!aCell.isEmpty()) { - sal_Int32 nCol, nRow, nTab, nCol2, nRow2, nTab2; - pAction->aBigRange.GetVars(nCol, nRow, nTab, nCol2, nRow2, nTab2); - if ((nCol >= 0) && (nCol <= pDoc->MaxCol()) && - (nRow >= 0) && (nRow <= pDoc->MaxRow()) && - (nTab >= 0) && (nTab <= MAXTAB)) + ScCellValue aNewCell; + if (aCell.meType != CELLTYPE_FORMULA) { - ScAddress aAddress (static_cast(nCol), - static_cast(nRow), - static_cast(nTab)); - ScCellValue aCell; - aCell.assign(*pDoc, aAddress); - if (!aCell.isEmpty()) - { - ScCellValue aNewCell; - if (aCell.meType != CELLTYPE_FORMULA) - { - aNewCell = aCell; - pChangeActionContent->SetNewCell(aNewCell, pDoc, EMPTY_OUSTRING); - pChangeActionContent->SetNewValue(aCell, pDoc); - } - else - { - ScMatrixMode nMatrixFlag = aCell.mpFormula->GetMatrixFlag(); - OUString sFormula; - // With GRAM_ODFF reference detection is faster on compilation. - /* FIXME: new cell should be created with a clone - * of the token array instead. Any reason why this - * wasn't done? */ - aCell.mpFormula->GetFormula(sFormula, formula::FormulaGrammar::GRAM_ODFF); - - // #i87826# [Collaboration] Rejected move destroys formulas - // FIXME: adjust ScFormulaCell::GetFormula(), so that the right formula string - // is returned and no further string handling is necessary - OUString sFormula2; - if ( nMatrixFlag != ScMatrixMode::NONE ) - { - sFormula2 = sFormula.copy( 2, sFormula.getLength() - 3 ); - } - else - { - sFormula2 = sFormula.copy( 1 ); - } - - aNewCell.meType = CELLTYPE_FORMULA; - aNewCell.mpFormula = new ScFormulaCell(pDoc, aAddress, sFormula2,formula::FormulaGrammar::GRAM_ODFF, nMatrixFlag); - if (nMatrixFlag == ScMatrixMode::Formula) - { - SCCOL nCols; - SCROW nRows; - aCell.mpFormula->GetMatColsRows(nCols, nRows); - aNewCell.mpFormula->SetMatColsRows(nCols, nRows); - } - aNewCell.mpFormula->SetInChangeTrack(true); - pChangeActionContent->SetNewCell(aNewCell, pDoc, EMPTY_OUSTRING); - // #i40704# don't overwrite the formula string via SetNewValue() - } - } + aNewCell = aCell; + pChangeActionContent->SetNewCell(aNewCell, pDoc, EMPTY_OUSTRING); + pChangeActionContent->SetNewValue(aCell, pDoc); } else { - OSL_FAIL("wrong cell position"); + ScMatrixMode nMatrixFlag = aCell.mpFormula->GetMatrixFlag(); + OUString sFormula; + // With GRAM_ODFF reference detection is faster on compilation. + /* FIXME: new cell should be created with a clone + * of the token array instead. Any reason why this + * wasn't done? */ + aCell.mpFormula->GetFormula(sFormula, formula::FormulaGrammar::GRAM_ODFF); + + // #i87826# [Collaboration] Rejected move destroys formulas + // FIXME: adjust ScFormulaCell::GetFormula(), so that the right formula string + // is returned and no further string handling is necessary + OUString sFormula2; + if ( nMatrixFlag != ScMatrixMode::NONE ) + { + sFormula2 = sFormula.copy( 2, sFormula.getLength() - 3 ); + } + else + { + sFormula2 = sFormula.copy( 1 ); + } + + aNewCell.meType = CELLTYPE_FORMULA; + aNewCell.mpFormula = new ScFormulaCell(pDoc, aAddress, sFormula2,formula::FormulaGrammar::GRAM_ODFF, nMatrixFlag); + if (nMatrixFlag == ScMatrixMode::Formula) + { + SCCOL nCols; + SCROW nRows; + aCell.mpFormula->GetMatColsRows(nCols, nRows); + aNewCell.mpFormula->SetMatColsRows(nCols, nRows); + } + aNewCell.mpFormula->SetInChangeTrack(true); + pChangeActionContent->SetNewCell(aNewCell, pDoc, EMPTY_OUSTRING); + // #i40704# don't overwrite the formula string via SetNewValue() } } } + else + { + OSL_FAIL("wrong cell position"); + } } void ScXMLChangeTrackingImportHelper::CreateChangeTrack(ScDocument* pTempDoc) { pDoc = pTempDoc; - if (pDoc) + if (!pDoc) + return; + + pTrack = new ScChangeTrack(pDoc, aUsers); + // old files didn't store nanoseconds, disable until encountered + pTrack->SetTimeNanoSeconds( false ); + + for (const auto & rAction : aActions) { - pTrack = new ScChangeTrack(pDoc, aUsers); - // old files didn't store nanoseconds, disable until encountered - pTrack->SetTimeNanoSeconds( false ); + std::unique_ptr pAction; - for (const auto & rAction : aActions) + switch (rAction->nActionType) { - std::unique_ptr pAction; - - switch (rAction->nActionType) + case SC_CAT_INSERT_COLS: + case SC_CAT_INSERT_ROWS: + case SC_CAT_INSERT_TABS: { - case SC_CAT_INSERT_COLS: - case SC_CAT_INSERT_ROWS: - case SC_CAT_INSERT_TABS: - { - pAction = CreateInsertAction(static_cast(rAction.get())); - } - break; - case SC_CAT_DELETE_COLS: - case SC_CAT_DELETE_ROWS: - case SC_CAT_DELETE_TABS: - { - ScMyDelAction* pDelAct = static_cast(rAction.get()); - pAction = CreateDeleteAction(pDelAct); - CreateGeneratedActions(pDelAct->aGeneratedList); - } - break; - case SC_CAT_MOVE: - { - ScMyMoveAction* pMovAct = static_cast(rAction.get()); - pAction = CreateMoveAction(pMovAct); - CreateGeneratedActions(pMovAct->aGeneratedList); - } - break; - case SC_CAT_CONTENT: - { - pAction = CreateContentAction(static_cast(rAction.get())); - } - break; - case SC_CAT_REJECT: - { - pAction = CreateRejectionAction(static_cast(rAction.get())); - } - break; - default: - { - // added to avoid warnings - } + pAction = CreateInsertAction(static_cast(rAction.get())); } - - if (pAction) - pTrack->AppendLoaded(std::move(pAction)); - else + break; + case SC_CAT_DELETE_COLS: + case SC_CAT_DELETE_ROWS: + case SC_CAT_DELETE_TABS: + { + ScMyDelAction* pDelAct = static_cast(rAction.get()); + pAction = CreateDeleteAction(pDelAct); + CreateGeneratedActions(pDelAct->aGeneratedList); + } + break; + case SC_CAT_MOVE: { - OSL_FAIL("no action"); + ScMyMoveAction* pMovAct = static_cast(rAction.get()); + pAction = CreateMoveAction(pMovAct); + CreateGeneratedActions(pMovAct->aGeneratedList); + } + break; + case SC_CAT_CONTENT: + { + pAction = CreateContentAction(static_cast(rAction.get())); + } + break; + case SC_CAT_REJECT: + { + pAction = CreateRejectionAction(static_cast(rAction.get())); + } + break; + default: + { + // added to avoid warnings } } - if (pTrack->GetLast()) - pTrack->SetActionMax(pTrack->GetLast()->GetActionNumber()); - auto aItr = aActions.begin(); - while (aItr != aActions.end()) + if (pAction) + pTrack->AppendLoaded(std::move(pAction)); + else { - SetDependencies(aItr->get()); - - if ((*aItr)->nActionType == SC_CAT_CONTENT) - ++aItr; - else - aItr = aActions.erase(aItr); + OSL_FAIL("no action"); } + } + if (pTrack->GetLast()) + pTrack->SetActionMax(pTrack->GetLast()->GetActionNumber()); - for (const auto& rxAction : aActions) - { - OSL_ENSURE(rxAction->nActionType == SC_CAT_CONTENT, "wrong action type"); - SetNewCell(static_cast(rxAction.get())); - } - aActions.clear(); - if (aProtect.hasElements()) - pTrack->SetProtection(aProtect); - else if (pDoc->GetChangeTrack() && pDoc->GetChangeTrack()->IsProtected()) - pTrack->SetProtection(pDoc->GetChangeTrack()->GetProtection()); + auto aItr = aActions.begin(); + while (aItr != aActions.end()) + { + SetDependencies(aItr->get()); - if ( pTrack->GetLast() ) - pTrack->SetLastSavedActionNumber(pTrack->GetLast()->GetActionNumber()); + if ((*aItr)->nActionType == SC_CAT_CONTENT) + ++aItr; + else + aItr = aActions.erase(aItr); + } - pDoc->SetChangeTrack(std::unique_ptr(pTrack)); + for (const auto& rxAction : aActions) + { + OSL_ENSURE(rxAction->nActionType == SC_CAT_CONTENT, "wrong action type"); + SetNewCell(static_cast(rxAction.get())); } + aActions.clear(); + if (aProtect.hasElements()) + pTrack->SetProtection(aProtect); + else if (pDoc->GetChangeTrack() && pDoc->GetChangeTrack()->IsProtected()) + pTrack->SetProtection(pDoc->GetChangeTrack()->GetProtection()); + + if ( pTrack->GetLast() ) + pTrack->SetLastSavedActionNumber(pTrack->GetLast()->GetActionNumber()); + + pDoc->SetChangeTrack(std::unique_ptr(pTrack)); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/filter/xml/XMLConsolidationContext.cxx b/sc/source/filter/xml/XMLConsolidationContext.cxx index 71dafb482636..e32db595b494 100644 --- a/sc/source/filter/xml/XMLConsolidationContext.cxx +++ b/sc/source/filter/xml/XMLConsolidationContext.cxx @@ -37,32 +37,32 @@ ScXMLConsolidationContext::ScXMLConsolidationContext( bTargetAddr(false) { rImport.LockSolarMutex(); - if ( rAttrList.is() ) + if ( !rAttrList.is() ) + return; + + for (auto &aIter : *rAttrList) { - for (auto &aIter : *rAttrList) + switch (aIter.getToken()) { - switch (aIter.getToken()) - { - case XML_ELEMENT( TABLE, XML_FUNCTION ): - eFunction = ScXMLConverter::GetSubTotalFuncFromString( aIter.toString() ); - break; - case XML_ELEMENT( TABLE, XML_SOURCE_CELL_RANGE_ADDRESSES ): - sSourceList = aIter.toString(); - break; - case XML_ELEMENT( TABLE, XML_TARGET_CELL_ADDRESS ): - { - sal_Int32 nOffset(0); - bTargetAddr = ScRangeStringConverter::GetAddressFromString( - aTargetAddr, aIter.toString(), GetScImport().GetDocument(), ::formula::FormulaGrammar::CONV_OOO, nOffset ); - } - break; - case XML_ELEMENT( TABLE, XML_USE_LABEL ): - sUseLabel = aIter.toString(); - break; - case XML_ELEMENT( TABLE, XML_LINK_TO_SOURCE_DATA ): - bLinkToSource = IsXMLToken( aIter, XML_TRUE ); + case XML_ELEMENT( TABLE, XML_FUNCTION ): + eFunction = ScXMLConverter::GetSubTotalFuncFromString( aIter.toString() ); + break; + case XML_ELEMENT( TABLE, XML_SOURCE_CELL_RANGE_ADDRESSES ): + sSourceList = aIter.toString(); + break; + case XML_ELEMENT( TABLE, XML_TARGET_CELL_ADDRESS ): + { + sal_Int32 nOffset(0); + bTargetAddr = ScRangeStringConverter::GetAddressFromString( + aTargetAddr, aIter.toString(), GetScImport().GetDocument(), ::formula::FormulaGrammar::CONV_OOO, nOffset ); + } break; - } + case XML_ELEMENT( TABLE, XML_USE_LABEL ): + sUseLabel = aIter.toString(); + break; + case XML_ELEMENT( TABLE, XML_LINK_TO_SOURCE_DATA ): + bLinkToSource = IsXMLToken( aIter, XML_TRUE ); + break; } } } @@ -74,46 +74,46 @@ ScXMLConsolidationContext::~ScXMLConsolidationContext() void SAL_CALL ScXMLConsolidationContext::endFastElement( sal_Int32 /*nElement*/ ) { - if (bTargetAddr) - { - std::unique_ptr pConsParam(new ScConsolidateParam); - pConsParam->nCol = aTargetAddr.Col(); - pConsParam->nRow = aTargetAddr.Row(); - pConsParam->nTab = aTargetAddr.Tab(); - pConsParam->eFunction = eFunction; + if (!bTargetAddr) + return; - sal_uInt16 nCount = static_cast(std::min( ScRangeStringConverter::GetTokenCount( sSourceList ), sal_Int32(0xFFFF) )); - if( nCount ) + std::unique_ptr pConsParam(new ScConsolidateParam); + pConsParam->nCol = aTargetAddr.Col(); + pConsParam->nRow = aTargetAddr.Row(); + pConsParam->nTab = aTargetAddr.Tab(); + pConsParam->eFunction = eFunction; + + sal_uInt16 nCount = static_cast(std::min( ScRangeStringConverter::GetTokenCount( sSourceList ), sal_Int32(0xFFFF) )); + if( nCount ) + { + std::unique_ptr ppAreas(new ScArea[ nCount ]); + sal_Int32 nOffset = 0; + sal_uInt16 nIndex; + for( nIndex = 0; nIndex < nCount; ++nIndex ) { - std::unique_ptr ppAreas(new ScArea[ nCount ]); - sal_Int32 nOffset = 0; - sal_uInt16 nIndex; - for( nIndex = 0; nIndex < nCount; ++nIndex ) + if ( !ScRangeStringConverter::GetAreaFromString( + ppAreas[ nIndex ], sSourceList, GetScImport().GetDocument(), ::formula::FormulaGrammar::CONV_OOO, nOffset ) ) { - if ( !ScRangeStringConverter::GetAreaFromString( - ppAreas[ nIndex ], sSourceList, GetScImport().GetDocument(), ::formula::FormulaGrammar::CONV_OOO, nOffset ) ) - { - //! handle error - } + //! handle error } - - pConsParam->SetAreas( std::move(ppAreas), nCount ); } - pConsParam->bByCol = pConsParam->bByRow = false; - if( IsXMLToken(sUseLabel, XML_COLUMN ) ) - pConsParam->bByCol = true; - else if( IsXMLToken( sUseLabel, XML_ROW ) ) - pConsParam->bByRow = true; - else if( IsXMLToken( sUseLabel, XML_BOTH ) ) - pConsParam->bByCol = pConsParam->bByRow = true; + pConsParam->SetAreas( std::move(ppAreas), nCount ); + } + + pConsParam->bByCol = pConsParam->bByRow = false; + if( IsXMLToken(sUseLabel, XML_COLUMN ) ) + pConsParam->bByCol = true; + else if( IsXMLToken( sUseLabel, XML_ROW ) ) + pConsParam->bByRow = true; + else if( IsXMLToken( sUseLabel, XML_BOTH ) ) + pConsParam->bByCol = pConsParam->bByRow = true; - pConsParam->bReferenceData = bLinkToSource; + pConsParam->bReferenceData = bLinkToSource; - ScDocument* pDoc = GetScImport().GetDocument(); - if( pDoc ) - pDoc->SetConsolidateDlgData( std::move(pConsParam) ); - } + ScDocument* pDoc = GetScImport().GetDocument(); + if( pDoc ) + pDoc->SetConsolidateDlgData( std::move(pConsParam) ); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/filter/xml/XMLConverter.cxx b/sc/source/filter/xml/XMLConverter.cxx index 8f288b6b02b9..004479c7a2c6 100644 --- a/sc/source/filter/xml/XMLConverter.cxx +++ b/sc/source/filter/xml/XMLConverter.cxx @@ -543,69 +543,70 @@ void ScXMLConditionHelper::parseCondition( const sal_Unicode* pcBegin = rAttribute.getStr(); const sal_Unicode* pcString = pcBegin + nStartIndex; const sal_Unicode* pcEnd = pcBegin + rAttribute.getLength(); - if( const ScXMLConditionInfo* pCondInfo = lclGetConditionInfo( pcString, pcEnd ) ) + const ScXMLConditionInfo* pCondInfo = lclGetConditionInfo( pcString, pcEnd ); + if( !pCondInfo ) + return; + + // insert default values into parse result (may be changed below) + rParseResult.meValidation = pCondInfo->meValidation; + rParseResult.meOperator = pCondInfo->meOperator; + // continue parsing dependent on token type + switch( pCondInfo->meType ) { - // insert default values into parse result (may be changed below) - rParseResult.meValidation = pCondInfo->meValidation; - rParseResult.meOperator = pCondInfo->meOperator; - // continue parsing dependent on token type - switch( pCondInfo->meType ) - { - case XML_COND_TYPE_KEYWORD: - // nothing specific has to follow, success - rParseResult.meToken = pCondInfo->meToken; - break; + case XML_COND_TYPE_KEYWORD: + // nothing specific has to follow, success + rParseResult.meToken = pCondInfo->meToken; + break; - case XML_COND_TYPE_COMPARISON: - // format is () - if( lclSkipEmptyParentheses( pcString, pcEnd ) ) + case XML_COND_TYPE_COMPARISON: + // format is () + if( lclSkipEmptyParentheses( pcString, pcEnd ) ) + { + rParseResult.meOperator = lclGetConditionOperator( pcString, pcEnd ); + if( rParseResult.meOperator != sheet::ConditionOperator_NONE ) { - rParseResult.meOperator = lclGetConditionOperator( pcString, pcEnd ); - if( rParseResult.meOperator != sheet::ConditionOperator_NONE ) + lclSkipWhitespace( pcString, pcEnd ); + if( pcString < pcEnd ) { - lclSkipWhitespace( pcString, pcEnd ); - if( pcString < pcEnd ) - { - rParseResult.meToken = pCondInfo->meToken; - // comparison must be at end of attribute, remaining text is the formula - rParseResult.maOperand1 = OUString( pcString, static_cast< sal_Int32 >( pcEnd - pcString ) ); - } + rParseResult.meToken = pCondInfo->meToken; + // comparison must be at end of attribute, remaining text is the formula + rParseResult.maOperand1 = OUString( pcString, static_cast< sal_Int32 >( pcEnd - pcString ) ); } } - break; + } + break; + + case XML_COND_TYPE_FUNCTION0: + // format is () + if( lclSkipEmptyParentheses( pcString, pcEnd ) ) + rParseResult.meToken = pCondInfo->meToken; + break; - case XML_COND_TYPE_FUNCTION0: - // format is () - if( lclSkipEmptyParentheses( pcString, pcEnd ) ) + case XML_COND_TYPE_FUNCTION1: + // format is () + if( (pcString < pcEnd) && (*pcString == '(') ) + { + rParseResult.maOperand1 = getExpression( ++pcString, pcEnd, ')' ); + if( !rParseResult.maOperand1.isEmpty() ) rParseResult.meToken = pCondInfo->meToken; - break; + } + break; - case XML_COND_TYPE_FUNCTION1: - // format is () - if( (pcString < pcEnd) && (*pcString == '(') ) + case XML_COND_TYPE_FUNCTION2: + // format is (,) + if( (pcString < pcEnd) && (*pcString == '(') ) + { + rParseResult.maOperand1 = getExpression( ++pcString, pcEnd, ',' ); + if( !rParseResult.maOperand1.isEmpty() ) { - rParseResult.maOperand1 = getExpression( ++pcString, pcEnd, ')' ); - if( !rParseResult.maOperand1.isEmpty() ) + rParseResult.maOperand2 = getExpression( pcString, pcEnd, ')' ); + if( !rParseResult.maOperand2.isEmpty() ) rParseResult.meToken = pCondInfo->meToken; } - break; - - case XML_COND_TYPE_FUNCTION2: - // format is (,) - if( (pcString < pcEnd) && (*pcString == '(') ) - { - rParseResult.maOperand1 = getExpression( ++pcString, pcEnd, ',' ); - if( !rParseResult.maOperand1.isEmpty() ) - { - rParseResult.maOperand2 = getExpression( pcString, pcEnd, ')' ); - if( !rParseResult.maOperand2.isEmpty() ) - rParseResult.meToken = pCondInfo->meToken; - } - } - break; - } - rParseResult.mnEndIndex = static_cast< sal_Int32 >( pcString - pcBegin ); + } + break; } + rParseResult.mnEndIndex = static_cast< sal_Int32 >( pcString - pcBegin ); } OUString ScXMLConditionHelper::getExpression( const sal_Unicode*& rpcString, const sal_Unicode* pcEnd, sal_Unicode cEndChar ) diff --git a/sc/source/filter/xml/XMLDDELinksContext.cxx b/sc/source/filter/xml/XMLDDELinksContext.cxx index 592197e5d39d..7bbf78d60fe2 100644 --- a/sc/source/filter/xml/XMLDDELinksContext.cxx +++ b/sc/source/filter/xml/XMLDDELinksContext.cxx @@ -126,51 +126,51 @@ void ScXMLDDELinkContext::AddRowsToTable(const sal_Int32 nRowsP) void SAL_CALL ScXMLDDELinkContext::endFastElement( sal_Int32 /*nElement*/ ) { ScDocument* pDoc = GetScImport().GetDocument(); - if (nPosition > -1 && nColumns && nRows) + if (!(nPosition > -1 && nColumns && nRows)) + return; + + bool bSizeMatch = (static_cast(nColumns * nRows) == aDDELinkTable.size()); + OSL_ENSURE( bSizeMatch, "ScXMLDDELinkContext::EndElement: matrix dimension doesn't match cells count"); + // Excel writes bad ODF in that it does not write the + // table:number-columns-repeated attribute of the + // element, but apparently uses the number of + // elements within a element to + // determine the column count instead. Be lenient ... + if (!bSizeMatch && nColumns == 1) { - bool bSizeMatch = (static_cast(nColumns * nRows) == aDDELinkTable.size()); - OSL_ENSURE( bSizeMatch, "ScXMLDDELinkContext::EndElement: matrix dimension doesn't match cells count"); - // Excel writes bad ODF in that it does not write the - // table:number-columns-repeated attribute of the - // element, but apparently uses the number of - // elements within a element to - // determine the column count instead. Be lenient ... - if (!bSizeMatch && nColumns == 1) - { - nColumns = aDDELinkTable.size() / nRows; - OSL_ENSURE( static_cast(nColumns * nRows) == aDDELinkTable.size(), - "ScXMLDDELinkContext::EndElement: adapted matrix dimension doesn't match either"); - } - ScMatrixRef pMatrix = new ScMatrix(static_cast(nColumns), static_cast(nRows), 0.0); - sal_Int32 nCol(0); - sal_Int32 nRow(-1); - sal_Int32 nIndex(0); + nColumns = aDDELinkTable.size() / nRows; + OSL_ENSURE( static_cast(nColumns * nRows) == aDDELinkTable.size(), + "ScXMLDDELinkContext::EndElement: adapted matrix dimension doesn't match either"); + } + ScMatrixRef pMatrix = new ScMatrix(static_cast(nColumns), static_cast(nRows), 0.0); + sal_Int32 nCol(0); + sal_Int32 nRow(-1); + sal_Int32 nIndex(0); - svl::SharedStringPool& rPool = pDoc->GetSharedStringPool(); - for (const auto& rDDELinkCell : aDDELinkTable) + svl::SharedStringPool& rPool = pDoc->GetSharedStringPool(); + for (const auto& rDDELinkCell : aDDELinkTable) + { + if (nIndex % nColumns == 0) { - if (nIndex % nColumns == 0) - { - ++nRow; - nCol = 0; - } - else - ++nCol; - - SCSIZE nScCol( static_cast< SCSIZE >( nCol ) ); - SCSIZE nScRow( static_cast< SCSIZE >( nRow ) ); - if( rDDELinkCell.bEmpty ) - pMatrix->PutEmpty( nScCol, nScRow ); - else if( rDDELinkCell.bString ) - pMatrix->PutString(rPool.intern(rDDELinkCell.sValue), nScCol, nScRow); - else - pMatrix->PutDouble( rDDELinkCell.fValue, nScCol, nScRow ); - - ++nIndex; + ++nRow; + nCol = 0; } + else + ++nCol; + + SCSIZE nScCol( static_cast< SCSIZE >( nCol ) ); + SCSIZE nScRow( static_cast< SCSIZE >( nRow ) ); + if( rDDELinkCell.bEmpty ) + pMatrix->PutEmpty( nScCol, nScRow ); + else if( rDDELinkCell.bString ) + pMatrix->PutString(rPool.intern(rDDELinkCell.sValue), nScCol, nScRow); + else + pMatrix->PutDouble( rDDELinkCell.fValue, nScCol, nScRow ); - GetScImport().GetDocument()->SetDdeLinkResultMatrix( static_cast< sal_uInt16 >( nPosition ), pMatrix ); + ++nIndex; } + + GetScImport().GetDocument()->SetDdeLinkResultMatrix( static_cast< sal_uInt16 >( nPosition ), pMatrix ); } ScXMLDDESourceContext::ScXMLDDESourceContext( ScXMLImport& rImport, @@ -179,30 +179,30 @@ ScXMLDDESourceContext::ScXMLDDESourceContext( ScXMLImport& rImport, ScXMLImportContext( rImport ), pDDELink(pTempDDELink) { - if ( rAttrList.is() ) + if ( !rAttrList.is() ) + return; + + for (auto &aIter : *rAttrList) { - for (auto &aIter : *rAttrList) + switch (aIter.getToken()) { - switch (aIter.getToken()) - { - case XML_ELEMENT( OFFICE, XML_DDE_APPLICATION ): - pDDELink->SetApplication(aIter.toString()); - break; - case XML_ELEMENT( OFFICE, XML_DDE_TOPIC ): - pDDELink->SetTopic(aIter.toString()); - break; - case XML_ELEMENT( OFFICE, XML_DDE_ITEM ): - pDDELink->SetItem(aIter.toString()); - break; - case XML_ELEMENT( TABLE, XML_CONVERSION_MODE ): - if (IsXMLToken(aIter, XML_INTO_ENGLISH_NUMBER)) - pDDELink->SetMode(SC_DDE_ENGLISH); - else if (IsXMLToken(aIter, XML_KEEP_TEXT)) - pDDELink->SetMode(SC_DDE_TEXT); - else - pDDELink->SetMode(SC_DDE_DEFAULT); - break; - } + case XML_ELEMENT( OFFICE, XML_DDE_APPLICATION ): + pDDELink->SetApplication(aIter.toString()); + break; + case XML_ELEMENT( OFFICE, XML_DDE_TOPIC ): + pDDELink->SetTopic(aIter.toString()); + break; + case XML_ELEMENT( OFFICE, XML_DDE_ITEM ): + pDDELink->SetItem(aIter.toString()); + break; + case XML_ELEMENT( TABLE, XML_CONVERSION_MODE ): + if (IsXMLToken(aIter, XML_INTO_ENGLISH_NUMBER)) + pDDELink->SetMode(SC_DDE_ENGLISH); + else if (IsXMLToken(aIter, XML_KEEP_TEXT)) + pDDELink->SetMode(SC_DDE_TEXT); + else + pDDELink->SetMode(SC_DDE_DEFAULT); + break; } } } @@ -319,32 +319,32 @@ ScXMLDDECellContext::ScXMLDDECellContext( ScXMLImport& rImport, bEmpty(true), pDDELink(pTempDDELink) { - if ( rAttrList.is() ) + if ( !rAttrList.is() ) + return; + + for (auto &aIter : *rAttrList) { - for (auto &aIter : *rAttrList) + switch (aIter.getToken()) { - switch (aIter.getToken()) - { - case XML_ELEMENT( OFFICE, XML_VALUE_TYPE ): - if (IsXMLToken(aIter, XML_STRING)) - bString = true; - else - bString = false; - break; - case XML_ELEMENT( OFFICE, XML_STRING_VALUE ): - sValue = aIter.toString(); - bEmpty = false; - bString2 = true; - break; - case XML_ELEMENT( OFFICE, XML_VALUE ): - fValue = aIter.toDouble(); - bEmpty = false; - bString2 = false; - break; - case XML_ELEMENT( TABLE, XML_NUMBER_COLUMNS_REPEATED ): - nCells = aIter.toInt32(); - break; - } + case XML_ELEMENT( OFFICE, XML_VALUE_TYPE ): + if (IsXMLToken(aIter, XML_STRING)) + bString = true; + else + bString = false; + break; + case XML_ELEMENT( OFFICE, XML_STRING_VALUE ): + sValue = aIter.toString(); + bEmpty = false; + bString2 = true; + break; + case XML_ELEMENT( OFFICE, XML_VALUE ): + fValue = aIter.toDouble(); + bEmpty = false; + bString2 = false; + break; + case XML_ELEMENT( TABLE, XML_NUMBER_COLUMNS_REPEATED ): + nCells = aIter.toInt32(); + break; } } } diff --git a/sc/source/filter/xml/XMLDetectiveContext.cxx b/sc/source/filter/xml/XMLDetectiveContext.cxx index 3d62ce7076c9..90de30f44c77 100644 --- a/sc/source/filter/xml/XMLDetectiveContext.cxx +++ b/sc/source/filter/xml/XMLDetectiveContext.cxx @@ -97,32 +97,32 @@ ScXMLDetectiveHighlightedContext::ScXMLDetectiveHighlightedContext( aDetectiveObj(), bValid( false ) { - if ( rAttrList.is() ) + if ( !rAttrList.is() ) + return; + + for (auto &aIter : *rAttrList) { - for (auto &aIter : *rAttrList) + switch (aIter.getToken()) { - switch (aIter.getToken()) + case XML_ELEMENT( TABLE, XML_CELL_RANGE_ADDRESS ): { - case XML_ELEMENT( TABLE, XML_CELL_RANGE_ADDRESS ): - { - sal_Int32 nOffset(0); - ScXMLImport::MutexGuard aGuard(GetScImport()); - bValid = ScRangeStringConverter::GetRangeFromString( aDetectiveObj.aSourceRange, aIter.toString(), GetScImport().GetDocument(), ::formula::FormulaGrammar::CONV_OOO, nOffset ); - } - break; - case XML_ELEMENT( TABLE, XML_DIRECTION ): - aDetectiveObj.eObjType = ScXMLConverter::GetDetObjTypeFromString( aIter.toString() ); - break; - case XML_ELEMENT( TABLE, XML_CONTAINS_ERROR ): - aDetectiveObj.bHasError = IsXMLToken(aIter, XML_TRUE); - break; - case XML_ELEMENT( TABLE, XML_MARKED_INVALID ): - { - if (IsXMLToken(aIter, XML_TRUE)) - aDetectiveObj.eObjType = SC_DETOBJ_CIRCLE; - } - break; + sal_Int32 nOffset(0); + ScXMLImport::MutexGuard aGuard(GetScImport()); + bValid = ScRangeStringConverter::GetRangeFromString( aDetectiveObj.aSourceRange, aIter.toString(), GetScImport().GetDocument(), ::formula::FormulaGrammar::CONV_OOO, nOffset ); + } + break; + case XML_ELEMENT( TABLE, XML_DIRECTION ): + aDetectiveObj.eObjType = ScXMLConverter::GetDetObjTypeFromString( aIter.toString() ); + break; + case XML_ELEMENT( TABLE, XML_CONTAINS_ERROR ): + aDetectiveObj.bHasError = IsXMLToken(aIter, XML_TRUE); + break; + case XML_ELEMENT( TABLE, XML_MARKED_INVALID ): + { + if (IsXMLToken(aIter, XML_TRUE)) + aDetectiveObj.eObjType = SC_DETOBJ_CIRCLE; } + break; } } } diff --git a/sc/source/filter/xml/XMLExportDDELinks.cxx b/sc/source/filter/xml/XMLExportDDELinks.cxx index 9d2ef95b64bc..c5999a7e2294 100644 --- a/sc/source/filter/xml/XMLExportDDELinks.cxx +++ b/sc/source/filter/xml/XMLExportDDELinks.cxx @@ -116,46 +116,46 @@ void ScXMLExportDDELinks::WriteTable(const sal_Int32 nPos) void ScXMLExportDDELinks::WriteDDELinks(const uno::Reference& xSpreadDoc) { uno::Reference xPropertySet (xSpreadDoc, uno::UNO_QUERY); - if (xPropertySet.is()) + if (!xPropertySet.is()) + return; + + uno::Reference xIndex(xPropertySet->getPropertyValue(SC_UNO_DDELINKS), uno::UNO_QUERY); + if (!xIndex.is()) + return; + + sal_Int32 nCount = xIndex->getCount(); + if (!nCount) + return; + + SvXMLElementExport aElemDDEs(rExport, XML_NAMESPACE_TABLE, XML_DDE_LINKS, true, true); + for (sal_Int32 nDDELink = 0; nDDELink < nCount; ++nDDELink) { - uno::Reference xIndex(xPropertySet->getPropertyValue(SC_UNO_DDELINKS), uno::UNO_QUERY); - if (xIndex.is()) + uno::Reference xDDELink(xIndex->getByIndex(nDDELink), uno::UNO_QUERY); + if (xDDELink.is()) { - sal_Int32 nCount = xIndex->getCount(); - if (nCount) + SvXMLElementExport aElemDDE(rExport, XML_NAMESPACE_TABLE, XML_DDE_LINK, true, true); { - SvXMLElementExport aElemDDEs(rExport, XML_NAMESPACE_TABLE, XML_DDE_LINKS, true, true); - for (sal_Int32 nDDELink = 0; nDDELink < nCount; ++nDDELink) + rExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_DDE_APPLICATION, xDDELink->getApplication()); + rExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_DDE_TOPIC, xDDELink->getTopic()); + rExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_DDE_ITEM, xDDELink->getItem()); + rExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_AUTOMATIC_UPDATE, XML_TRUE); + sal_uInt8 nMode; + if (rExport.GetDocument() && + rExport.GetDocument()->GetDdeLinkMode(nDDELink, nMode)) { - uno::Reference xDDELink(xIndex->getByIndex(nDDELink), uno::UNO_QUERY); - if (xDDELink.is()) + switch (nMode) { - SvXMLElementExport aElemDDE(rExport, XML_NAMESPACE_TABLE, XML_DDE_LINK, true, true); - { - rExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_DDE_APPLICATION, xDDELink->getApplication()); - rExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_DDE_TOPIC, xDDELink->getTopic()); - rExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_DDE_ITEM, xDDELink->getItem()); - rExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_AUTOMATIC_UPDATE, XML_TRUE); - sal_uInt8 nMode; - if (rExport.GetDocument() && - rExport.GetDocument()->GetDdeLinkMode(nDDELink, nMode)) - { - switch (nMode) - { - case SC_DDE_ENGLISH : - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_CONVERSION_MODE, XML_INTO_ENGLISH_NUMBER); - break; - case SC_DDE_TEXT : - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_CONVERSION_MODE, XML_KEEP_TEXT); - break; - } - } - SvXMLElementExport(rExport, XML_NAMESPACE_OFFICE, XML_DDE_SOURCE, true, true); - } - WriteTable(nDDELink); + case SC_DDE_ENGLISH : + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_CONVERSION_MODE, XML_INTO_ENGLISH_NUMBER); + break; + case SC_DDE_TEXT : + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_CONVERSION_MODE, XML_KEEP_TEXT); + break; } } + SvXMLElementExport(rExport, XML_NAMESPACE_OFFICE, XML_DDE_SOURCE, true, true); } + WriteTable(nDDELink); } } } diff --git a/sc/source/filter/xml/XMLExportDataPilot.cxx b/sc/source/filter/xml/XMLExportDataPilot.cxx index 185e43efdaca..8b5e169bd7bf 100644 --- a/sc/source/filter/xml/XMLExportDataPilot.cxx +++ b/sc/source/filter/xml/XMLExportDataPilot.cxx @@ -144,125 +144,125 @@ void ScXMLExportDataPilot::WriteDPCondition(const ScQueryEntry& aQueryEntry, boo void ScXMLExportDataPilot::WriteDPFilter(const ScQueryParam& aQueryParam) { SCSIZE nQueryEntryCount = aQueryParam.GetEntryCount(); - if (nQueryEntryCount > 0) - { - bool bAnd(false); - bool bOr(false); - bool bHasEntries(true); - SCSIZE nEntries(0); - SCSIZE j; + if (nQueryEntryCount <= 0) + return; - for ( j = 0; (j < nQueryEntryCount) && bHasEntries; ++j) + bool bAnd(false); + bool bOr(false); + bool bHasEntries(true); + SCSIZE nEntries(0); + SCSIZE j; + + for ( j = 0; (j < nQueryEntryCount) && bHasEntries; ++j) + { + ScQueryEntry aEntry = aQueryParam.GetEntry(j); + if (aEntry.bDoQuery) { - ScQueryEntry aEntry = aQueryParam.GetEntry(j); - if (aEntry.bDoQuery) + if (nEntries > 0) { - if (nEntries > 0) - { - if (aEntry.eConnect == SC_AND) - bAnd = true; - else - bOr = true; - } - ++nEntries; + if (aEntry.eConnect == SC_AND) + bAnd = true; + else + bOr = true; } - else - bHasEntries = false; + ++nEntries; } - nQueryEntryCount = nEntries; - if (nQueryEntryCount) + else + bHasEntries = false; + } + nQueryEntryCount = nEntries; + if (!nQueryEntryCount) + return; + + if(!((aQueryParam.nCol1 == aQueryParam.nCol2) && (aQueryParam.nRow1 == aQueryParam.nRow2) && + (static_cast(aQueryParam.nCol1) == static_cast(aQueryParam.nRow1)) && + (aQueryParam.nCol1 == 0) && (aQueryParam.nTab == SCTAB_MAX))) + { + ScRange aConditionRange(aQueryParam.nCol1, aQueryParam.nRow1, aQueryParam.nTab, + aQueryParam.nCol2, aQueryParam.nRow2, aQueryParam.nTab); + OUString sConditionRange; + ScRangeStringConverter::GetStringFromRange( sConditionRange, aConditionRange, pDoc, ::formula::FormulaGrammar::CONV_OOO ); + if (!sConditionRange.isEmpty()) + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_CONDITION_SOURCE_RANGE_ADDRESS, sConditionRange); + } + if (!aQueryParam.bDuplicate) + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_DISPLAY_DUPLICATES, XML_FALSE); + SvXMLElementExport aElemDPF(rExport, XML_NAMESPACE_TABLE, XML_FILTER, true, true); + rExport.CheckAttrList(); + if (nQueryEntryCount == 1) + { + WriteDPCondition(aQueryParam.GetEntry(0), aQueryParam.bCaseSens, aQueryParam.eSearchType); + } + else if (bOr && !bAnd) + { + SvXMLElementExport aElemOr(rExport, XML_NAMESPACE_TABLE, XML_FILTER_OR, true, true); + for (j = 0; j < nQueryEntryCount; ++j) { - if(!((aQueryParam.nCol1 == aQueryParam.nCol2) && (aQueryParam.nRow1 == aQueryParam.nRow2) && - (static_cast(aQueryParam.nCol1) == static_cast(aQueryParam.nRow1)) && - (aQueryParam.nCol1 == 0) && (aQueryParam.nTab == SCTAB_MAX))) - { - ScRange aConditionRange(aQueryParam.nCol1, aQueryParam.nRow1, aQueryParam.nTab, - aQueryParam.nCol2, aQueryParam.nRow2, aQueryParam.nTab); - OUString sConditionRange; - ScRangeStringConverter::GetStringFromRange( sConditionRange, aConditionRange, pDoc, ::formula::FormulaGrammar::CONV_OOO ); - if (!sConditionRange.isEmpty()) - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_CONDITION_SOURCE_RANGE_ADDRESS, sConditionRange); - } - if (!aQueryParam.bDuplicate) - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_DISPLAY_DUPLICATES, XML_FALSE); - SvXMLElementExport aElemDPF(rExport, XML_NAMESPACE_TABLE, XML_FILTER, true, true); - rExport.CheckAttrList(); - if (nQueryEntryCount == 1) - { - WriteDPCondition(aQueryParam.GetEntry(0), aQueryParam.bCaseSens, aQueryParam.eSearchType); - } - else if (bOr && !bAnd) - { - SvXMLElementExport aElemOr(rExport, XML_NAMESPACE_TABLE, XML_FILTER_OR, true, true); - for (j = 0; j < nQueryEntryCount; ++j) - { - WriteDPCondition(aQueryParam.GetEntry(j), aQueryParam.bCaseSens, aQueryParam.eSearchType); - } - } - else if (bAnd && !bOr) - { - SvXMLElementExport aElemAnd(rExport, XML_NAMESPACE_TABLE, XML_FILTER_AND, true, true); - for (j = 0; j < nQueryEntryCount; ++j) - { - WriteDPCondition(aQueryParam.GetEntry(j), aQueryParam.bCaseSens, aQueryParam.eSearchType); - } - } - else + WriteDPCondition(aQueryParam.GetEntry(j), aQueryParam.bCaseSens, aQueryParam.eSearchType); + } + } + else if (bAnd && !bOr) + { + SvXMLElementExport aElemAnd(rExport, XML_NAMESPACE_TABLE, XML_FILTER_AND, true, true); + for (j = 0; j < nQueryEntryCount; ++j) + { + WriteDPCondition(aQueryParam.GetEntry(j), aQueryParam.bCaseSens, aQueryParam.eSearchType); + } + } + else + { + SvXMLElementExport aElemC(rExport, XML_NAMESPACE_TABLE, XML_FILTER_OR, true, true); + ScQueryEntry aPrevFilterField(aQueryParam.GetEntry(0)); + ScQueryConnect aConnection = aQueryParam.GetEntry(1).eConnect; + bool bOpenAndElement; + OUString aName(rExport.GetNamespaceMap().GetQNameByKey(XML_NAMESPACE_TABLE, GetXMLToken(XML_FILTER_AND))); + if (aConnection == SC_AND) + { + rExport.StartElement( aName, true ); + bOpenAndElement = true; + } + else + bOpenAndElement = false; + for (j = 1; j < nQueryEntryCount; ++j) + { + if (aConnection != aQueryParam.GetEntry(j).eConnect) { - SvXMLElementExport aElemC(rExport, XML_NAMESPACE_TABLE, XML_FILTER_OR, true, true); - ScQueryEntry aPrevFilterField(aQueryParam.GetEntry(0)); - ScQueryConnect aConnection = aQueryParam.GetEntry(1).eConnect; - bool bOpenAndElement; - OUString aName(rExport.GetNamespaceMap().GetQNameByKey(XML_NAMESPACE_TABLE, GetXMLToken(XML_FILTER_AND))); - if (aConnection == SC_AND) + aConnection = aQueryParam.GetEntry(j).eConnect; + if (aQueryParam.GetEntry(j).eConnect == SC_AND) { rExport.StartElement( aName, true ); bOpenAndElement = true; + WriteDPCondition(aPrevFilterField, aQueryParam.bCaseSens, aQueryParam.eSearchType); + aPrevFilterField = aQueryParam.GetEntry(j); + if (j == nQueryEntryCount - 1) + { + WriteDPCondition(aPrevFilterField, aQueryParam.bCaseSens, aQueryParam.eSearchType); + rExport.EndElement(aName, true); + bOpenAndElement = false; + } } else - bOpenAndElement = false; - for (j = 1; j < nQueryEntryCount; ++j) { - if (aConnection != aQueryParam.GetEntry(j).eConnect) + WriteDPCondition(aPrevFilterField, aQueryParam.bCaseSens, aQueryParam.eSearchType); + aPrevFilterField = aQueryParam.GetEntry(j); + if (bOpenAndElement) { - aConnection = aQueryParam.GetEntry(j).eConnect; - if (aQueryParam.GetEntry(j).eConnect == SC_AND) - { - rExport.StartElement( aName, true ); - bOpenAndElement = true; - WriteDPCondition(aPrevFilterField, aQueryParam.bCaseSens, aQueryParam.eSearchType); - aPrevFilterField = aQueryParam.GetEntry(j); - if (j == nQueryEntryCount - 1) - { - WriteDPCondition(aPrevFilterField, aQueryParam.bCaseSens, aQueryParam.eSearchType); - rExport.EndElement(aName, true); - bOpenAndElement = false; - } - } - else - { - WriteDPCondition(aPrevFilterField, aQueryParam.bCaseSens, aQueryParam.eSearchType); - aPrevFilterField = aQueryParam.GetEntry(j); - if (bOpenAndElement) - { - rExport.EndElement(aName, true); - bOpenAndElement = false; - } - if (j == nQueryEntryCount - 1) - { - WriteDPCondition(aPrevFilterField, aQueryParam.bCaseSens, aQueryParam.eSearchType); - } - } + rExport.EndElement(aName, true); + bOpenAndElement = false; } - else + if (j == nQueryEntryCount - 1) { WriteDPCondition(aPrevFilterField, aQueryParam.bCaseSens, aQueryParam.eSearchType); - aPrevFilterField = aQueryParam.GetEntry(j); - if (j == nQueryEntryCount - 1) - WriteDPCondition(aPrevFilterField, aQueryParam.bCaseSens, aQueryParam.eSearchType); } } } + else + { + WriteDPCondition(aPrevFilterField, aQueryParam.bCaseSens, aQueryParam.eSearchType); + aPrevFilterField = aQueryParam.GetEntry(j); + if (j == nQueryEntryCount - 1) + WriteDPCondition(aPrevFilterField, aQueryParam.bCaseSens, aQueryParam.eSearchType); + } } } } @@ -337,95 +337,95 @@ void ScXMLExportDataPilot::WriteFieldReference(const ScDPSaveDimension* pDim) void ScXMLExportDataPilot::WriteSortInfo(const ScDPSaveDimension* pDim) { const sheet::DataPilotFieldSortInfo* pSortInfo = pDim->GetSortInfo(); - if (pSortInfo) - { - if (pSortInfo->IsAscending) - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_ORDER, XML_ASCENDING); - else - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_ORDER, XML_DESCENDING); + if (!pSortInfo) + return; - OUString sValueStr; - switch (pSortInfo->Mode) - { - case sheet::DataPilotFieldSortMode::NONE: - sValueStr = GetXMLToken(XML_NONE); - break; - case sheet::DataPilotFieldSortMode::MANUAL: - sValueStr = GetXMLToken(XML_MANUAL); - break; - case sheet::DataPilotFieldSortMode::NAME: - sValueStr = GetXMLToken(XML_NAME); - break; - case sheet::DataPilotFieldSortMode::DATA: - sValueStr = GetXMLToken(XML_DATA); - if (!pSortInfo->Field.isEmpty()) - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_DATA_FIELD, pSortInfo->Field); - break; - } - if (!sValueStr.isEmpty()) - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_SORT_MODE, sValueStr); - SvXMLElementExport aElemDPLSI(rExport, XML_NAMESPACE_TABLE, XML_DATA_PILOT_SORT_INFO, true, true); + if (pSortInfo->IsAscending) + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_ORDER, XML_ASCENDING); + else + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_ORDER, XML_DESCENDING); + + OUString sValueStr; + switch (pSortInfo->Mode) + { + case sheet::DataPilotFieldSortMode::NONE: + sValueStr = GetXMLToken(XML_NONE); + break; + case sheet::DataPilotFieldSortMode::MANUAL: + sValueStr = GetXMLToken(XML_MANUAL); + break; + case sheet::DataPilotFieldSortMode::NAME: + sValueStr = GetXMLToken(XML_NAME); + break; + case sheet::DataPilotFieldSortMode::DATA: + sValueStr = GetXMLToken(XML_DATA); + if (!pSortInfo->Field.isEmpty()) + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_DATA_FIELD, pSortInfo->Field); + break; } + if (!sValueStr.isEmpty()) + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_SORT_MODE, sValueStr); + SvXMLElementExport aElemDPLSI(rExport, XML_NAMESPACE_TABLE, XML_DATA_PILOT_SORT_INFO, true, true); } void ScXMLExportDataPilot::WriteAutoShowInfo(const ScDPSaveDimension* pDim) { const sheet::DataPilotFieldAutoShowInfo* pAutoInfo = pDim->GetAutoShowInfo(); - if (pAutoInfo) - { - if (pAutoInfo->IsEnabled) - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_ENABLED, XML_TRUE); - else - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_ENABLED, XML_FALSE); + if (!pAutoInfo) + return; - OUString sValueStr; - switch (pAutoInfo->ShowItemsMode) - { - case sheet::DataPilotFieldShowItemsMode::FROM_TOP: - sValueStr = GetXMLToken(XML_FROM_TOP); - break; - case sheet::DataPilotFieldShowItemsMode::FROM_BOTTOM: - sValueStr = GetXMLToken(XML_FROM_BOTTOM); - break; - } - if (!sValueStr.isEmpty()) - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_DISPLAY_MEMBER_MODE, sValueStr); + if (pAutoInfo->IsEnabled) + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_ENABLED, XML_TRUE); + else + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_ENABLED, XML_FALSE); - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_MEMBER_COUNT, OUString::number(pAutoInfo->ItemCount)); + OUString sValueStr; + switch (pAutoInfo->ShowItemsMode) + { + case sheet::DataPilotFieldShowItemsMode::FROM_TOP: + sValueStr = GetXMLToken(XML_FROM_TOP); + break; + case sheet::DataPilotFieldShowItemsMode::FROM_BOTTOM: + sValueStr = GetXMLToken(XML_FROM_BOTTOM); + break; + } + if (!sValueStr.isEmpty()) + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_DISPLAY_MEMBER_MODE, sValueStr); - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_DATA_FIELD, pAutoInfo->DataField); + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_MEMBER_COUNT, OUString::number(pAutoInfo->ItemCount)); - SvXMLElementExport aElemDPLAI(rExport, XML_NAMESPACE_TABLE, XML_DATA_PILOT_DISPLAY_INFO, true, true); - } + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_DATA_FIELD, pAutoInfo->DataField); + + SvXMLElementExport aElemDPLAI(rExport, XML_NAMESPACE_TABLE, XML_DATA_PILOT_DISPLAY_INFO, true, true); } void ScXMLExportDataPilot::WriteLayoutInfo(const ScDPSaveDimension* pDim) { const sheet::DataPilotFieldLayoutInfo* pLayoutInfo = pDim->GetLayoutInfo(); - if (pLayoutInfo) - { - if (pLayoutInfo->AddEmptyLines) - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_ADD_EMPTY_LINES, XML_TRUE); - else - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_ADD_EMPTY_LINES, XML_FALSE); + if (!pLayoutInfo) + return; - OUString sValueStr; - switch (pLayoutInfo->LayoutMode) - { - case sheet::DataPilotFieldLayoutMode::TABULAR_LAYOUT: - sValueStr = GetXMLToken(XML_TABULAR_LAYOUT); - break; - case sheet::DataPilotFieldLayoutMode::OUTLINE_SUBTOTALS_TOP: - sValueStr = GetXMLToken(XML_OUTLINE_SUBTOTALS_TOP); - break; - case sheet::DataPilotFieldLayoutMode::OUTLINE_SUBTOTALS_BOTTOM: - sValueStr = GetXMLToken(XML_OUTLINE_SUBTOTALS_BOTTOM); - break; - } - if (!sValueStr.isEmpty()) - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_LAYOUT_MODE, sValueStr); - SvXMLElementExport aElemDPLLI(rExport, XML_NAMESPACE_TABLE, XML_DATA_PILOT_LAYOUT_INFO, true, true); + if (pLayoutInfo->AddEmptyLines) + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_ADD_EMPTY_LINES, XML_TRUE); + else + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_ADD_EMPTY_LINES, XML_FALSE); + + OUString sValueStr; + switch (pLayoutInfo->LayoutMode) + { + case sheet::DataPilotFieldLayoutMode::TABULAR_LAYOUT: + sValueStr = GetXMLToken(XML_TABULAR_LAYOUT); + break; + case sheet::DataPilotFieldLayoutMode::OUTLINE_SUBTOTALS_TOP: + sValueStr = GetXMLToken(XML_OUTLINE_SUBTOTALS_TOP); + break; + case sheet::DataPilotFieldLayoutMode::OUTLINE_SUBTOTALS_BOTTOM: + sValueStr = GetXMLToken(XML_OUTLINE_SUBTOTALS_BOTTOM); + break; } + if (!sValueStr.isEmpty()) + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_LAYOUT_MODE, sValueStr); + SvXMLElementExport aElemDPLLI(rExport, XML_NAMESPACE_TABLE, XML_DATA_PILOT_LAYOUT_INFO, true, true); } void ScXMLExportDataPilot::WriteSubTotals(const ScDPSaveDimension* pDim) @@ -436,50 +436,50 @@ void ScXMLExportDataPilot::WriteSubTotals(const ScDPSaveDimension* pDim) // Export display names only for 1.2 extended or later. pLayoutName = pDim->GetSubtotalName(); - if (nSubTotalCount > 0) + if (nSubTotalCount <= 0) + return; + + SvXMLElementExport aElemSTs(rExport, XML_NAMESPACE_TABLE, XML_DATA_PILOT_SUBTOTALS, true, true); + rExport.CheckAttrList(); + for (sal_Int32 nSubTotal = 0; nSubTotal < nSubTotalCount; nSubTotal++) { - SvXMLElementExport aElemSTs(rExport, XML_NAMESPACE_TABLE, XML_DATA_PILOT_SUBTOTALS, true, true); - rExport.CheckAttrList(); - for (sal_Int32 nSubTotal = 0; nSubTotal < nSubTotalCount; nSubTotal++) - { - OUString sFunction; - sal_Int16 nFunc = static_cast(pDim->GetSubTotalFunc(nSubTotal)); - ScXMLConverter::GetStringFromFunction( sFunction, nFunc); - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_FUNCTION, sFunction); - if (pLayoutName && nFunc == sheet::GeneralFunction2::AUTO) - rExport.AddAttribute(XML_NAMESPACE_TABLE_EXT, XML_DISPLAY_NAME, *pLayoutName); - SvXMLElementExport aElemST(rExport, XML_NAMESPACE_TABLE, XML_DATA_PILOT_SUBTOTAL, true, true); - } + OUString sFunction; + sal_Int16 nFunc = static_cast(pDim->GetSubTotalFunc(nSubTotal)); + ScXMLConverter::GetStringFromFunction( sFunction, nFunc); + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_FUNCTION, sFunction); + if (pLayoutName && nFunc == sheet::GeneralFunction2::AUTO) + rExport.AddAttribute(XML_NAMESPACE_TABLE_EXT, XML_DISPLAY_NAME, *pLayoutName); + SvXMLElementExport aElemST(rExport, XML_NAMESPACE_TABLE, XML_DATA_PILOT_SUBTOTAL, true, true); } } void ScXMLExportDataPilot::WriteMembers(const ScDPSaveDimension* pDim) { const ScDPSaveDimension::MemberList &rMembers = pDim->GetMembers(); - if (!rMembers.empty()) - { - SvXMLElementExport aElemDPMs(rExport, XML_NAMESPACE_TABLE, XML_DATA_PILOT_MEMBERS, true, true); - rExport.CheckAttrList(); - for (const auto& rpMember : rMembers) - { - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_NAME, rpMember->GetName()); + if (rMembers.empty()) + return; - if (rExport.getSaneDefaultVersion() & SvtSaveOptions::ODFSVER_EXTENDED) - { - // Export display names only for ODF 1.2 extended or later. - const std::optional & pLayoutName = rpMember->GetLayoutName(); - if (pLayoutName) - rExport.AddAttribute(XML_NAMESPACE_TABLE_EXT, XML_DISPLAY_NAME, *pLayoutName); - } + SvXMLElementExport aElemDPMs(rExport, XML_NAMESPACE_TABLE, XML_DATA_PILOT_MEMBERS, true, true); + rExport.CheckAttrList(); + for (const auto& rpMember : rMembers) + { + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_NAME, rpMember->GetName()); - OUStringBuffer sBuffer; - ::sax::Converter::convertBool(sBuffer, rpMember->GetIsVisible()); - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_DISPLAY, sBuffer.makeStringAndClear()); - ::sax::Converter::convertBool(sBuffer, rpMember->GetShowDetails()); - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_SHOW_DETAILS, sBuffer.makeStringAndClear()); - SvXMLElementExport aElemDPM(rExport, XML_NAMESPACE_TABLE, XML_DATA_PILOT_MEMBER, true, true); - rExport.CheckAttrList(); + if (rExport.getSaneDefaultVersion() & SvtSaveOptions::ODFSVER_EXTENDED) + { + // Export display names only for ODF 1.2 extended or later. + const std::optional & pLayoutName = rpMember->GetLayoutName(); + if (pLayoutName) + rExport.AddAttribute(XML_NAMESPACE_TABLE_EXT, XML_DISPLAY_NAME, *pLayoutName); } + + OUStringBuffer sBuffer; + ::sax::Converter::convertBool(sBuffer, rpMember->GetIsVisible()); + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_DISPLAY, sBuffer.makeStringAndClear()); + ::sax::Converter::convertBool(sBuffer, rpMember->GetShowDetails()); + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_SHOW_DETAILS, sBuffer.makeStringAndClear()); + SvXMLElementExport aElemDPM(rExport, XML_NAMESPACE_TABLE, XML_DATA_PILOT_MEMBER, true, true); + rExport.CheckAttrList(); } } @@ -642,30 +642,30 @@ void ScXMLExportDataPilot::WriteGroupDimElements(const ScDPSaveDimension* pDim, OSL_ENSURE((!pGroupDim || !pNumGroupDim), "there should be no NumGroup and Group at the same field"); } - if (pGroupDim || pNumGroupDim) + if (!(pGroupDim || pNumGroupDim)) + return; + + SvXMLElementExport aElemDPGs(rExport, XML_NAMESPACE_TABLE, XML_DATA_PILOT_GROUPS, true, true); + if (!pGroupDim) + return; + + if (pGroupDim->GetDatePart()) + return; + + sal_Int32 nCount = pGroupDim->GetGroupCount(); + for (sal_Int32 i = 0; i < nCount; ++i) { - SvXMLElementExport aElemDPGs(rExport, XML_NAMESPACE_TABLE, XML_DATA_PILOT_GROUPS, true, true); - if (pGroupDim) - { - if (!pGroupDim->GetDatePart()) + const ScDPSaveGroupItem& rGroup = pGroupDim->GetGroupByIndex( i ); + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_NAME, rGroup.GetGroupName()); + SvXMLElementExport aElemDPG(rExport, XML_NAMESPACE_TABLE, XML_DATA_PILOT_GROUP, true, true); + sal_Int32 nElemCount = rGroup.GetElementCount(); + for(sal_Int32 j = 0; j < nElemCount; ++j) + { + const OUString* pElem = rGroup.GetElementByIndex(j); + if (pElem) { - sal_Int32 nCount = pGroupDim->GetGroupCount(); - for (sal_Int32 i = 0; i < nCount; ++i) - { - const ScDPSaveGroupItem& rGroup = pGroupDim->GetGroupByIndex( i ); - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_NAME, rGroup.GetGroupName()); - SvXMLElementExport aElemDPG(rExport, XML_NAMESPACE_TABLE, XML_DATA_PILOT_GROUP, true, true); - sal_Int32 nElemCount = rGroup.GetElementCount(); - for(sal_Int32 j = 0; j < nElemCount; ++j) - { - const OUString* pElem = rGroup.GetElementByIndex(j); - if (pElem) - { - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_NAME, *pElem); - SvXMLElementExport aElemDPM(rExport, XML_NAMESPACE_TABLE, XML_DATA_PILOT_GROUP_MEMBER, true, true); - } - } - } + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_NAME, *pElem); + SvXMLElementExport aElemDPM(rExport, XML_NAMESPACE_TABLE, XML_DATA_PILOT_GROUP_MEMBER, true, true); } } } diff --git a/sc/source/filter/xml/XMLExportIterator.cxx b/sc/source/filter/xml/XMLExportIterator.cxx index ae68f6cbec84..dd924507e77e 100644 --- a/sc/source/filter/xml/XMLExportIterator.cxx +++ b/sc/source/filter/xml/XMLExportIterator.cxx @@ -210,24 +210,24 @@ void ScMyMergedRangesContainer::SetCellData( ScMyCell& rMyCell ) { rMyCell.bIsMergedBase = rMyCell.bIsCovered = false; ScMyMergedRangeList::iterator aItr(aRangeList.begin()); - if( aItr != aRangeList.end() ) + if( aItr == aRangeList.end() ) + return; + + if( aItr->aCellRange.aStart != rMyCell.aCellAddress ) + return; + + rMyCell.aMergeRange = aItr->aCellRange; + if (aItr->bIsFirst) + rMyCell.aMergeRange.aEnd.SetRow( rMyCell.aMergeRange.aStart.Row() + aItr->nRows - 1 ); + rMyCell.bIsMergedBase = aItr->bIsFirst; + rMyCell.bIsCovered = !aItr->bIsFirst; + if( aItr->aCellRange.aStart.Col() < aItr->aCellRange.aEnd.Col() ) { - if( aItr->aCellRange.aStart == rMyCell.aCellAddress ) - { - rMyCell.aMergeRange = aItr->aCellRange; - if (aItr->bIsFirst) - rMyCell.aMergeRange.aEnd.SetRow( rMyCell.aMergeRange.aStart.Row() + aItr->nRows - 1 ); - rMyCell.bIsMergedBase = aItr->bIsFirst; - rMyCell.bIsCovered = !aItr->bIsFirst; - if( aItr->aCellRange.aStart.Col() < aItr->aCellRange.aEnd.Col() ) - { - aItr->aCellRange.aStart.IncCol( 1 ); - aItr->bIsFirst = false; - } - else - aRangeList.erase(aItr); - } + aItr->aCellRange.aStart.IncCol( 1 ); + aItr->bIsFirst = false; } + else + aRangeList.erase(aItr); } void ScMyMergedRangesContainer::SkipTable(SCTAB nSkip) @@ -280,25 +280,25 @@ void ScMyAreaLinksContainer::SetCellData( ScMyCell& rMyCell ) { rMyCell.bHasAreaLink = false; ScMyAreaLinkList::iterator aItr(aAreaLinkList.begin()); - if( aItr != aAreaLinkList.end() ) + if( aItr == aAreaLinkList.end() ) + return; + + if( aItr->aDestRange.aStart != rMyCell.aCellAddress ) + return; + + rMyCell.bHasAreaLink = true; + rMyCell.aAreaLink = *aItr; + aItr = aAreaLinkList.erase( aItr ); + bool bFound = true; + while (aItr != aAreaLinkList.end() && bFound) { - if( aItr->aDestRange.aStart == rMyCell.aCellAddress ) + if ( aItr->aDestRange.aStart == rMyCell.aCellAddress ) { - rMyCell.bHasAreaLink = true; - rMyCell.aAreaLink = *aItr; + OSL_FAIL("more than one linked range on one cell"); aItr = aAreaLinkList.erase( aItr ); - bool bFound = true; - while (aItr != aAreaLinkList.end() && bFound) - { - if ( aItr->aDestRange.aStart == rMyCell.aCellAddress ) - { - OSL_FAIL("more than one linked range on one cell"); - aItr = aAreaLinkList.erase( aItr ); - } - else - bFound = false; - } } + else + bFound = false; } } @@ -395,32 +395,32 @@ void ScMyDetectiveObjContainer::AddObject( ScDetectiveObjType eObjType, const SC const ScAddress& rPosition, const ScRange& rSourceRange, bool bHasError ) { - if( (eObjType == SC_DETOBJ_ARROW) || + if( !((eObjType == SC_DETOBJ_ARROW) || (eObjType == SC_DETOBJ_FROMOTHERTAB) || (eObjType == SC_DETOBJ_TOOTHERTAB) || - (eObjType == SC_DETOBJ_CIRCLE) ) + (eObjType == SC_DETOBJ_CIRCLE)) ) + return; + + ScMyDetectiveObj aDetObj; + aDetObj.eObjType = eObjType; + if( eObjType == SC_DETOBJ_TOOTHERTAB ) + aDetObj.aPosition = rSourceRange.aStart; + else + aDetObj.aPosition = rPosition; + aDetObj.aSourceRange = rSourceRange; + + // #111064#; take the sheet where the object is found and not the sheet given in the ranges, because they are not always true + if (eObjType != SC_DETOBJ_FROMOTHERTAB) { - ScMyDetectiveObj aDetObj; - aDetObj.eObjType = eObjType; - if( eObjType == SC_DETOBJ_TOOTHERTAB ) - aDetObj.aPosition = rSourceRange.aStart; - else - aDetObj.aPosition = rPosition; - aDetObj.aSourceRange = rSourceRange; - - // #111064#; take the sheet where the object is found and not the sheet given in the ranges, because they are not always true - if (eObjType != SC_DETOBJ_FROMOTHERTAB) - { - // if the ObjType == SC_DETOBJ_FROMOTHERTAB then the SourceRange is not used and so it has not to be tested and changed - OSL_ENSURE(aDetObj.aPosition.Tab() == aDetObj.aSourceRange.aStart.Tab(), "It seems to be possible to have different sheets"); - aDetObj.aSourceRange.aStart.SetTab( nSheet ); - aDetObj.aSourceRange.aEnd.SetTab( nSheet ); - } - aDetObj.aPosition.SetTab( nSheet ); - - aDetObj.bHasError = bHasError; - aDetectiveObjList.push_back( aDetObj ); + // if the ObjType == SC_DETOBJ_FROMOTHERTAB then the SourceRange is not used and so it has not to be tested and changed + OSL_ENSURE(aDetObj.aPosition.Tab() == aDetObj.aSourceRange.aStart.Tab(), "It seems to be possible to have different sheets"); + aDetObj.aSourceRange.aStart.SetTab( nSheet ); + aDetObj.aSourceRange.aEnd.SetTab( nSheet ); } + aDetObj.aPosition.SetTab( nSheet ); + + aDetObj.bHasError = bHasError; + aDetectiveObjList.push_back( aDetObj ); } bool ScMyDetectiveObjContainer::GetFirstAddress( ScAddress& rCellAddress ) @@ -643,19 +643,19 @@ void ScMyNotEmptyCellsIterator::SetCurrentTable(const SCTAB nTable, aLastAddress.SetRow( 0 ); aLastAddress.SetCol( 0 ); aLastAddress.SetTab( nTable ); - if (nCurrentTable != nTable) - { - nCurrentTable = nTable; + if (nCurrentTable == nTable) + return; - mpCellItr.reset( - new ScHorizontalCellIterator( - rExport.GetDocument(), nCurrentTable, 0, 0, - static_cast(rExport.GetSharedData()->GetLastColumn(nCurrentTable)), - static_cast(rExport.GetSharedData()->GetLastRow(nCurrentTable)))); + nCurrentTable = nTable; - xTable.set(rxTable); - xCellRange.set(xTable); - } + mpCellItr.reset( + new ScHorizontalCellIterator( + rExport.GetDocument(), nCurrentTable, 0, 0, + static_cast(rExport.GetSharedData()->GetLastColumn(nCurrentTable)), + static_cast(rExport.GetSharedData()->GetLastRow(nCurrentTable)))); + + xTable.set(rxTable); + xCellRange.set(xTable); } void ScMyNotEmptyCellsIterator::SkipTable(SCTAB nSkip) diff --git a/sc/source/filter/xml/XMLStylesExportHelper.cxx b/sc/source/filter/xml/XMLStylesExportHelper.cxx index 4f1b820bf071..b21f2dea976e 100644 --- a/sc/source/filter/xml/XMLStylesExportHelper.cxx +++ b/sc/source/filter/xml/XMLStylesExportHelper.cxx @@ -99,65 +99,65 @@ void ScMyValidationsContainer::AddValidation(const uno::Any& aTempAny, sal_Int32& nValidationIndex) { uno::Reference xPropertySet(aTempAny, uno::UNO_QUERY); - if (xPropertySet.is()) + if (!xPropertySet.is()) + return; + + OUString sErrorMessage; + xPropertySet->getPropertyValue(gsERRMESS) >>= sErrorMessage; + OUString sErrorTitle; + xPropertySet->getPropertyValue(gsERRTITLE) >>= sErrorTitle; + OUString sImputMessage; + xPropertySet->getPropertyValue(gsINPMESS) >>= sImputMessage; + OUString sImputTitle; + xPropertySet->getPropertyValue(gsINPTITLE) >>= sImputTitle; + bool bShowErrorMessage = ::cppu::any2bool(xPropertySet->getPropertyValue(gsSHOWERR)); + bool bShowImputMessage = ::cppu::any2bool(xPropertySet->getPropertyValue(gsSHOWINP)); + sheet::ValidationType aValidationType; + xPropertySet->getPropertyValue(gsTYPE) >>= aValidationType; + if (!(bShowErrorMessage || bShowImputMessage || aValidationType != sheet::ValidationType_ANY || + !sErrorMessage.isEmpty() || !sErrorTitle.isEmpty() || !sImputMessage.isEmpty() || !sImputTitle.isEmpty())) + return; + + ScMyValidation aValidation; + aValidation.sErrorMessage = sErrorMessage; + aValidation.sErrorTitle = sErrorTitle; + aValidation.sImputMessage = sImputMessage; + aValidation.sImputTitle = sImputTitle; + aValidation.bShowErrorMessage = bShowErrorMessage; + aValidation.bShowImputMessage = bShowImputMessage; + aValidation.aValidationType = aValidationType; + aValidation.bIgnoreBlanks = ::cppu::any2bool(xPropertySet->getPropertyValue(gsIGNOREBL)); + xPropertySet->getPropertyValue(gsSHOWLIST) >>= aValidation.nShowList; + xPropertySet->getPropertyValue(gsERRALSTY) >>= aValidation.aAlertStyle; + uno::Reference xCondition(xPropertySet, uno::UNO_QUERY); + if (xCondition.is()) { - OUString sErrorMessage; - xPropertySet->getPropertyValue(gsERRMESS) >>= sErrorMessage; - OUString sErrorTitle; - xPropertySet->getPropertyValue(gsERRTITLE) >>= sErrorTitle; - OUString sImputMessage; - xPropertySet->getPropertyValue(gsINPMESS) >>= sImputMessage; - OUString sImputTitle; - xPropertySet->getPropertyValue(gsINPTITLE) >>= sImputTitle; - bool bShowErrorMessage = ::cppu::any2bool(xPropertySet->getPropertyValue(gsSHOWERR)); - bool bShowImputMessage = ::cppu::any2bool(xPropertySet->getPropertyValue(gsSHOWINP)); - sheet::ValidationType aValidationType; - xPropertySet->getPropertyValue(gsTYPE) >>= aValidationType; - if (bShowErrorMessage || bShowImputMessage || aValidationType != sheet::ValidationType_ANY || - !sErrorMessage.isEmpty() || !sErrorTitle.isEmpty() || !sImputMessage.isEmpty() || !sImputTitle.isEmpty()) - { - ScMyValidation aValidation; - aValidation.sErrorMessage = sErrorMessage; - aValidation.sErrorTitle = sErrorTitle; - aValidation.sImputMessage = sImputMessage; - aValidation.sImputTitle = sImputTitle; - aValidation.bShowErrorMessage = bShowErrorMessage; - aValidation.bShowImputMessage = bShowImputMessage; - aValidation.aValidationType = aValidationType; - aValidation.bIgnoreBlanks = ::cppu::any2bool(xPropertySet->getPropertyValue(gsIGNOREBL)); - xPropertySet->getPropertyValue(gsSHOWLIST) >>= aValidation.nShowList; - xPropertySet->getPropertyValue(gsERRALSTY) >>= aValidation.aAlertStyle; - uno::Reference xCondition(xPropertySet, uno::UNO_QUERY); - if (xCondition.is()) - { - aValidation.sFormula1 = xCondition->getFormula1(); - aValidation.sFormula2 = xCondition->getFormula2(); - aValidation.aOperator = xCondition->getOperator(); - table::CellAddress aCellAddress= xCondition->getSourcePosition(); - aValidation.aBaseCell = ScAddress( static_cast(aCellAddress.Column), static_cast(aCellAddress.Row), aCellAddress.Sheet ); - } - //ScMyValidationRange aValidationRange; - bool bEqualFound(false); - sal_Int32 i(0); - sal_Int32 nCount(aValidationVec.size()); - while (i < nCount && !bEqualFound) - { - bEqualFound = aValidationVec[i].IsEqual(aValidation); - if (!bEqualFound) - ++i; - } - if (bEqualFound) - nValidationIndex = i; - else - { - sal_Int32 nNameIndex(nCount + 1); - OUString sCount(OUString::number(nNameIndex)); - aValidation.sName += "val"; - aValidation.sName += sCount; - aValidationVec.push_back(aValidation); - nValidationIndex = nCount; - } - } + aValidation.sFormula1 = xCondition->getFormula1(); + aValidation.sFormula2 = xCondition->getFormula2(); + aValidation.aOperator = xCondition->getOperator(); + table::CellAddress aCellAddress= xCondition->getSourcePosition(); + aValidation.aBaseCell = ScAddress( static_cast(aCellAddress.Column), static_cast(aCellAddress.Row), aCellAddress.Sheet ); + } + //ScMyValidationRange aValidationRange; + bool bEqualFound(false); + sal_Int32 i(0); + sal_Int32 nCount(aValidationVec.size()); + while (i < nCount && !bEqualFound) + { + bEqualFound = aValidationVec[i].IsEqual(aValidation); + if (!bEqualFound) + ++i; + } + if (bEqualFound) + nValidationIndex = i; + else + { + sal_Int32 nNameIndex(nCount + 1); + OUString sCount(OUString::number(nNameIndex)); + aValidation.sName += "val"; + aValidation.sName += sCount; + aValidationVec.push_back(aValidation); + nValidationIndex = nCount; } } @@ -297,126 +297,126 @@ void ScMyValidationsContainer::WriteMessage(ScXMLExport& rExport, pMessage.reset(new SvXMLElementExport(rExport, XML_NAMESPACE_TABLE, XML_HELP_MESSAGE, true, true)); else pMessage.reset(new SvXMLElementExport(rExport, XML_NAMESPACE_TABLE, XML_ERROR_MESSAGE, true, true)); - if (!sOUMessage.isEmpty()) + if (sOUMessage.isEmpty()) + return; + + sal_Int32 i(0); + OUStringBuffer sTemp; + OUString sText(convertLineEnd(sOUMessage, LINEEND_LF)); + bool bPrevCharWasSpace(true); + while(i < sText.getLength()) { - sal_Int32 i(0); - OUStringBuffer sTemp; - OUString sText(convertLineEnd(sOUMessage, LINEEND_LF)); - bool bPrevCharWasSpace(true); - while(i < sText.getLength()) - { - if( sText[i] == '\n') - { - SvXMLElementExport aElemP(rExport, XML_NAMESPACE_TEXT, XML_P, true, false); - rExport.GetTextParagraphExport()->exportCharacterData(sTemp.makeStringAndClear(), bPrevCharWasSpace); - bPrevCharWasSpace = true; // reset for start of next paragraph - } - else - sTemp.append(sText[i]); - ++i; - } - if (!sTemp.isEmpty()) + if( sText[i] == '\n') { SvXMLElementExport aElemP(rExport, XML_NAMESPACE_TEXT, XML_P, true, false); rExport.GetTextParagraphExport()->exportCharacterData(sTemp.makeStringAndClear(), bPrevCharWasSpace); + bPrevCharWasSpace = true; // reset for start of next paragraph } + else + sTemp.append(sText[i]); + ++i; + } + if (!sTemp.isEmpty()) + { + SvXMLElementExport aElemP(rExport, XML_NAMESPACE_TEXT, XML_P, true, false); + rExport.GetTextParagraphExport()->exportCharacterData(sTemp.makeStringAndClear(), bPrevCharWasSpace); } } void ScMyValidationsContainer::WriteValidations(ScXMLExport& rExport) { - if (!aValidationVec.empty()) + if (aValidationVec.empty()) + return; + + SvXMLElementExport aElemVs(rExport, XML_NAMESPACE_TABLE, XML_CONTENT_VALIDATIONS, true, true); + for (const auto& rValidation : aValidationVec) { - SvXMLElementExport aElemVs(rExport, XML_NAMESPACE_TABLE, XML_CONTENT_VALIDATIONS, true, true); - for (const auto& rValidation : aValidationVec) + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_NAME, rValidation.sName); + OUString sCondition(GetCondition(rExport, rValidation)); + if (!sCondition.isEmpty()) { - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_NAME, rValidation.sName); - OUString sCondition(GetCondition(rExport, rValidation)); - if (!sCondition.isEmpty()) + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_CONDITION, sCondition); + if (rValidation.bIgnoreBlanks) + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_ALLOW_EMPTY_CELL, XML_TRUE); + else + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_ALLOW_EMPTY_CELL, XML_FALSE); + if (rValidation.aValidationType == sheet::ValidationType_LIST) { - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_CONDITION, sCondition); - if (rValidation.bIgnoreBlanks) - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_ALLOW_EMPTY_CELL, XML_TRUE); - else - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_ALLOW_EMPTY_CELL, XML_FALSE); - if (rValidation.aValidationType == sheet::ValidationType_LIST) + switch (rValidation.nShowList) { - switch (rValidation.nShowList) - { - case sheet::TableValidationVisibility::INVISIBLE: - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_DISPLAY_LIST, XML_NO); - break; - case sheet::TableValidationVisibility::UNSORTED: - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_DISPLAY_LIST, XML_UNSORTED); - break; - case sheet::TableValidationVisibility::SORTEDASCENDING: - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_DISPLAY_LIST, XML_SORT_ASCENDING); - break; - default: - OSL_FAIL("unknown ListType"); - } + case sheet::TableValidationVisibility::INVISIBLE: + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_DISPLAY_LIST, XML_NO); + break; + case sheet::TableValidationVisibility::UNSORTED: + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_DISPLAY_LIST, XML_UNSORTED); + break; + case sheet::TableValidationVisibility::SORTEDASCENDING: + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_DISPLAY_LIST, XML_SORT_ASCENDING); + break; + default: + OSL_FAIL("unknown ListType"); } } - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_BASE_CELL_ADDRESS, GetBaseCellAddress(rExport.GetDocument(), rValidation.aBaseCell)); - SvXMLElementExport aElemV(rExport, XML_NAMESPACE_TABLE, XML_CONTENT_VALIDATION, true, true); - if (rValidation.bShowImputMessage || !rValidation.sImputMessage.isEmpty() || !rValidation.sImputTitle.isEmpty()) - { - WriteMessage(rExport, rValidation.sImputTitle, rValidation.sImputMessage, rValidation.bShowImputMessage, true); - } - if (rValidation.bShowErrorMessage || !rValidation.sErrorMessage.isEmpty() || !rValidation.sErrorTitle.isEmpty()) + } + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_BASE_CELL_ADDRESS, GetBaseCellAddress(rExport.GetDocument(), rValidation.aBaseCell)); + SvXMLElementExport aElemV(rExport, XML_NAMESPACE_TABLE, XML_CONTENT_VALIDATION, true, true); + if (rValidation.bShowImputMessage || !rValidation.sImputMessage.isEmpty() || !rValidation.sImputTitle.isEmpty()) + { + WriteMessage(rExport, rValidation.sImputTitle, rValidation.sImputMessage, rValidation.bShowImputMessage, true); + } + if (rValidation.bShowErrorMessage || !rValidation.sErrorMessage.isEmpty() || !rValidation.sErrorTitle.isEmpty()) + { + switch (rValidation.aAlertStyle) { - switch (rValidation.aAlertStyle) + case sheet::ValidationAlertStyle_INFO : + { + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_MESSAGE_TYPE, XML_INFORMATION); + WriteMessage(rExport, rValidation.sErrorTitle, rValidation.sErrorMessage, rValidation.bShowErrorMessage, false); + } + break; + case sheet::ValidationAlertStyle_WARNING : + { + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_MESSAGE_TYPE, XML_WARNING); + WriteMessage(rExport, rValidation.sErrorTitle, rValidation.sErrorMessage, rValidation.bShowErrorMessage, false); + } + break; + case sheet::ValidationAlertStyle_STOP : + { + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_MESSAGE_TYPE, XML_STOP); + WriteMessage(rExport, rValidation.sErrorTitle, rValidation.sErrorMessage, rValidation.bShowErrorMessage, false); + } + break; + case sheet::ValidationAlertStyle_MACRO : { - case sheet::ValidationAlertStyle_INFO : - { - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_MESSAGE_TYPE, XML_INFORMATION); - WriteMessage(rExport, rValidation.sErrorTitle, rValidation.sErrorMessage, rValidation.bShowErrorMessage, false); - } - break; - case sheet::ValidationAlertStyle_WARNING : - { - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_MESSAGE_TYPE, XML_WARNING); - WriteMessage(rExport, rValidation.sErrorTitle, rValidation.sErrorMessage, rValidation.bShowErrorMessage, false); - } - break; - case sheet::ValidationAlertStyle_STOP : - { - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_MESSAGE_TYPE, XML_STOP); - WriteMessage(rExport, rValidation.sErrorTitle, rValidation.sErrorMessage, rValidation.bShowErrorMessage, false); - } - break; - case sheet::ValidationAlertStyle_MACRO : { - { - //rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_NAME, aItr->sErrorTitle); - if (rValidation.bShowErrorMessage) - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_EXECUTE, XML_TRUE); - else - rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_EXECUTE, XML_FALSE); - SvXMLElementExport aEMElem(rExport, XML_NAMESPACE_TABLE, XML_ERROR_MACRO, true, true); - } - { - // #i47525# for a script URL the type and the property name for the URL - // are both "Script", for a simple macro name the type is "StarBasic" - // and the property name is "MacroName". - bool bScriptURL = SfxApplication::IsXScriptURL( rValidation.sErrorTitle ); - - const OUString sScript("Script"); - uno::Sequence aSeq( comphelper::InitPropertySequence({ - { "EventType", uno::Any(bScriptURL ? sScript : OUString("StarBasic")) }, - { "Library", uno::Any(OUString()) }, - { bScriptURL ? sScript : OUString("MacroName"), uno::Any(rValidation.sErrorTitle) } - })); - // 2) export the sequence - rExport.GetEventExport().ExportSingleEvent( aSeq, "OnError"); - } + //rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_NAME, aItr->sErrorTitle); + if (rValidation.bShowErrorMessage) + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_EXECUTE, XML_TRUE); + else + rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_EXECUTE, XML_FALSE); + SvXMLElementExport aEMElem(rExport, XML_NAMESPACE_TABLE, XML_ERROR_MACRO, true, true); } - break; - default: { - // added to avoid warnings + // #i47525# for a script URL the type and the property name for the URL + // are both "Script", for a simple macro name the type is "StarBasic" + // and the property name is "MacroName". + bool bScriptURL = SfxApplication::IsXScriptURL( rValidation.sErrorTitle ); + + const OUString sScript("Script"); + uno::Sequence aSeq( comphelper::InitPropertySequence({ + { "EventType", uno::Any(bScriptURL ? sScript : OUString("StarBasic")) }, + { "Library", uno::Any(OUString()) }, + { bScriptURL ? sScript : OUString("MacroName"), uno::Any(rValidation.sErrorTitle) } + })); + // 2) export the sequence + rExport.GetEventExport().ExportSingleEvent( aSeq, "OnError"); } } + break; + default: + { + // added to avoid warnings + } } } } diff --git a/sc/source/filter/xml/XMLTableMasterPageExport.cxx b/sc/source/filter/xml/XMLTableMasterPageExport.cxx index 69cbda1f83a1..f8bf9d1b0b5e 100644 --- a/sc/source/filter/xml/XMLTableMasterPageExport.cxx +++ b/sc/source/filter/xml/XMLTableMasterPageExport.cxx @@ -65,45 +65,45 @@ void XMLTableMasterPageExport::exportHeaderFooter(const css::uno::Reference < cs const XMLTokenEnum aName, const bool bDisplay) { - if( xHeaderFooter.is() ) + if( !xHeaderFooter.is() ) + return; + + Reference < XText > xCenter(xHeaderFooter->getCenterText()); + Reference < XText > xLeft(xHeaderFooter->getLeftText()); + Reference < XText > xRight(xHeaderFooter->getRightText()); + if (!(xCenter.is() && xLeft.is() && xRight.is())) + return; + + OUString sCenter (xCenter->getString()); + OUString sLeft (xLeft->getString()); + OUString sRight (xRight->getString()); + + if( !bDisplay ) + GetExport().AddAttribute( XML_NAMESPACE_STYLE, + XML_DISPLAY, XML_FALSE ); + SvXMLElementExport aElem( GetExport(), XML_NAMESPACE_STYLE, + aName, true, true ); + if (!sCenter.isEmpty() && sLeft.isEmpty() && sRight.isEmpty()) + exportHeaderFooterContent( xCenter, false, false ); + else { - Reference < XText > xCenter(xHeaderFooter->getCenterText()); - Reference < XText > xLeft(xHeaderFooter->getLeftText()); - Reference < XText > xRight(xHeaderFooter->getRightText()); - if (xCenter.is() && xLeft.is() && xRight.is()) + if (!sLeft.isEmpty()) + { + SvXMLElementExport aSubElem( GetExport(), XML_NAMESPACE_STYLE, + XML_REGION_LEFT, true, true ); + exportHeaderFooterContent( xLeft, false, false ); + } + if (!sCenter.isEmpty()) + { + SvXMLElementExport aSubElem( GetExport(), XML_NAMESPACE_STYLE, + XML_REGION_CENTER, true, true ); + exportHeaderFooterContent( xCenter, false, false ); + } + if (!sRight.isEmpty()) { - OUString sCenter (xCenter->getString()); - OUString sLeft (xLeft->getString()); - OUString sRight (xRight->getString()); - - if( !bDisplay ) - GetExport().AddAttribute( XML_NAMESPACE_STYLE, - XML_DISPLAY, XML_FALSE ); - SvXMLElementExport aElem( GetExport(), XML_NAMESPACE_STYLE, - aName, true, true ); - if (!sCenter.isEmpty() && sLeft.isEmpty() && sRight.isEmpty()) - exportHeaderFooterContent( xCenter, false, false ); - else - { - if (!sLeft.isEmpty()) - { - SvXMLElementExport aSubElem( GetExport(), XML_NAMESPACE_STYLE, - XML_REGION_LEFT, true, true ); - exportHeaderFooterContent( xLeft, false, false ); - } - if (!sCenter.isEmpty()) - { - SvXMLElementExport aSubElem( GetExport(), XML_NAMESPACE_STYLE, - XML_REGION_CENTER, true, true ); - exportHeaderFooterContent( xCenter, false, false ); - } - if (!sRight.isEmpty()) - { - SvXMLElementExport aSubElem( GetExport(), XML_NAMESPACE_STYLE, - XML_REGION_RIGHT, true, true ); - exportHeaderFooterContent( xRight, false, false ); - } - } + SvXMLElementExport aSubElem( GetExport(), XML_NAMESPACE_STYLE, + XML_REGION_RIGHT, true, true ); + exportHeaderFooterContent( xRight, false, false ); } } } diff --git a/sc/source/filter/xml/XMLTableShapeResizer.cxx b/sc/source/filter/xml/XMLTableShapeResizer.cxx index 105bbb7cbeb5..84577bcaf2e6 100644 --- a/sc/source/filter/xml/XMLTableShapeResizer.cxx +++ b/sc/source/filter/xml/XMLTableShapeResizer.cxx @@ -85,25 +85,25 @@ void ScMyOLEFixer::CreateChartListener(ScDocument* pDoc, const sal_Unicode cSep = ScCompiler::GetNativeSymbolChar(ocSep); ScRefTokenHelper::compileRangeRepresentation( *pRefTokens, aRangeStr, pDoc, cSep, pDoc->GetGrammar()); - if (!pRefTokens->empty()) - { - ScChartListener* pCL(new ScChartListener(rName, pDoc, std::move(pRefTokens))); - - //for loading binary files e.g. - //if we have the flat filter we need to set the dirty flag thus the visible charts get repainted - //otherwise the charts keep their first visual representation which was created at a moment where the calc itself was not loaded completely and is therefore incorrect - if( (rImport.getImportFlags() & SvXMLImportFlags::ALL) == SvXMLImportFlags::ALL ) - pCL->SetDirty( true ); - else - { - // #i104899# If a formula cell is already dirty, further changes aren't propagated. - // This can happen easily now that row heights aren't updated for all sheets. - pDoc->InterpretDirtyCells( *pCL->GetRangeList() ); - } + if (pRefTokens->empty()) + return; - pCollection->insert( pCL ); - pCL->StartListeningTo(); + ScChartListener* pCL(new ScChartListener(rName, pDoc, std::move(pRefTokens))); + + //for loading binary files e.g. + //if we have the flat filter we need to set the dirty flag thus the visible charts get repainted + //otherwise the charts keep their first visual representation which was created at a moment where the calc itself was not loaded completely and is therefore incorrect + if( (rImport.getImportFlags() & SvXMLImportFlags::ALL) == SvXMLImportFlags::ALL ) + pCL->SetDirty( true ); + else + { + // #i104899# If a formula cell is already dirty, further changes aren't propagated. + // This can happen easily now that row heights aren't updated for all sheets. + pDoc->InterpretDirtyCells( *pCL->GetRangeList() ); } + + pCollection->insert( pCL ); + pCL->StartListeningTo(); } void ScMyOLEFixer::AddOLE(const uno::Reference & rShape, @@ -117,32 +117,32 @@ void ScMyOLEFixer::AddOLE(const uno::Reference & rShape, void ScMyOLEFixer::FixupOLEs() { - if (!aShapes.empty() && rImport.GetModel().is()) - { - OUString sPersistName ("PersistName"); - ScDocument* pDoc(rImport.GetDocument()); + if (!(!aShapes.empty() && rImport.GetModel().is())) + return; + + OUString sPersistName ("PersistName"); + ScDocument* pDoc(rImport.GetDocument()); - ScXMLImport::MutexGuard aGuard(rImport); + ScXMLImport::MutexGuard aGuard(rImport); - for (auto const& shape : aShapes) + for (auto const& shape : aShapes) + { + // #i78086# also call CreateChartListener for invalid position (anchored to sheet) + if (!IsOLE(shape.xShape)) + OSL_FAIL("Only OLEs should be in here now"); + + if (IsOLE(shape.xShape)) { - // #i78086# also call CreateChartListener for invalid position (anchored to sheet) - if (!IsOLE(shape.xShape)) - OSL_FAIL("Only OLEs should be in here now"); - - if (IsOLE(shape.xShape)) - { - uno::Reference < beans::XPropertySet > xShapeProps ( shape.xShape, uno::UNO_QUERY ); - uno::Reference < beans::XPropertySetInfo > xShapeInfo(xShapeProps->getPropertySetInfo()); - - OUString sName; - if (pDoc && xShapeProps.is() && xShapeInfo.is() && xShapeInfo->hasPropertyByName(sPersistName) && - (xShapeProps->getPropertyValue(sPersistName) >>= sName)) - CreateChartListener(pDoc, sName, shape.sRangeList); - } + uno::Reference < beans::XPropertySet > xShapeProps ( shape.xShape, uno::UNO_QUERY ); + uno::Reference < beans::XPropertySetInfo > xShapeInfo(xShapeProps->getPropertySetInfo()); + + OUString sName; + if (pDoc && xShapeProps.is() && xShapeInfo.is() && xShapeInfo->hasPropertyByName(sPersistName) && + (xShapeProps->getPropertyValue(sPersistName) >>= sName)) + CreateChartListener(pDoc, sName, shape.sRangeList); } - aShapes.clear(); } + aShapes.clear(); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/filter/xml/XMLTableSourceContext.cxx b/sc/source/filter/xml/XMLTableSourceContext.cxx index 58d3f44536d1..f3cf2e547123 100644 --- a/sc/source/filter/xml/XMLTableSourceContext.cxx +++ b/sc/source/filter/xml/XMLTableSourceContext.cxx @@ -41,34 +41,34 @@ ScXMLTableSourceContext::ScXMLTableSourceContext( ScXMLImport& rImport, nRefresh(0), nMode(sheet::SheetLinkMode_NORMAL) { - if ( rAttrList.is() ) + if ( !rAttrList.is() ) + return; + + for (auto &aIter : *rAttrList) { - for (auto &aIter : *rAttrList) + switch (aIter.getToken()) { - switch (aIter.getToken()) - { - case XML_ELEMENT( XLINK, XML_HREF ): - sLink = GetScImport().GetAbsoluteReference(aIter.toString()); - break; - case XML_ELEMENT( TABLE, XML_TABLE_NAME ): - sTableName = aIter.toString(); - break; - case XML_ELEMENT( TABLE, XML_FILTER_NAME): - sFilterName = aIter.toString(); - break; - case XML_ELEMENT( TABLE, XML_FILTER_OPTIONS ): - sFilterOptions = aIter.toString(); - break; - case XML_ELEMENT( TABLE, XML_MODE ): - if (IsXMLToken(aIter, XML_COPY_RESULTS_ONLY)) - nMode = sheet::SheetLinkMode_VALUE; - break; - case XML_ELEMENT( TABLE, XML_REFRESH_DELAY ): - double fTime; - if (::sax::Converter::convertDuration( fTime, aIter.toString() )) - nRefresh = std::max( static_cast(fTime * 86400.0), sal_Int32(0) ); - break; - } + case XML_ELEMENT( XLINK, XML_HREF ): + sLink = GetScImport().GetAbsoluteReference(aIter.toString()); + break; + case XML_ELEMENT( TABLE, XML_TABLE_NAME ): + sTableName = aIter.toString(); + break; + case XML_ELEMENT( TABLE, XML_FILTER_NAME): + sFilterName = aIter.toString(); + break; + case XML_ELEMENT( TABLE, XML_FILTER_OPTIONS ): + sFilterOptions = aIter.toString(); + break; + case XML_ELEMENT( TABLE, XML_MODE ): + if (IsXMLToken(aIter, XML_COPY_RESULTS_ONLY)) + nMode = sheet::SheetLinkMode_VALUE; + break; + case XML_ELEMENT( TABLE, XML_REFRESH_DELAY ): + double fTime; + if (::sax::Converter::convertDuration( fTime, aIter.toString() )) + nRefresh = std::max( static_cast(fTime * 86400.0), sal_Int32(0) ); + break; } } } @@ -85,32 +85,32 @@ uno::Reference< xml::sax::XFastContextHandler > SAL_CALL ScXMLTableSourceContext void SAL_CALL ScXMLTableSourceContext::endFastElement( sal_Int32 /*nElement*/ ) { - if (!sLink.isEmpty()) - { - uno::Reference xLinkable (GetScImport().GetTables().GetCurrentXSheet(), uno::UNO_QUERY); - ScDocument* pDoc(GetScImport().GetDocument()); - if (xLinkable.is() && pDoc) - { - ScXMLImport::MutexGuard aGuard(GetScImport()); - if (pDoc->RenameTab( GetScImport().GetTables().GetCurrentSheet(), - GetScImport().GetTables().GetCurrentSheetName(), true/*bExternalDocument*/)) - { - sLink = ScGlobal::GetAbsDocName( sLink, pDoc->GetDocumentShell() ); - if (sFilterName.isEmpty()) - ScDocumentLoader::GetFilterName( sLink, sFilterName, sFilterOptions, false, false ); + if (sLink.isEmpty()) + return; - ScLinkMode nLinkMode = ScLinkMode::NONE; - if ( nMode == sheet::SheetLinkMode_NORMAL ) - nLinkMode = ScLinkMode::NORMAL; - else if ( nMode == sheet::SheetLinkMode_VALUE ) - nLinkMode = ScLinkMode::VALUE; + uno::Reference xLinkable (GetScImport().GetTables().GetCurrentXSheet(), uno::UNO_QUERY); + ScDocument* pDoc(GetScImport().GetDocument()); + if (!(xLinkable.is() && pDoc)) + return; - pDoc->SetLink( GetScImport().GetTables().GetCurrentSheet(), - nLinkMode, sLink, sFilterName, sFilterOptions, - sTableName, nRefresh ); - } - } - } + ScXMLImport::MutexGuard aGuard(GetScImport()); + if (!pDoc->RenameTab( GetScImport().GetTables().GetCurrentSheet(), + GetScImport().GetTables().GetCurrentSheetName(), true/*bExternalDocument*/)) + return; + + sLink = ScGlobal::GetAbsDocName( sLink, pDoc->GetDocumentShell() ); + if (sFilterName.isEmpty()) + ScDocumentLoader::GetFilterName( sLink, sFilterName, sFilterOptions, false, false ); + + ScLinkMode nLinkMode = ScLinkMode::NONE; + if ( nMode == sheet::SheetLinkMode_NORMAL ) + nLinkMode = ScLinkMode::NORMAL; + else if ( nMode == sheet::SheetLinkMode_VALUE ) + nLinkMode = ScLinkMode::VALUE; + + pDoc->SetLink( GetScImport().GetTables().GetCurrentSheet(), + nLinkMode, sLink, sFilterName, sFilterOptions, + sTableName, nRefresh ); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/filter/xml/XMLTrackedChangesContext.cxx b/sc/source/filter/xml/XMLTrackedChangesContext.cxx index 5f8a1368d120..b4f656133819 100644 --- a/sc/source/filter/xml/XMLTrackedChangesContext.cxx +++ b/sc/source/filter/xml/XMLTrackedChangesContext.cxx @@ -346,17 +346,17 @@ ScXMLTrackedChangesContext::ScXMLTrackedChangesContext( ScXMLImport& rImport, { rImport.LockSolarMutex(); - if ( rAttrList.is() ) + if ( !rAttrList.is() ) + return; + + auto aIter( rAttrList->find( XML_ELEMENT( TABLE, XML_PROTECTION_KEY ) ) ); + if (aIter != rAttrList->end()) { - auto aIter( rAttrList->find( XML_ELEMENT( TABLE, XML_PROTECTION_KEY ) ) ); - if (aIter != rAttrList->end()) + if( !aIter.isEmpty() ) { - if( !aIter.isEmpty() ) - { - uno::Sequence aPass; - ::comphelper::Base64::decode( aPass, aIter.toString() ); - pChangeTrackingImportHelper->SetProtection(aPass); - } + uno::Sequence aPass; + ::comphelper::Base64::decode( aPass, aIter.toString() ); + pChangeTrackingImportHelper->SetProtection(aPass); } } } @@ -835,22 +835,22 @@ SvXMLImportContextRef ScXMLChangeCellContext::CreateChildContext( sal_uInt16 nPr void ScXMLChangeCellContext::CreateTextPContext(bool bIsNewParagraph) { - if (GetScImport().GetDocument()) + if (!GetScImport().GetDocument()) + return; + + mpEditTextObj = new ScEditEngineTextObj(); + mpEditTextObj->GetEditEngine()->SetEditTextObjectPool(GetScImport().GetDocument()->GetEditPool()); + uno::Reference xText(mpEditTextObj.get()); + if (xText.is()) { - mpEditTextObj = new ScEditEngineTextObj(); - mpEditTextObj->GetEditEngine()->SetEditTextObjectPool(GetScImport().GetDocument()->GetEditPool()); - uno::Reference xText(mpEditTextObj.get()); - if (xText.is()) + uno::Reference xTextCursor(xText->createTextCursor()); + if (bIsNewParagraph) { - uno::Reference xTextCursor(xText->createTextCursor()); - if (bIsNewParagraph) - { - xText->setString(sText); - xTextCursor->gotoEnd(false); - xText->insertControlCharacter(xTextCursor, text::ControlCharacter::PARAGRAPH_BREAK, false); - } - GetScImport().GetTextImport()->SetCursor(xTextCursor); + xText->setString(sText); + xTextCursor->gotoEnd(false); + xText->insertControlCharacter(xTextCursor, text::ControlCharacter::PARAGRAPH_BREAK, false); } + GetScImport().GetTextImport()->SetCursor(xTextCursor); } } diff --git a/sc/source/filter/xml/datastreamimport.cxx b/sc/source/filter/xml/datastreamimport.cxx index 9a7a708bd281..3552123ec660 100644 --- a/sc/source/filter/xml/datastreamimport.cxx +++ b/sc/source/filter/xml/datastreamimport.cxx @@ -26,35 +26,35 @@ ScXMLDataStreamContext::ScXMLDataStreamContext( mbRefreshOnEmpty(false), meInsertPos(sc::ImportPostProcessData::DataStream::InsertBottom) { - if ( rAttrList.is() ) + if ( !rAttrList.is() ) + return; + + for (auto &aIter : *rAttrList) { - for (auto &aIter : *rAttrList) + switch ( aIter.getToken() ) { - switch ( aIter.getToken() ) + case XML_ELEMENT( XLINK, XML_HREF ): + maURL = GetScImport().GetAbsoluteReference( aIter.toString() ); + break; + case XML_ELEMENT( TABLE, XML_TARGET_RANGE_ADDRESS ): { - case XML_ELEMENT( XLINK, XML_HREF ): - maURL = GetScImport().GetAbsoluteReference( aIter.toString() ); - break; - case XML_ELEMENT( TABLE, XML_TARGET_RANGE_ADDRESS ): - { - ScDocument* pDoc = GetScImport().GetDocument(); - sal_Int32 nOffset = 0; - if (!ScRangeStringConverter::GetRangeFromString( - maRange, aIter.toString(), pDoc, formula::FormulaGrammar::CONV_OOO, nOffset)) - maRange.SetInvalid(); - } - break; - case XML_ELEMENT( CALC_EXT, XML_EMPTY_LINE_REFRESH ): - mbRefreshOnEmpty = IsXMLToken( aIter, XML_TRUE ); - break; - case XML_ELEMENT( CALC_EXT, XML_INSERTION_POSITION ): - meInsertPos = IsXMLToken( aIter, XML_TOP ) ? - sc::ImportPostProcessData::DataStream::InsertTop : - sc::ImportPostProcessData::DataStream::InsertBottom; - break; - default: - ; + ScDocument* pDoc = GetScImport().GetDocument(); + sal_Int32 nOffset = 0; + if (!ScRangeStringConverter::GetRangeFromString( + maRange, aIter.toString(), pDoc, formula::FormulaGrammar::CONV_OOO, nOffset)) + maRange.SetInvalid(); } + break; + case XML_ELEMENT( CALC_EXT, XML_EMPTY_LINE_REFRESH ): + mbRefreshOnEmpty = IsXMLToken( aIter, XML_TRUE ); + break; + case XML_ELEMENT( CALC_EXT, XML_INSERTION_POSITION ): + meInsertPos = IsXMLToken( aIter, XML_TOP ) ? + sc::ImportPostProcessData::DataStream::InsertTop : + sc::ImportPostProcessData::DataStream::InsertBottom; + break; + default: + ; } } } diff --git a/sc/source/filter/xml/xmlbodyi.cxx b/sc/source/filter/xml/xmlbodyi.cxx index 81bf3e95124f..753b9cfb1614 100644 --- a/sc/source/filter/xml/xmlbodyi.cxx +++ b/sc/source/filter/xml/xmlbodyi.cxx @@ -237,37 +237,37 @@ void SAL_CALL ScXMLBodyContext::endFastElement(sal_Int32 nElement) ScDocument* pDoc = GetScImport().GetDocument(); ScMyImpDetectiveOp aDetOp; - if (pDoc && GetScImport().GetModel().is()) + if (!(pDoc && GetScImport().GetModel().is())) + return; + + if (pDetOpArray) { - if (pDetOpArray) + pDetOpArray->Sort(); + while( pDetOpArray->GetFirstOp( aDetOp ) ) { - pDetOpArray->Sort(); - while( pDetOpArray->GetFirstOp( aDetOp ) ) - { - ScDetOpData aOpData( aDetOp.aPosition, aDetOp.eOpType ); - pDoc->AddDetectiveOperation( aOpData ); - } + ScDetOpData aOpData( aDetOp.aPosition, aDetOp.eOpType ); + pDoc->AddDetectiveOperation( aOpData ); } + } - if (pChangeTrackingImportHelper) - pChangeTrackingImportHelper->CreateChangeTrack(GetScImport().GetDocument()); + if (pChangeTrackingImportHelper) + pChangeTrackingImportHelper->CreateChangeTrack(GetScImport().GetDocument()); - // #i37959# handle document protection after the sheet settings - if (bProtected) - { - std::unique_ptr pProtection(new ScDocProtection); - pProtection->setProtected(true); + // #i37959# handle document protection after the sheet settings + if (!bProtected) + return; - uno::Sequence aPass; - if (!sPassword.isEmpty()) - { - ::comphelper::Base64::decode(aPass, sPassword); - pProtection->setPasswordHash(aPass, meHash1, meHash2); - } + std::unique_ptr pProtection(new ScDocProtection); + pProtection->setProtected(true); - pDoc->SetDocProtection(pProtection.get()); - } + uno::Sequence aPass; + if (!sPassword.isEmpty()) + { + ::comphelper::Base64::decode(aPass, sPassword); + pProtection->setPasswordHash(aPass, meHash1, meHash2); } + + pDoc->SetDocProtection(pProtection.get()); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/filter/xml/xmlcelli.cxx b/sc/source/filter/xml/xmlcelli.cxx index e397192ceaea..590db3a8224c 100644 --- a/sc/source/filter/xml/xmlcelli.cxx +++ b/sc/source/filter/xml/xmlcelli.cxx @@ -780,58 +780,58 @@ ScValidErrorStyle validAlertToValidError( const sheet::ValidationAlertStyle eVAl void ScXMLTableRowCellContext::SetContentValidation( const ScRange& rScRange ) { - if (maContentValidationName) - { - ScDocument* pDoc = rXMLImport.GetDocument(); - ScMyImportValidation aValidation; - aValidation.eGrammar1 = aValidation.eGrammar2 = pDoc->GetStorageGrammar(); - if( rXMLImport.GetValidation(*maContentValidationName, aValidation) ) - { - ScValidationData aScValidationData( - validationTypeToMode(aValidation.aValidationType), - ScConditionEntry::GetModeFromApi(aValidation.aOperator), - aValidation.sFormula1, aValidation.sFormula2, pDoc, ScAddress(), - aValidation.sFormulaNmsp1, aValidation.sFormulaNmsp2, - aValidation.eGrammar1, aValidation.eGrammar2 - ); - - aScValidationData.SetIgnoreBlank( aValidation.bIgnoreBlanks ); - aScValidationData.SetListType( aValidation.nShowList ); - - // set strings for error / input even if disabled (and disable afterwards) - aScValidationData.SetInput( aValidation.sImputTitle, aValidation.sImputMessage ); - if( !aValidation.bShowImputMessage ) - aScValidationData.ResetInput(); - aScValidationData.SetError( aValidation.sErrorTitle, aValidation.sErrorMessage, validAlertToValidError(aValidation.aAlertStyle) ); - if( !aValidation.bShowErrorMessage ) - aScValidationData.ResetError(); - - if( !aValidation.sBaseCellAddress.isEmpty() ) - aScValidationData.SetSrcString( aValidation.sBaseCellAddress ); - - sal_uLong nIndex = pDoc->AddValidationEntry( aScValidationData ); - - ScPatternAttr aPattern( pDoc->GetPool() ); - aPattern.GetItemSet().Put( SfxUInt32Item( ATTR_VALIDDATA, nIndex ) ); - if( rScRange.aStart == rScRange.aEnd ) //for a single cell - { - pDoc->ApplyPattern( rScRange.aStart.Col(), rScRange.aStart.Row(), - rScRange.aStart.Tab(), aPattern ); - } - else //for repeating cells - { - pDoc->ApplyPatternAreaTab( rScRange.aStart.Col(), rScRange.aStart.Row(), - rScRange.aEnd.Col(), rScRange.aEnd.Row(), - rScRange.aStart.Tab(), aPattern ); - } + if (!maContentValidationName) + return; - // is the below still needed? - // For now, any sheet with validity is blocked from stream-copying. - // Later, the validation names could be stored along with the style names. - ScSheetSaveData* pSheetData = comphelper::getUnoTunnelImplementation(GetImport().GetModel())->GetSheetSaveData(); - pSheetData->BlockSheet( GetScImport().GetTables().GetCurrentSheet() ); - } + ScDocument* pDoc = rXMLImport.GetDocument(); + ScMyImportValidation aValidation; + aValidation.eGrammar1 = aValidation.eGrammar2 = pDoc->GetStorageGrammar(); + if( !rXMLImport.GetValidation(*maContentValidationName, aValidation) ) + return; + + ScValidationData aScValidationData( + validationTypeToMode(aValidation.aValidationType), + ScConditionEntry::GetModeFromApi(aValidation.aOperator), + aValidation.sFormula1, aValidation.sFormula2, pDoc, ScAddress(), + aValidation.sFormulaNmsp1, aValidation.sFormulaNmsp2, + aValidation.eGrammar1, aValidation.eGrammar2 + ); + + aScValidationData.SetIgnoreBlank( aValidation.bIgnoreBlanks ); + aScValidationData.SetListType( aValidation.nShowList ); + + // set strings for error / input even if disabled (and disable afterwards) + aScValidationData.SetInput( aValidation.sImputTitle, aValidation.sImputMessage ); + if( !aValidation.bShowImputMessage ) + aScValidationData.ResetInput(); + aScValidationData.SetError( aValidation.sErrorTitle, aValidation.sErrorMessage, validAlertToValidError(aValidation.aAlertStyle) ); + if( !aValidation.bShowErrorMessage ) + aScValidationData.ResetError(); + + if( !aValidation.sBaseCellAddress.isEmpty() ) + aScValidationData.SetSrcString( aValidation.sBaseCellAddress ); + + sal_uLong nIndex = pDoc->AddValidationEntry( aScValidationData ); + + ScPatternAttr aPattern( pDoc->GetPool() ); + aPattern.GetItemSet().Put( SfxUInt32Item( ATTR_VALIDDATA, nIndex ) ); + if( rScRange.aStart == rScRange.aEnd ) //for a single cell + { + pDoc->ApplyPattern( rScRange.aStart.Col(), rScRange.aStart.Row(), + rScRange.aStart.Tab(), aPattern ); } + else //for repeating cells + { + pDoc->ApplyPatternAreaTab( rScRange.aStart.Col(), rScRange.aStart.Row(), + rScRange.aEnd.Col(), rScRange.aEnd.Row(), + rScRange.aStart.Tab(), aPattern ); + } + + // is the below still needed? + // For now, any sheet with validity is blocked from stream-copying. + // Later, the validation names could be stored along with the style names. + ScSheetSaveData* pSheetData = comphelper::getUnoTunnelImplementation(GetImport().GetModel())->GetSheetSaveData(); + pSheetData->BlockSheet( GetScImport().GetTables().GetCurrentSheet() ); } void ScXMLTableRowCellContext::SetContentValidation( const ScAddress& rCellPos ) @@ -947,20 +947,20 @@ void ScXMLTableRowCellContext::SetAnnotation(const ScAddress& rPos) void ScXMLTableRowCellContext::SetDetectiveObj( const ScAddress& rPosition ) { ScDocument* pDoc = rXMLImport.GetDocument(); - if( pDoc && cellExists(*pDoc, rPosition) && pDetectiveObjVec && !pDetectiveObjVec->empty() ) + if( !(pDoc && cellExists(*pDoc, rPosition) && pDetectiveObjVec && !pDetectiveObjVec->empty()) ) + return; + + LockSolarMutex(); + ScDetectiveFunc aDetFunc( pDoc, rPosition.Tab() ); + uno::Reference xShapesIndex = rXMLImport.GetTables().GetCurrentXShapes(); // make draw page + for(const auto& rDetectiveObj : *pDetectiveObjVec) { - LockSolarMutex(); - ScDetectiveFunc aDetFunc( pDoc, rPosition.Tab() ); - uno::Reference xShapesIndex = rXMLImport.GetTables().GetCurrentXShapes(); // make draw page - for(const auto& rDetectiveObj : *pDetectiveObjVec) + aDetFunc.InsertObject( rDetectiveObj.eObjType, rPosition, rDetectiveObj.aSourceRange, rDetectiveObj.bHasError ); + if (xShapesIndex.is()) { - aDetFunc.InsertObject( rDetectiveObj.eObjType, rPosition, rDetectiveObj.aSourceRange, rDetectiveObj.bHasError ); - if (xShapesIndex.is()) - { - sal_Int32 nShapes = xShapesIndex->getCount(); - uno::Reference < drawing::XShape > xShape; - rXMLImport.GetShapeImport()->shapeWithZIndexAdded(xShape, nShapes); - } + sal_Int32 nShapes = xShapesIndex->getCount(); + uno::Reference < drawing::XShape > xShape; + rXMLImport.GetShapeImport()->shapeWithZIndexAdded(xShape, nShapes); } } } @@ -969,62 +969,62 @@ void ScXMLTableRowCellContext::SetDetectiveObj( const ScAddress& rPosition ) void ScXMLTableRowCellContext::SetCellRangeSource( const ScAddress& rPosition ) { ScDocument* pDoc = rXMLImport.GetDocument(); - if( pDoc && cellExists(*pDoc, rPosition) && pCellRangeSource && !pCellRangeSource->sSourceStr.isEmpty() && - !pCellRangeSource->sFilterName.isEmpty() && !pCellRangeSource->sURL.isEmpty() ) - { - LockSolarMutex(); - ScRange aDestRange( rPosition.Col(), rPosition.Row(), rPosition.Tab(), - rPosition.Col() + static_cast(pCellRangeSource->nColumns - 1), - rPosition.Row() + static_cast(pCellRangeSource->nRows - 1), rPosition.Tab() ); - OUString sFilterName( pCellRangeSource->sFilterName ); - OUString sSourceStr( pCellRangeSource->sSourceStr ); - ScAreaLink* pLink = new ScAreaLink( pDoc->GetDocumentShell(), pCellRangeSource->sURL, - sFilterName, pCellRangeSource->sFilterOptions, sSourceStr, aDestRange, pCellRangeSource->nRefresh ); - sfx2::LinkManager* pLinkManager = pDoc->GetLinkManager(); - pLinkManager->InsertFileLink( *pLink, sfx2::SvBaseLinkObjectType::ClientFile, pCellRangeSource->sURL, &sFilterName, &sSourceStr ); - } + if( !(pDoc && cellExists(*pDoc, rPosition) && pCellRangeSource && !pCellRangeSource->sSourceStr.isEmpty() && + !pCellRangeSource->sFilterName.isEmpty() && !pCellRangeSource->sURL.isEmpty()) ) + return; + + LockSolarMutex(); + ScRange aDestRange( rPosition.Col(), rPosition.Row(), rPosition.Tab(), + rPosition.Col() + static_cast(pCellRangeSource->nColumns - 1), + rPosition.Row() + static_cast(pCellRangeSource->nRows - 1), rPosition.Tab() ); + OUString sFilterName( pCellRangeSource->sFilterName ); + OUString sSourceStr( pCellRangeSource->sSourceStr ); + ScAreaLink* pLink = new ScAreaLink( pDoc->GetDocumentShell(), pCellRangeSource->sURL, + sFilterName, pCellRangeSource->sFilterOptions, sSourceStr, aDestRange, pCellRangeSource->nRefresh ); + sfx2::LinkManager* pLinkManager = pDoc->GetLinkManager(); + pLinkManager->InsertFileLink( *pLink, sfx2::SvBaseLinkObjectType::ClientFile, pCellRangeSource->sURL, &sFilterName, &sSourceStr ); } void ScXMLTableRowCellContext::SetFormulaCell(ScFormulaCell* pFCell) const { - if(pFCell) - { - bool bMayForceNumberformat = true; + if(!pFCell) + return; - if(mbErrorValue) - { - // don't do anything here - // we need to recalc anyway - } - else if( bFormulaTextResult && maStringValue ) + bool bMayForceNumberformat = true; + + if(mbErrorValue) + { + // don't do anything here + // we need to recalc anyway + } + else if( bFormulaTextResult && maStringValue ) + { + if( !IsPossibleErrorString() ) { - if( !IsPossibleErrorString() ) - { - ScDocument* pDoc = rXMLImport.GetDocument(); - pFCell->SetHybridString(pDoc->GetSharedStringPool().intern(*maStringValue)); - pFCell->ResetDirty(); - // A General format doesn't force any other format for a string - // result, don't attempt to recalculate this later. - bMayForceNumberformat = false; - } + ScDocument* pDoc = rXMLImport.GetDocument(); + pFCell->SetHybridString(pDoc->GetSharedStringPool().intern(*maStringValue)); + pFCell->ResetDirty(); + // A General format doesn't force any other format for a string + // result, don't attempt to recalculate this later. + bMayForceNumberformat = false; } - else if (std::isfinite(fValue)) + } + else if (std::isfinite(fValue)) + { + pFCell->SetHybridDouble(fValue); + if (mbPossibleEmptyDisplay && fValue == 0.0) { - pFCell->SetHybridDouble(fValue); - if (mbPossibleEmptyDisplay && fValue == 0.0) - { - // Needs to be recalculated to propagate, otherwise would be - // propagated as empty string. So don't ResetDirty(). - pFCell->SetHybridEmptyDisplayedAsString(); - } - else - pFCell->ResetDirty(); + // Needs to be recalculated to propagate, otherwise would be + // propagated as empty string. So don't ResetDirty(). + pFCell->SetHybridEmptyDisplayedAsString(); } - - if (bMayForceNumberformat) - // Re-calculate to get number format only when style is not set. - pFCell->SetNeedNumberFormat(!mbHasStyle); + else + pFCell->ResetDirty(); } + + if (bMayForceNumberformat) + // Re-calculate to get number format only when style is not set. + pFCell->SetNeedNumberFormat(!mbHasStyle); } void ScXMLTableRowCellContext::PutTextCell( const ScAddress& rCurrentPos, @@ -1347,42 +1347,42 @@ void ScXMLTableRowCellContext::PutFormulaCell( const ScAddress& rCellPos ) ScExternalRefManager::ApiGuard aExtRefGuard(pDoc); - if ( !aText.isEmpty() ) - { - // temporary formula string as string tokens - std::unique_ptr pCode(new ScTokenArray(pDoc)); + if ( aText.isEmpty() ) + return; - // Check the special case of a single error constant without leading - // '=' and create an error formula cell without tokens. - FormulaError nError = GetScImport().GetFormulaErrorConstant(aText); - if (nError != FormulaError::NONE) + // temporary formula string as string tokens + std::unique_ptr pCode(new ScTokenArray(pDoc)); + + // Check the special case of a single error constant without leading + // '=' and create an error formula cell without tokens. + FormulaError nError = GetScImport().GetFormulaErrorConstant(aText); + if (nError != FormulaError::NONE) + { + pCode->SetCodeError(nError); + } + else + { + // 5.2 and earlier wrote broken "Err:xxx" as formula to designate + // an error formula cell. + if (aText.startsWithIgnoreAsciiCase("Err:") && aText.getLength() <= 9 && + ((nError = + GetScImport().GetFormulaErrorConstant( "#ERR" + aText.copy(4) + "!")) != FormulaError::NONE)) { pCode->SetCodeError(nError); } else { - // 5.2 and earlier wrote broken "Err:xxx" as formula to designate - // an error formula cell. - if (aText.startsWithIgnoreAsciiCase("Err:") && aText.getLength() <= 9 && - ((nError = - GetScImport().GetFormulaErrorConstant( "#ERR" + aText.copy(4) + "!")) != FormulaError::NONE)) - { - pCode->SetCodeError(nError); - } - else - { - OUString aFormulaNmsp = maFormula->second; - if( eGrammar != formula::FormulaGrammar::GRAM_EXTERNAL ) - aFormulaNmsp.clear(); - pCode->AssignXMLString( aText, aFormulaNmsp ); - rDocImport.getDoc().IncXMLImportedFormulaCount( aText.getLength() ); - } + OUString aFormulaNmsp = maFormula->second; + if( eGrammar != formula::FormulaGrammar::GRAM_EXTERNAL ) + aFormulaNmsp.clear(); + pCode->AssignXMLString( aText, aFormulaNmsp ); + rDocImport.getDoc().IncXMLImportedFormulaCount( aText.getLength() ); } - - ScFormulaCell* pNewCell = new ScFormulaCell(pDoc, rCellPos, std::move(pCode), eGrammar, ScMatrixMode::NONE); - SetFormulaCell(pNewCell); - rDocImport.setFormulaCell(rCellPos, pNewCell); } + + ScFormulaCell* pNewCell = new ScFormulaCell(pDoc, rCellPos, std::move(pCode), eGrammar, ScMatrixMode::NONE); + SetFormulaCell(pNewCell); + rDocImport.setFormulaCell(rCellPos, pNewCell); } void ScXMLTableRowCellContext::AddFormulaCell( const ScAddress& rCellPos ) diff --git a/sc/source/filter/xml/xmlcoli.cxx b/sc/source/filter/xml/xmlcoli.cxx index d1e581553488..612161d78731 100644 --- a/sc/source/filter/xml/xmlcoli.cxx +++ b/sc/source/filter/xml/xmlcoli.cxx @@ -43,34 +43,34 @@ ScXMLTableColContext::ScXMLTableColContext( ScXMLImport& rImport, nColCount(1), sVisibility(GetXMLToken(XML_VISIBLE)) { - if ( rAttrList.is() ) + if ( !rAttrList.is() ) + return; + + for (auto &aIter : *rAttrList) { - for (auto &aIter : *rAttrList) + switch (aIter.getToken()) { - switch (aIter.getToken()) + case XML_ELEMENT( TABLE, XML_NUMBER_COLUMNS_REPEATED ): { - case XML_ELEMENT( TABLE, XML_NUMBER_COLUMNS_REPEATED ): - { - nColCount = std::max(aIter.toInt32(), 1); - nColCount = std::min(nColCount, MAXCOLCOUNT); - } - break; - case XML_ELEMENT( TABLE, XML_STYLE_NAME ): - { - sStyleName = aIter.toString(); - } - break; - case XML_ELEMENT( TABLE, XML_VISIBILITY ): - { - sVisibility = aIter.toString(); - } - break; - case XML_ELEMENT( TABLE, XML_DEFAULT_CELL_STYLE_NAME ): - { - sCellStyleName = aIter.toString(); - } - break; + nColCount = std::max(aIter.toInt32(), 1); + nColCount = std::min(nColCount, MAXCOLCOUNT); + } + break; + case XML_ELEMENT( TABLE, XML_STYLE_NAME ): + { + sStyleName = aIter.toString(); + } + break; + case XML_ELEMENT( TABLE, XML_VISIBILITY ): + { + sVisibility = aIter.toString(); + } + break; + case XML_ELEMENT( TABLE, XML_DEFAULT_CELL_STYLE_NAME ): + { + sCellStyleName = aIter.toString(); } + break; } } } diff --git a/sc/source/filter/xml/xmlcondformat.cxx b/sc/source/filter/xml/xmlcondformat.cxx index b178927caec8..6c1fd1b8dded 100644 --- a/sc/source/filter/xml/xmlcondformat.cxx +++ b/sc/source/filter/xml/xmlcondformat.cxx @@ -343,24 +343,24 @@ void SAL_CALL ScXMLConditionalFormatContext::endFastElement( sal_Int32 /*nElemen mrParent.mvCondFormatData.push_back( { pInsertedFormat, nTab } ); - if (bEligibleForCache) + if (!bEligibleForCache) + return; + + // Not found in cache, replace oldest cache entry + sal_Int64 nOldestAge = -1; + size_t nIndexOfOldest = 0; + for (auto& aCacheEntry : mrParent.maCache) { - // Not found in cache, replace oldest cache entry - sal_Int64 nOldestAge = -1; - size_t nIndexOfOldest = 0; - for (auto& aCacheEntry : mrParent.maCache) + if (aCacheEntry.mnAge > nOldestAge) { - if (aCacheEntry.mnAge > nOldestAge) - { - nOldestAge = aCacheEntry.mnAge; - nIndexOfOldest = (&aCacheEntry - &mrParent.maCache.front()); - } + nOldestAge = aCacheEntry.mnAge; + nIndexOfOldest = (&aCacheEntry - &mrParent.maCache.front()); } - mrParent.maCache[nIndexOfOldest].mpFormat = pInsertedFormat; - mrParent.maCache[nIndexOfOldest].mbSingleRelativeReference = bSingleRelativeReference; - mrParent.maCache[nIndexOfOldest].mpTokens = std::move(pTokens); - mrParent.maCache[nIndexOfOldest].mnAge = 0; } + mrParent.maCache[nIndexOfOldest].mpFormat = pInsertedFormat; + mrParent.maCache[nIndexOfOldest].mbSingleRelativeReference = bSingleRelativeReference; + mrParent.maCache[nIndexOfOldest].mpTokens = std::move(pTokens); + mrParent.maCache[nIndexOfOldest].mnAge = 0; } ScXMLConditionalFormatContext::~ScXMLConditionalFormatContext() diff --git a/sc/source/filter/xml/xmlcvali.cxx b/sc/source/filter/xml/xmlcvali.cxx index 658f8007d0e7..2be3f74c1be7 100644 --- a/sc/source/filter/xml/xmlcvali.cxx +++ b/sc/source/filter/xml/xmlcvali.cxx @@ -171,45 +171,45 @@ ScXMLContentValidationContext::ScXMLContentValidationContext( ScXMLImport& rImpo bDisplayHelp(false), bDisplayError(false) { - if ( rAttrList.is() ) + if ( !rAttrList.is() ) + return; + + for (auto &aIter : *rAttrList) { - for (auto &aIter : *rAttrList) + switch (aIter.getToken()) { - switch (aIter.getToken()) + case XML_ELEMENT( TABLE, XML_NAME ): + sName = aIter.toString(); + break; + case XML_ELEMENT( TABLE, XML_CONDITION ): + sCondition = aIter.toString(); + break; + case XML_ELEMENT( TABLE, XML_BASE_CELL_ADDRESS ): + sBaseCellAddress = aIter.toString(); + break; + case XML_ELEMENT( TABLE, XML_ALLOW_EMPTY_CELL ): + if (IsXMLToken(aIter, XML_FALSE)) + bAllowEmptyCell = false; + break; + case XML_ELEMENT( TABLE, XML_DISPLAY_LIST ): + if (IsXMLToken(aIter, XML_NO)) { - case XML_ELEMENT( TABLE, XML_NAME ): - sName = aIter.toString(); - break; - case XML_ELEMENT( TABLE, XML_CONDITION ): - sCondition = aIter.toString(); - break; - case XML_ELEMENT( TABLE, XML_BASE_CELL_ADDRESS ): - sBaseCellAddress = aIter.toString(); - break; - case XML_ELEMENT( TABLE, XML_ALLOW_EMPTY_CELL ): - if (IsXMLToken(aIter, XML_FALSE)) - bAllowEmptyCell = false; - break; - case XML_ELEMENT( TABLE, XML_DISPLAY_LIST ): - if (IsXMLToken(aIter, XML_NO)) - { - nShowList = sheet::TableValidationVisibility::INVISIBLE; - } - else if (IsXMLToken(aIter, XML_UNSORTED)) - { - nShowList = sheet::TableValidationVisibility::UNSORTED; - } - else if (IsXMLToken(aIter, XML_SORT_ASCENDING)) - { - nShowList = sheet::TableValidationVisibility::SORTEDASCENDING; - } - else if (IsXMLToken(aIter, XML_SORTED_ASCENDING)) - { - // Read old wrong value, fdo#72548 - nShowList = sheet::TableValidationVisibility::SORTEDASCENDING; - } - break; + nShowList = sheet::TableValidationVisibility::INVISIBLE; + } + else if (IsXMLToken(aIter, XML_UNSORTED)) + { + nShowList = sheet::TableValidationVisibility::UNSORTED; + } + else if (IsXMLToken(aIter, XML_SORT_ASCENDING)) + { + nShowList = sheet::TableValidationVisibility::SORTEDASCENDING; } + else if (IsXMLToken(aIter, XML_SORTED_ASCENDING)) + { + // Read old wrong value, fdo#72548 + nShowList = sheet::TableValidationVisibility::SORTEDASCENDING; + } + break; } } } @@ -279,77 +279,77 @@ void ScXMLContentValidationContext::GetCondition( ScMyImportValidation& rValidat rValidation.aValidationType = sheet::ValidationType_ANY; // default if no condition is given rValidation.aOperator = sheet::ConditionOperator_NONE; - if( !sCondition.isEmpty() ) + if( sCondition.isEmpty() ) + return; + + // extract leading namespace from condition string + OUString aCondition, aConditionNmsp; + FormulaGrammar::Grammar eGrammar = FormulaGrammar::GRAM_UNSPECIFIED; + GetScImport().ExtractFormulaNamespaceGrammar( aCondition, aConditionNmsp, eGrammar, sCondition ); + bool bHasNmsp = aCondition.getLength() < sCondition.getLength(); + + // parse a condition from the attribute string + ScXMLConditionParseResult aParseResult; + ScXMLConditionHelper::parseCondition( aParseResult, aCondition, 0 ); + + /* Check the result. A valid value in aParseResult.meToken implies + that the other members of aParseResult are filled with valid data + for that token. */ + bool bSecondaryPart = false; + switch( aParseResult.meToken ) { - // extract leading namespace from condition string - OUString aCondition, aConditionNmsp; - FormulaGrammar::Grammar eGrammar = FormulaGrammar::GRAM_UNSPECIFIED; - GetScImport().ExtractFormulaNamespaceGrammar( aCondition, aConditionNmsp, eGrammar, sCondition ); - bool bHasNmsp = aCondition.getLength() < sCondition.getLength(); - - // parse a condition from the attribute string - ScXMLConditionParseResult aParseResult; - ScXMLConditionHelper::parseCondition( aParseResult, aCondition, 0 ); - - /* Check the result. A valid value in aParseResult.meToken implies - that the other members of aParseResult are filled with valid data - for that token. */ - bool bSecondaryPart = false; - switch( aParseResult.meToken ) - { - case XML_COND_TEXTLENGTH: // condition is 'cell-content-text-length()' - case XML_COND_TEXTLENGTH_ISBETWEEN: // condition is 'cell-content-text-length-is-between(,)' - case XML_COND_TEXTLENGTH_ISNOTBETWEEN: // condition is 'cell-content-text-length-is-not-between(,)' - case XML_COND_ISINLIST: // condition is 'cell-content-is-in-list()' - case XML_COND_ISTRUEFORMULA: // condition is 'is-true-formula()' - rValidation.aValidationType = aParseResult.meValidation; - rValidation.aOperator = aParseResult.meOperator; - break; + case XML_COND_TEXTLENGTH: // condition is 'cell-content-text-length()' + case XML_COND_TEXTLENGTH_ISBETWEEN: // condition is 'cell-content-text-length-is-between(,)' + case XML_COND_TEXTLENGTH_ISNOTBETWEEN: // condition is 'cell-content-text-length-is-not-between(,)' + case XML_COND_ISINLIST: // condition is 'cell-content-is-in-list()' + case XML_COND_ISTRUEFORMULA: // condition is 'is-true-formula()' + rValidation.aValidationType = aParseResult.meValidation; + rValidation.aOperator = aParseResult.meOperator; + break; - case XML_COND_ISWHOLENUMBER: // condition is 'cell-content-is-whole-number() and ' - case XML_COND_ISDECIMALNUMBER: // condition is 'cell-content-is-decimal-number() and ' - case XML_COND_ISDATE: // condition is 'cell-content-is-date() and ' - case XML_COND_ISTIME: // condition is 'cell-content-is-time() and ' - rValidation.aValidationType = aParseResult.meValidation; - bSecondaryPart = true; - break; + case XML_COND_ISWHOLENUMBER: // condition is 'cell-content-is-whole-number() and ' + case XML_COND_ISDECIMALNUMBER: // condition is 'cell-content-is-decimal-number() and ' + case XML_COND_ISDATE: // condition is 'cell-content-is-date() and ' + case XML_COND_ISTIME: // condition is 'cell-content-is-time() and ' + rValidation.aValidationType = aParseResult.meValidation; + bSecondaryPart = true; + break; - default:; // unacceptable or unknown condition - } + default:; // unacceptable or unknown condition + } - /* Parse the following 'and ' part of some conditions. This - updates the members of aParseResult that will contain the operands - and comparison operator then. */ - if( bSecondaryPart ) + /* Parse the following 'and ' part of some conditions. This + updates the members of aParseResult that will contain the operands + and comparison operator then. */ + if( bSecondaryPart ) + { + ScXMLConditionHelper::parseCondition( aParseResult, aCondition, aParseResult.mnEndIndex ); + if( aParseResult.meToken == XML_COND_AND ) { ScXMLConditionHelper::parseCondition( aParseResult, aCondition, aParseResult.mnEndIndex ); - if( aParseResult.meToken == XML_COND_AND ) + switch( aParseResult.meToken ) { - ScXMLConditionHelper::parseCondition( aParseResult, aCondition, aParseResult.mnEndIndex ); - switch( aParseResult.meToken ) - { - case XML_COND_CELLCONTENT: // condition is 'and cell-content()' - case XML_COND_ISBETWEEN: // condition is 'and cell-content-is-between(,)' - case XML_COND_ISNOTBETWEEN: // condition is 'and cell-content-is-not-between(,)' - rValidation.aOperator = aParseResult.meOperator; - break; - default:; // unacceptable or unknown condition - } + case XML_COND_CELLCONTENT: // condition is 'and cell-content()' + case XML_COND_ISBETWEEN: // condition is 'and cell-content-is-between(,)' + case XML_COND_ISNOTBETWEEN: // condition is 'and cell-content-is-not-between(,)' + rValidation.aOperator = aParseResult.meOperator; + break; + default:; // unacceptable or unknown condition } } + } - // a validation type (date, integer) without a condition isn't possible - if( rValidation.aOperator == sheet::ConditionOperator_NONE ) - rValidation.aValidationType = sheet::ValidationType_ANY; + // a validation type (date, integer) without a condition isn't possible + if( rValidation.aOperator == sheet::ConditionOperator_NONE ) + rValidation.aValidationType = sheet::ValidationType_ANY; - // parse the formulas - if( rValidation.aValidationType != sheet::ValidationType_ANY ) - { - SetFormula( rValidation.sFormula1, rValidation.sFormulaNmsp1, rValidation.eGrammar1, - aParseResult.maOperand1, aConditionNmsp, eGrammar, bHasNmsp ); - SetFormula( rValidation.sFormula2, rValidation.sFormulaNmsp2, rValidation.eGrammar2, - aParseResult.maOperand2, aConditionNmsp, eGrammar, bHasNmsp ); - } + // parse the formulas + if( rValidation.aValidationType != sheet::ValidationType_ANY ) + { + SetFormula( rValidation.sFormula1, rValidation.sFormulaNmsp1, rValidation.eGrammar1, + aParseResult.maOperand1, aConditionNmsp, eGrammar, bHasNmsp ); + SetFormula( rValidation.sFormula2, rValidation.sFormulaNmsp2, rValidation.eGrammar2, + aParseResult.maOperand2, aConditionNmsp, eGrammar, bHasNmsp ); } } @@ -419,19 +419,19 @@ ScXMLHelpMessageContext::ScXMLHelpMessageContext( ScXMLImport& rImport, bDisplay(false) { pValidationContext = pTempValidationContext; - if ( rAttrList.is() ) + if ( !rAttrList.is() ) + return; + + for (auto &aIter : *rAttrList) { - for (auto &aIter : *rAttrList) + switch (aIter.getToken()) { - switch (aIter.getToken()) - { - case XML_ELEMENT( TABLE, XML_TITLE ): - sTitle = aIter.toString(); - break; - case XML_ELEMENT( TABLE, XML_DISPLAY ): - bDisplay = IsXMLToken(aIter, XML_TRUE); - break; - } + case XML_ELEMENT( TABLE, XML_TITLE ): + sTitle = aIter.toString(); + break; + case XML_ELEMENT( TABLE, XML_DISPLAY ): + bDisplay = IsXMLToken(aIter, XML_TRUE); + break; } } } @@ -473,22 +473,22 @@ ScXMLErrorMessageContext::ScXMLErrorMessageContext( ScXMLImport& rImport, bDisplay(false) { pValidationContext = pTempValidationContext; - if ( rAttrList.is() ) + if ( !rAttrList.is() ) + return; + + for (auto &aIter : *rAttrList) { - for (auto &aIter : *rAttrList) + switch (aIter.getToken()) { - switch (aIter.getToken()) - { - case XML_ELEMENT( TABLE, XML_TITLE ): - sTitle = aIter.toString(); - break; - case XML_ELEMENT( TABLE, XML_MESSAGE_TYPE ): - sMessageType = aIter.toString(); - break; - case XML_ELEMENT( TABLE, XML_DISPLAY ): - bDisplay = IsXMLToken(aIter, XML_TRUE); - break; - } + case XML_ELEMENT( TABLE, XML_TITLE ): + sTitle = aIter.toString(); + break; + case XML_ELEMENT( TABLE, XML_MESSAGE_TYPE ): + sMessageType = aIter.toString(); + break; + case XML_ELEMENT( TABLE, XML_DISPLAY ): + bDisplay = IsXMLToken(aIter, XML_TRUE); + break; } } } @@ -526,18 +526,18 @@ ScXMLErrorMacroContext::ScXMLErrorMacroContext( ScXMLImport& rImport, bExecute(false) { pValidationContext = pTempValidationContext; - if ( rAttrList.is() ) + if ( !rAttrList.is() ) + return; + + for (auto &aIter : *rAttrList) { - for (auto &aIter : *rAttrList) + switch (aIter.getToken()) { - switch (aIter.getToken()) - { - case XML_ELEMENT( TABLE, XML_NAME ): - break; - case XML_ELEMENT( TABLE, XML_EXECUTE ): - bExecute = IsXMLToken(aIter, XML_TRUE); - break; - } + case XML_ELEMENT( TABLE, XML_NAME ): + break; + case XML_ELEMENT( TABLE, XML_EXECUTE ): + bExecute = IsXMLToken(aIter, XML_TRUE); + break; } } } diff --git a/sc/source/filter/xml/xmldpimp.cxx b/sc/source/filter/xml/xmldpimp.cxx index 8b9bcd98325e..71ddfd5b51f6 100644 --- a/sc/source/filter/xml/xmldpimp.cxx +++ b/sc/source/filter/xml/xmldpimp.cxx @@ -104,83 +104,83 @@ ScXMLDataPilotTableContext::ScXMLDataPilotTableContext( ScXMLImport& rImport, bDrillDown(true), bHeaderGridLayout(false) { - if ( rAttrList.is() ) + if ( !rAttrList.is() ) + return; + + for (auto &aIter : *rAttrList) { - for (auto &aIter : *rAttrList) + switch (aIter.getToken()) { - switch (aIter.getToken()) + case XML_ELEMENT( TABLE, XML_NAME ): { - case XML_ELEMENT( TABLE, XML_NAME ): - { - sDataPilotTableName = aIter.toString(); - } - break; - case XML_ELEMENT( TABLE, XML_APPLICATION_DATA ): - { - sApplicationData = aIter.toString(); - } - break; - case XML_ELEMENT( TABLE, XML_GRAND_TOTAL ): - { - if (IsXMLToken(aIter, XML_BOTH)) - { - maRowGrandTotal.mbVisible = true; - maColGrandTotal.mbVisible = true; - } - else if (IsXMLToken(aIter, XML_ROW)) - { - maRowGrandTotal.mbVisible = true; - maColGrandTotal.mbVisible = false; - } - else if (IsXMLToken(aIter, XML_COLUMN)) - { - maRowGrandTotal.mbVisible = false; - maColGrandTotal.mbVisible = true; - } - else - { - maRowGrandTotal.mbVisible = false; - maColGrandTotal.mbVisible = false; - } - } - break; - case XML_ELEMENT( TABLE, XML_IGNORE_EMPTY_ROWS ): - { - bIgnoreEmptyRows = IsXMLToken(aIter, XML_TRUE); - } - break; - case XML_ELEMENT( TABLE, XML_IDENTIFY_CATEGORIES ): - { - bIdentifyCategories = IsXMLToken(aIter, XML_TRUE); - } - break; - case XML_ELEMENT( TABLE, XML_TARGET_RANGE_ADDRESS ): - { - sal_Int32 nOffset(0); - bTargetRangeAddress = ScRangeStringConverter::GetRangeFromString( aTargetRangeAddress, aIter.toString(), pDoc, ::formula::FormulaGrammar::CONV_OOO, nOffset ); - } - break; - case XML_ELEMENT( TABLE, XML_BUTTONS ): + sDataPilotTableName = aIter.toString(); + } + break; + case XML_ELEMENT( TABLE, XML_APPLICATION_DATA ): + { + sApplicationData = aIter.toString(); + } + break; + case XML_ELEMENT( TABLE, XML_GRAND_TOTAL ): + { + if (IsXMLToken(aIter, XML_BOTH)) { - sButtons = aIter.toString(); + maRowGrandTotal.mbVisible = true; + maColGrandTotal.mbVisible = true; } - break; - case XML_ELEMENT( TABLE, XML_SHOW_FILTER_BUTTON ): + else if (IsXMLToken(aIter, XML_ROW)) { - bShowFilter = IsXMLToken(aIter, XML_TRUE); + maRowGrandTotal.mbVisible = true; + maColGrandTotal.mbVisible = false; } - break; - case XML_ELEMENT( TABLE, XML_DRILL_DOWN_ON_DOUBLE_CLICK ): + else if (IsXMLToken(aIter, XML_COLUMN)) { - bDrillDown = IsXMLToken(aIter, XML_TRUE); + maRowGrandTotal.mbVisible = false; + maColGrandTotal.mbVisible = true; } - break; - case XML_ELEMENT( TABLE, XML_HEADER_GRID_LAYOUT ): + else { - bHeaderGridLayout = IsXMLToken(aIter, XML_TRUE); + maRowGrandTotal.mbVisible = false; + maColGrandTotal.mbVisible = false; } - break; } + break; + case XML_ELEMENT( TABLE, XML_IGNORE_EMPTY_ROWS ): + { + bIgnoreEmptyRows = IsXMLToken(aIter, XML_TRUE); + } + break; + case XML_ELEMENT( TABLE, XML_IDENTIFY_CATEGORIES ): + { + bIdentifyCategories = IsXMLToken(aIter, XML_TRUE); + } + break; + case XML_ELEMENT( TABLE, XML_TARGET_RANGE_ADDRESS ): + { + sal_Int32 nOffset(0); + bTargetRangeAddress = ScRangeStringConverter::GetRangeFromString( aTargetRangeAddress, aIter.toString(), pDoc, ::formula::FormulaGrammar::CONV_OOO, nOffset ); + } + break; + case XML_ELEMENT( TABLE, XML_BUTTONS ): + { + sButtons = aIter.toString(); + } + break; + case XML_ELEMENT( TABLE, XML_SHOW_FILTER_BUTTON ): + { + bShowFilter = IsXMLToken(aIter, XML_TRUE); + } + break; + case XML_ELEMENT( TABLE, XML_DRILL_DOWN_ON_DOUBLE_CLICK ): + { + bDrillDown = IsXMLToken(aIter, XML_TRUE); + } + break; + case XML_ELEMENT( TABLE, XML_HEADER_GRID_LAYOUT ): + { + bHeaderGridLayout = IsXMLToken(aIter, XML_TRUE); + } + break; } } } @@ -383,39 +383,39 @@ void ScXMLDataPilotTableContext::SetSelectedPage( const OUString& rDimName, cons void ScXMLDataPilotTableContext::AddDimension(ScDPSaveDimension* pDim) { - if (pDPSave) - { - if (pDim->IsDataLayout()) - mnDataLayoutType = pDim->GetOrientation(); + if (!pDPSave) + return; - // if a dimension with that name has already been inserted, - // mark the new one as duplicate - if ( !pDim->IsDataLayout() && - pDPSave->GetExistingDimensionByName(pDim->GetName()) ) - pDim->SetDupFlag(true); + if (pDim->IsDataLayout()) + mnDataLayoutType = pDim->GetOrientation(); - switch (pDim->GetOrientation()) - { - case sheet::DataPilotFieldOrientation_ROW: - ++mnRowFieldCount; - break; - case sheet::DataPilotFieldOrientation_COLUMN: - ++mnColFieldCount; - break; - case sheet::DataPilotFieldOrientation_PAGE: - ++mnPageFieldCount; + // if a dimension with that name has already been inserted, + // mark the new one as duplicate + if ( !pDim->IsDataLayout() && + pDPSave->GetExistingDimensionByName(pDim->GetName()) ) + pDim->SetDupFlag(true); + + switch (pDim->GetOrientation()) + { + case sheet::DataPilotFieldOrientation_ROW: + ++mnRowFieldCount; + break; + case sheet::DataPilotFieldOrientation_COLUMN: + ++mnColFieldCount; + break; + case sheet::DataPilotFieldOrientation_PAGE: + ++mnPageFieldCount; + break; + case sheet::DataPilotFieldOrientation_DATA: + ++mnDataFieldCount; + break; + case sheet::DataPilotFieldOrientation_HIDDEN: break; - case sheet::DataPilotFieldOrientation_DATA: - ++mnDataFieldCount; + default: break; - case sheet::DataPilotFieldOrientation_HIDDEN: - break; - default: - break; - } - - pDPSave->AddDimension(pDim); } + + pDPSave->AddDimension(pDim); } void ScXMLDataPilotTableContext::AddGroupDim(const ScDPSaveNumGroupDimension& aNumGroupDim) @@ -557,22 +557,22 @@ ScXMLDPSourceSQLContext::ScXMLDPSourceSQLContext( ScXMLImport& rImport, ScXMLDataPilotTableContext* pDataPilotTable) : ScXMLImportContext( rImport ) { - if ( rAttrList.is() ) + if ( !rAttrList.is() ) + return; + + for (auto &aIter : *rAttrList) { - for (auto &aIter : *rAttrList) + switch (aIter.getToken()) { - switch (aIter.getToken()) - { - case XML_ELEMENT( TABLE, XML_DATABASE_NAME ): - pDataPilotTable->SetDatabaseName(aIter.toString()); - break; - case XML_ELEMENT( TABLE, XML_SQL_STATEMENT ): - pDataPilotTable->SetSourceObject(aIter.toString()); - break; - case XML_ELEMENT( TABLE, XML_PARSE_SQL_STATEMENT ): - pDataPilotTable->SetNative(!IsXMLToken(aIter, XML_TRUE)); - break; - } + case XML_ELEMENT( TABLE, XML_DATABASE_NAME ): + pDataPilotTable->SetDatabaseName(aIter.toString()); + break; + case XML_ELEMENT( TABLE, XML_SQL_STATEMENT ): + pDataPilotTable->SetSourceObject(aIter.toString()); + break; + case XML_ELEMENT( TABLE, XML_PARSE_SQL_STATEMENT ): + pDataPilotTable->SetNative(!IsXMLToken(aIter, XML_TRUE)); + break; } } } @@ -586,20 +586,20 @@ ScXMLDPSourceTableContext::ScXMLDPSourceTableContext( ScXMLImport& rImport, ScXMLDataPilotTableContext* pDataPilotTable) : ScXMLImportContext( rImport ) { - if ( rAttrList.is() ) + if ( !rAttrList.is() ) + return; + + for (auto &aIter : *rAttrList) { - for (auto &aIter : *rAttrList) + switch (aIter.getToken()) { - switch (aIter.getToken()) - { - case XML_ELEMENT( TABLE, XML_DATABASE_NAME ): - pDataPilotTable->SetDatabaseName(aIter.toString()); - break; - case XML_ELEMENT( TABLE, XML_TABLE_NAME ): - case XML_ELEMENT( TABLE, XML_DATABASE_TABLE_NAME ): - pDataPilotTable->SetSourceObject(aIter.toString()); - break; - } + case XML_ELEMENT( TABLE, XML_DATABASE_NAME ): + pDataPilotTable->SetDatabaseName(aIter.toString()); + break; + case XML_ELEMENT( TABLE, XML_TABLE_NAME ): + case XML_ELEMENT( TABLE, XML_DATABASE_TABLE_NAME ): + pDataPilotTable->SetSourceObject(aIter.toString()); + break; } } } @@ -613,19 +613,19 @@ ScXMLDPSourceQueryContext::ScXMLDPSourceQueryContext( ScXMLImport& rImport, ScXMLDataPilotTableContext* pDataPilotTable) : ScXMLImportContext( rImport ) { - if ( rAttrList.is() ) + if ( !rAttrList.is() ) + return; + + for (auto &aIter : *rAttrList) { - for (auto &aIter : *rAttrList) + switch (aIter.getToken()) { - switch (aIter.getToken()) - { - case XML_ELEMENT( TABLE, XML_DATABASE_NAME ): - pDataPilotTable->SetDatabaseName(aIter.toString()); - break; - case XML_ELEMENT( TABLE, XML_QUERY_NAME ): - pDataPilotTable->SetSourceObject(aIter.toString()); - break; - } + case XML_ELEMENT( TABLE, XML_DATABASE_NAME ): + pDataPilotTable->SetDatabaseName(aIter.toString()); + break; + case XML_ELEMENT( TABLE, XML_QUERY_NAME ): + pDataPilotTable->SetSourceObject(aIter.toString()); + break; } } } @@ -639,28 +639,28 @@ ScXMLSourceServiceContext::ScXMLSourceServiceContext( ScXMLImport& rImport, ScXMLDataPilotTableContext* pDataPilotTable) : ScXMLImportContext( rImport ) { - if ( rAttrList.is() ) + if ( !rAttrList.is() ) + return; + + for (auto &aIter : *rAttrList) { - for (auto &aIter : *rAttrList) + switch (aIter.getToken()) { - switch (aIter.getToken()) - { - case XML_ELEMENT( TABLE, XML_NAME ): - pDataPilotTable->SetServiceName(aIter.toString()); - break; - case XML_ELEMENT( TABLE, XML_SOURCE_NAME ): - pDataPilotTable->SetServiceSourceName(aIter.toString()); - break; - case XML_ELEMENT( TABLE, XML_OBJECT_NAME ): - pDataPilotTable->SetServiceSourceObject(aIter.toString()); - break; - case XML_ELEMENT( TABLE, XML_USER_NAME ): - pDataPilotTable->SetServiceUsername(aIter.toString()); - break; - case XML_ELEMENT( TABLE, XML_PASSWORD ): - pDataPilotTable->SetServicePassword(aIter.toString()); - break; - } + case XML_ELEMENT( TABLE, XML_NAME ): + pDataPilotTable->SetServiceName(aIter.toString()); + break; + case XML_ELEMENT( TABLE, XML_SOURCE_NAME ): + pDataPilotTable->SetServiceSourceName(aIter.toString()); + break; + case XML_ELEMENT( TABLE, XML_OBJECT_NAME ): + pDataPilotTable->SetServiceSourceObject(aIter.toString()); + break; + case XML_ELEMENT( TABLE, XML_USER_NAME ): + pDataPilotTable->SetServiceUsername(aIter.toString()); + break; + case XML_ELEMENT( TABLE, XML_PASSWORD ): + pDataPilotTable->SetServicePassword(aIter.toString()); + break; } } } @@ -677,30 +677,30 @@ ScXMLDataPilotGrandTotalContext::ScXMLDataPilotGrandTotalContext( meOrientation(NONE), mbVisible(false) { - if ( rAttrList.is() ) + if ( !rAttrList.is() ) + return; + + for (auto &aIter : *rAttrList) { - for (auto &aIter : *rAttrList) + switch (aIter.getToken()) { - switch (aIter.getToken()) - { - case XML_ELEMENT( TABLE, XML_DISPLAY ): - mbVisible = IsXMLToken(aIter, XML_TRUE); - break; - case XML_ELEMENT( TABLE, XML_ORIENTATION ): - if (IsXMLToken(aIter, XML_BOTH)) - meOrientation = BOTH; - else if (IsXMLToken(aIter, XML_ROW)) - meOrientation = ROW; - else if (IsXMLToken(aIter, XML_COLUMN)) - meOrientation = COLUMN; - break; - case XML_ELEMENT( TABLE, XML_DISPLAY_NAME ): - case XML_ELEMENT( TABLE_EXT, XML_DISPLAY_NAME ): - maDisplayName = aIter.toString(); + case XML_ELEMENT( TABLE, XML_DISPLAY ): + mbVisible = IsXMLToken(aIter, XML_TRUE); + break; + case XML_ELEMENT( TABLE, XML_ORIENTATION ): + if (IsXMLToken(aIter, XML_BOTH)) + meOrientation = BOTH; + else if (IsXMLToken(aIter, XML_ROW)) + meOrientation = ROW; + else if (IsXMLToken(aIter, XML_COLUMN)) + meOrientation = COLUMN; + break; + case XML_ELEMENT( TABLE, XML_DISPLAY_NAME ): + case XML_ELEMENT( TABLE_EXT, XML_DISPLAY_NAME ): + maDisplayName = aIter.toString(); + break; + default: break; - default: - break; - } } } } @@ -735,24 +735,24 @@ ScXMLSourceCellRangeContext::ScXMLSourceCellRangeContext( ScXMLImport& rImport, ScXMLImportContext( rImport ), pDataPilotTable(pTempDataPilotTable) { - if ( rAttrList.is() ) + if ( !rAttrList.is() ) + return; + + for (auto &aIter : *rAttrList) { - for (auto &aIter : *rAttrList) + switch (aIter.getToken()) { - switch (aIter.getToken()) + case XML_ELEMENT( TABLE, XML_CELL_RANGE_ADDRESS ): { - case XML_ELEMENT( TABLE, XML_CELL_RANGE_ADDRESS ): - { - ScRange aSourceRangeAddress; - sal_Int32 nOffset(0); - if (ScRangeStringConverter::GetRangeFromString( aSourceRangeAddress, aIter.toString(), GetScImport().GetDocument(), ::formula::FormulaGrammar::CONV_OOO, nOffset )) - pDataPilotTable->SetSourceCellRangeAddress(aSourceRangeAddress); - } - break; - case XML_ELEMENT( TABLE, XML_NAME ): - pDataPilotTable->SetSourceRangeName(aIter.toString()); - break; + ScRange aSourceRangeAddress; + sal_Int32 nOffset(0); + if (ScRangeStringConverter::GetRangeFromString( aSourceRangeAddress, aIter.toString(), GetScImport().GetDocument(), ::formula::FormulaGrammar::CONV_OOO, nOffset )) + pDataPilotTable->SetSourceCellRangeAddress(aSourceRangeAddress); } + break; + case XML_ELEMENT( TABLE, XML_NAME ): + pDataPilotTable->SetSourceRangeName(aIter.toString()); + break; } } } @@ -906,53 +906,53 @@ void ScXMLDataPilotFieldContext::AddGroup(const ::std::vector& rMember void SAL_CALL ScXMLDataPilotFieldContext::endFastElement( sal_Int32 /*nElement*/ ) { - if (xDim) + if (!xDim) + return; + + xDim->SetUsedHierarchy(nUsedHierarchy); + xDim->SetFunction(nFunction); + xDim->SetOrientation(nOrientation); + if (bSelectedPage) { - xDim->SetUsedHierarchy(nUsedHierarchy); - xDim->SetFunction(nFunction); - xDim->SetOrientation(nOrientation); - if (bSelectedPage) - { - pDataPilotTable->SetSelectedPage(xDim->GetName(), sSelectedPage); - } - pDataPilotTable->AddDimension(xDim.release()); - if (bIsGroupField) + pDataPilotTable->SetSelectedPage(xDim->GetName(), sSelectedPage); + } + pDataPilotTable->AddDimension(xDim.release()); + if (!bIsGroupField) + return; + + ScDPNumGroupInfo aInfo; + aInfo.mbEnable = true; + aInfo.mbDateValues = bDateValue; + aInfo.mbAutoStart = bAutoStart; + aInfo.mbAutoEnd = bAutoEnd; + aInfo.mfStart = fStart; + aInfo.mfEnd = fEnd; + aInfo.mfStep = fStep; + if (!sGroupSource.isEmpty()) + { + ScDPSaveGroupDimension aGroupDim(sGroupSource, sName); + if (nGroupPart) + aGroupDim.SetDateInfo(aInfo, nGroupPart); + else { - ScDPNumGroupInfo aInfo; - aInfo.mbEnable = true; - aInfo.mbDateValues = bDateValue; - aInfo.mbAutoStart = bAutoStart; - aInfo.mbAutoEnd = bAutoEnd; - aInfo.mfStart = fStart; - aInfo.mfEnd = fEnd; - aInfo.mfStep = fStep; - if (!sGroupSource.isEmpty()) + for (const auto& rGroup : aGroups) { - ScDPSaveGroupDimension aGroupDim(sGroupSource, sName); - if (nGroupPart) - aGroupDim.SetDateInfo(aInfo, nGroupPart); - else + ScDPSaveGroupItem aItem(rGroup.aName); + for (const auto& rMember : rGroup.aMembers) { - for (const auto& rGroup : aGroups) - { - ScDPSaveGroupItem aItem(rGroup.aName); - for (const auto& rMember : rGroup.aMembers) - { - aItem.AddElement(rMember); - } - aGroupDim.AddGroupItem(aItem); - } + aItem.AddElement(rMember); } - pDataPilotTable->AddGroupDim(aGroupDim); - } - else //NumGroup - { - ScDPSaveNumGroupDimension aNumGroupDim(sName, aInfo); - if (nGroupPart) - aNumGroupDim.SetDateInfo(aInfo, nGroupPart); - pDataPilotTable->AddGroupDim(aNumGroupDim); + aGroupDim.AddGroupItem(aItem); } } + pDataPilotTable->AddGroupDim(aGroupDim); + } + else //NumGroup + { + ScDPSaveNumGroupDimension aNumGroupDim(sName, aInfo); + if (nGroupPart) + aNumGroupDim.SetDateInfo(aInfo, nGroupPart); + pDataPilotTable->AddGroupDim(aNumGroupDim); } } @@ -1027,19 +1027,19 @@ ScXMLDataPilotLevelContext::ScXMLDataPilotLevelContext( ScXMLImport& rImport, ScXMLImportContext( rImport ), pDataPilotField(pTempDataPilotField) { - if ( rAttrList.is() ) + if ( !rAttrList.is() ) + return; + + for (auto &aIter : *rAttrList) { - for (auto &aIter : *rAttrList) + switch (aIter.getToken()) { - switch (aIter.getToken()) - { - case XML_ELEMENT( TABLE, XML_SHOW_EMPTY ): - pDataPilotField->SetShowEmpty(IsXMLToken(aIter, XML_TRUE)); - break; - case XML_ELEMENT( CALC_EXT, XML_REPEAT_ITEM_LABELS ): - pDataPilotField->SetRepeatItemLabels(IsXMLToken(aIter, XML_TRUE)); - break; - } + case XML_ELEMENT( TABLE, XML_SHOW_EMPTY ): + pDataPilotField->SetShowEmpty(IsXMLToken(aIter, XML_TRUE)); + break; + case XML_ELEMENT( CALC_EXT, XML_REPEAT_ITEM_LABELS ): + pDataPilotField->SetRepeatItemLabels(IsXMLToken(aIter, XML_TRUE)); + break; } } } @@ -1248,20 +1248,20 @@ ScXMLDataPilotSubTotalContext::ScXMLDataPilotSubTotalContext( ScXMLImport& rImpo ScXMLDataPilotSubTotalsContext* pDataPilotSubTotals) : ScXMLImportContext( rImport ) { - if ( rAttrList.is() ) + if ( !rAttrList.is() ) + return; + + for (auto &aIter : *rAttrList) { - for (auto &aIter : *rAttrList) + switch (aIter.getToken()) { - switch (aIter.getToken()) - { - case XML_ELEMENT( TABLE, XML_FUNCTION ): - pDataPilotSubTotals->AddFunction( ScXMLConverter::GetFunctionFromString2( aIter.toString() ) ); - break; - case XML_ELEMENT( TABLE, XML_DISPLAY_NAME ): - case XML_ELEMENT( TABLE_EXT, XML_DISPLAY_NAME ): - pDataPilotSubTotals->SetDisplayName(aIter.toString()); - break; - } + case XML_ELEMENT( TABLE, XML_FUNCTION ): + pDataPilotSubTotals->AddFunction( ScXMLConverter::GetFunctionFromString2( aIter.toString() ) ); + break; + case XML_ELEMENT( TABLE, XML_DISPLAY_NAME ): + case XML_ELEMENT( TABLE_EXT, XML_DISPLAY_NAME ): + pDataPilotSubTotals->SetDisplayName(aIter.toString()); + break; } } } @@ -1308,27 +1308,27 @@ ScXMLDataPilotMemberContext::ScXMLDataPilotMemberContext( ScXMLImport& rImport, bDisplayDetails( true ), bHasName( false ) { - if ( rAttrList.is() ) + if ( !rAttrList.is() ) + return; + + for (auto &aIter : *rAttrList) { - for (auto &aIter : *rAttrList) + switch (aIter.getToken()) { - switch (aIter.getToken()) - { - case XML_ELEMENT( TABLE, XML_NAME ): - sName = aIter.toString(); - bHasName = true; - break; - case XML_ELEMENT( TABLE, XML_DISPLAY_NAME ): - case XML_ELEMENT( TABLE_EXT, XML_DISPLAY_NAME ): - maDisplayName = aIter.toString(); - break; - case XML_ELEMENT( TABLE, XML_DISPLAY ): - bDisplay = IsXMLToken(aIter, XML_TRUE); - break; - case XML_ELEMENT( TABLE, XML_SHOW_DETAILS ): - bDisplayDetails = IsXMLToken(aIter, XML_TRUE); - break; - } + case XML_ELEMENT( TABLE, XML_NAME ): + sName = aIter.toString(); + bHasName = true; + break; + case XML_ELEMENT( TABLE, XML_DISPLAY_NAME ): + case XML_ELEMENT( TABLE_EXT, XML_DISPLAY_NAME ): + maDisplayName = aIter.toString(); + break; + case XML_ELEMENT( TABLE, XML_DISPLAY ): + bDisplay = IsXMLToken(aIter, XML_TRUE); + break; + case XML_ELEMENT( TABLE, XML_SHOW_DETAILS ): + bDisplayDetails = IsXMLToken(aIter, XML_TRUE); + break; } } } diff --git a/sc/source/filter/xml/xmldrani.cxx b/sc/source/filter/xml/xmldrani.cxx index 7e7a61d50f6a..ed92086b00ca 100644 --- a/sc/source/filter/xml/xmldrani.cxx +++ b/sc/source/filter/xml/xmldrani.cxx @@ -615,22 +615,22 @@ ScXMLSubTotalRulesContext::ScXMLSubTotalRulesContext( ScXMLImport& rImport, ScXMLImportContext( rImport ), pDatabaseRangeContext(pTempDatabaseRangeContext) { - if ( rAttrList.is() ) + if ( !rAttrList.is() ) + return; + + for (auto &aIter : *rAttrList) { - for (auto &aIter : *rAttrList) + switch (aIter.getToken()) { - switch (aIter.getToken()) - { - case XML_ELEMENT( TABLE, XML_BIND_STYLES_TO_CONTENT ): - pDatabaseRangeContext->SetSubTotalsBindFormatsToContent(IsXMLToken(aIter, XML_TRUE)); - break; - case XML_ELEMENT( TABLE, XML_CASE_SENSITIVE ): - pDatabaseRangeContext->SetSubTotalsIsCaseSensitive(IsXMLToken(aIter, XML_TRUE)); - break; - case XML_ELEMENT( TABLE, XML_PAGE_BREAKS_ON_GROUP_CHANGE ): - pDatabaseRangeContext->SetSubTotalsInsertPageBreaks(IsXMLToken(aIter, XML_TRUE)); - break; - } + case XML_ELEMENT( TABLE, XML_BIND_STYLES_TO_CONTENT ): + pDatabaseRangeContext->SetSubTotalsBindFormatsToContent(IsXMLToken(aIter, XML_TRUE)); + break; + case XML_ELEMENT( TABLE, XML_CASE_SENSITIVE ): + pDatabaseRangeContext->SetSubTotalsIsCaseSensitive(IsXMLToken(aIter, XML_TRUE)); + break; + case XML_ELEMENT( TABLE, XML_PAGE_BREAKS_ON_GROUP_CHANGE ): + pDatabaseRangeContext->SetSubTotalsInsertPageBreaks(IsXMLToken(aIter, XML_TRUE)); + break; } } } @@ -669,51 +669,51 @@ ScXMLSortGroupsContext::ScXMLSortGroupsContext( ScXMLImport& rImport, ScXMLImportContext( rImport ) { pDatabaseRangeContext->SetSubTotalsSortGroups(true); - if ( rAttrList.is() ) + if ( !rAttrList.is() ) + return; + + for (auto &aIter : *rAttrList) { - for (auto &aIter : *rAttrList) + switch (aIter.getToken()) { - switch (aIter.getToken()) + case XML_ELEMENT( TABLE, XML_DATA_TYPE ): { - case XML_ELEMENT( TABLE, XML_DATA_TYPE ): + const OUString &sValue = aIter.toString(); + if (sValue.getLength() > 8) { - const OUString &sValue = aIter.toString(); - if (sValue.getLength() > 8) + OUString sTemp = sValue.copy(0, 8); + if (sTemp == "UserList") { - OUString sTemp = sValue.copy(0, 8); - if (sTemp == "UserList") - { - pDatabaseRangeContext->SetSubTotalsEnabledUserList(true); - sTemp = sValue.copy(8); - pDatabaseRangeContext->SetSubTotalsUserListIndex(static_cast(sTemp.toInt32())); - } - else - { - //if (IsXMLToken(aIter, XML_AUTOMATIC)) - //aSortField.FieldType = util::SortFieldType_AUTOMATIC; - // is not supported by StarOffice - } + pDatabaseRangeContext->SetSubTotalsEnabledUserList(true); + sTemp = sValue.copy(8); + pDatabaseRangeContext->SetSubTotalsUserListIndex(static_cast(sTemp.toInt32())); } else { - //if (IsXMLToken(aIter, XML_TEXT)) - //aSortField.FieldType = util::SortFieldType_ALPHANUMERIC; - // is not supported by StarOffice - //else if (IsXMLToken(aIter, XML_NUMBER)) - //aSortField.FieldType = util::SortFieldType_NUMERIC; + //if (IsXMLToken(aIter, XML_AUTOMATIC)) + //aSortField.FieldType = util::SortFieldType_AUTOMATIC; // is not supported by StarOffice } } - break; - case XML_ELEMENT( TABLE, XML_ORDER ): + else { - if (IsXMLToken(aIter, XML_ASCENDING)) - pDatabaseRangeContext->SetSubTotalsAscending(true); - else - pDatabaseRangeContext->SetSubTotalsAscending(false); + //if (IsXMLToken(aIter, XML_TEXT)) + //aSortField.FieldType = util::SortFieldType_ALPHANUMERIC; + // is not supported by StarOffice + //else if (IsXMLToken(aIter, XML_NUMBER)) + //aSortField.FieldType = util::SortFieldType_NUMERIC; + // is not supported by StarOffice } - break; } + break; + case XML_ELEMENT( TABLE, XML_ORDER ): + { + if (IsXMLToken(aIter, XML_ASCENDING)) + pDatabaseRangeContext->SetSubTotalsAscending(true); + else + pDatabaseRangeContext->SetSubTotalsAscending(false); + } + break; } } } @@ -777,19 +777,19 @@ ScXMLSubTotalFieldContext::ScXMLSubTotalFieldContext( ScXMLImport& rImport, ScXMLImportContext( rImport ), pSubTotalRuleContext(pTempSubTotalRuleContext) { - if ( rAttrList.is() ) + if ( !rAttrList.is() ) + return; + + for (auto &aIter : *rAttrList) { - for (auto &aIter : *rAttrList) + switch (aIter.getToken()) { - switch (aIter.getToken()) - { - case XML_ELEMENT( TABLE, XML_FIELD_NUMBER ): - sFieldNumber = aIter.toString(); - break; - case XML_ELEMENT( TABLE, XML_FUNCTION ): - sFunction = aIter.toString(); - break; - } + case XML_ELEMENT( TABLE, XML_FIELD_NUMBER ): + sFieldNumber = aIter.toString(); + break; + case XML_ELEMENT( TABLE, XML_FUNCTION ): + sFunction = aIter.toString(); + break; } } } diff --git a/sc/source/filter/xml/xmlexprt.cxx b/sc/source/filter/xml/xmlexprt.cxx index 9ca21ed5498d..3ea2aef57ba3 100644 --- a/sc/source/filter/xml/xmlexprt.cxx +++ b/sc/source/filter/xml/xmlexprt.cxx @@ -389,27 +389,27 @@ ScXMLExport::ScXMLExport( GetAutoStylePool()->AddFamily(XmlStyleFamily::TABLE_TABLE, XML_STYLE_FAMILY_TABLE_TABLE_STYLES_NAME, xTableStylesExportPropertySetMapper, XML_STYLE_FAMILY_TABLE_TABLE_STYLES_PREFIX); - if( getExportFlags() & (SvXMLExportFlags::STYLES|SvXMLExportFlags::AUTOSTYLES|SvXMLExportFlags::MASTERSTYLES|SvXMLExportFlags::CONTENT) ) - { - // This name is reserved for the external ref cache tables. This - // should not conflict with user-defined styles since this name is - // used for a table style which is not available in the UI. - sExternalRefTabStyleName = "ta_extref"; - GetAutoStylePool()->RegisterName(XmlStyleFamily::TABLE_TABLE, sExternalRefTabStyleName); - - sAttrName = GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_TABLE, GetXMLToken(XML_NAME)); - sAttrStyleName = GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_TABLE, GetXMLToken(XML_STYLE_NAME)); - sAttrColumnsRepeated = GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_TABLE, GetXMLToken(XML_NUMBER_COLUMNS_REPEATED)); - sAttrFormula = GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_TABLE, GetXMLToken(XML_FORMULA)); - sAttrStringValue = GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_OFFICE, GetXMLToken(XML_STRING_VALUE)); - sAttrValueType = GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_OFFICE, GetXMLToken(XML_VALUE_TYPE)); - sElemCell = GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_TABLE, GetXMLToken(XML_TABLE_CELL)); - sElemCoveredCell = GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_TABLE, GetXMLToken(XML_COVERED_TABLE_CELL)); - sElemCol = GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_TABLE, GetXMLToken(XML_TABLE_COLUMN)); - sElemRow = GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_TABLE, GetXMLToken(XML_TABLE_ROW)); - sElemTab = GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_TABLE, GetXMLToken(XML_TABLE)); - sElemP = GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_TEXT, GetXMLToken(XML_P)); - } + if( !(getExportFlags() & (SvXMLExportFlags::STYLES|SvXMLExportFlags::AUTOSTYLES|SvXMLExportFlags::MASTERSTYLES|SvXMLExportFlags::CONTENT)) ) + return; + + // This name is reserved for the external ref cache tables. This + // should not conflict with user-defined styles since this name is + // used for a table style which is not available in the UI. + sExternalRefTabStyleName = "ta_extref"; + GetAutoStylePool()->RegisterName(XmlStyleFamily::TABLE_TABLE, sExternalRefTabStyleName); + + sAttrName = GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_TABLE, GetXMLToken(XML_NAME)); + sAttrStyleName = GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_TABLE, GetXMLToken(XML_STYLE_NAME)); + sAttrColumnsRepeated = GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_TABLE, GetXMLToken(XML_NUMBER_COLUMNS_REPEATED)); + sAttrFormula = GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_TABLE, GetXMLToken(XML_FORMULA)); + sAttrStringValue = GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_OFFICE, GetXMLToken(XML_STRING_VALUE)); + sAttrValueType = GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_OFFICE, GetXMLToken(XML_VALUE_TYPE)); + sElemCell = GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_TABLE, GetXMLToken(XML_TABLE_CELL)); + sElemCoveredCell = GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_TABLE, GetXMLToken(XML_COVERED_TABLE_CELL)); + sElemCol = GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_TABLE, GetXMLToken(XML_TABLE_COLUMN)); + sElemRow = GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_TABLE, GetXMLToken(XML_TABLE_ROW)); + sElemTab = GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_TABLE, GetXMLToken(XML_TABLE)); + sElemP = GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_TEXT, GetXMLToken(XML_P)); } ScXMLExport::~ScXMLExport() @@ -431,36 +431,36 @@ void ScXMLExport::SetSourceStream( const uno::Reference& xNewS { xSourceStream = xNewStream; - if ( xSourceStream.is() ) - { - // make sure it's a plain UTF-8 stream as written by OOo itself + if ( !xSourceStream.is() ) + return; - const char pXmlHeader[] = ""; - sal_Int32 nLen = strlen(pXmlHeader); + // make sure it's a plain UTF-8 stream as written by OOo itself - uno::Sequence aFileStart(nLen); - sal_Int32 nRead = xSourceStream->readBytes( aFileStart, nLen ); + const char pXmlHeader[] = ""; + sal_Int32 nLen = strlen(pXmlHeader); - if ( nRead != nLen || memcmp( aFileStart.getConstArray(), pXmlHeader, nLen ) != 0 ) - { - // invalid - ignore stream, save normally - xSourceStream.clear(); - } - else + uno::Sequence aFileStart(nLen); + sal_Int32 nRead = xSourceStream->readBytes( aFileStart, nLen ); + + if ( nRead != nLen || memcmp( aFileStart.getConstArray(), pXmlHeader, nLen ) != 0 ) + { + // invalid - ignore stream, save normally + xSourceStream.clear(); + } + else + { + // keep track of the bytes already read + nSourceStreamPos = nRead; + + const ScSheetSaveData* pSheetData = comphelper::getUnoTunnelImplementation(GetModel())->GetSheetSaveData(); + if (pSheetData) { - // keep track of the bytes already read - nSourceStreamPos = nRead; + // add the loaded namespaces to the name space map - const ScSheetSaveData* pSheetData = comphelper::getUnoTunnelImplementation(GetModel())->GetSheetSaveData(); - if (pSheetData) + if ( !pSheetData->AddLoadedNamespaces( GetNamespaceMap_() ) ) { - // add the loaded namespaces to the name space map - - if ( !pSheetData->AddLoadedNamespaces( GetNamespaceMap_() ) ) - { - // conflicts in the namespaces - ignore the stream, save normally - xSourceStream.clear(); - } + // conflicts in the namespaces - ignore the stream, save normally + xSourceStream.clear(); } } } @@ -704,29 +704,29 @@ void ScXMLExport::GetAreaLinks( ScMyAreaLinksContainer& rAreaLinks ) // core implementation void ScXMLExport::GetDetectiveOpList( ScMyDetectiveOpContainer& rDetOp ) { - if (pDoc) + if (!pDoc) + return; + + ScDetOpList* pOpList(pDoc->GetDetOpList()); + if( !pOpList ) + return; + + size_t nCount = pOpList->Count(); + for (size_t nIndex = 0; nIndex < nCount; ++nIndex ) { - ScDetOpList* pOpList(pDoc->GetDetOpList()); - if( pOpList ) + const ScDetOpData& rDetData = pOpList->GetObject( nIndex); + const ScAddress& rDetPos = rDetData.GetPos(); + SCTAB nTab = rDetPos.Tab(); + if ( nTab < pDoc->GetTableCount() ) { - size_t nCount = pOpList->Count(); - for (size_t nIndex = 0; nIndex < nCount; ++nIndex ) - { - const ScDetOpData& rDetData = pOpList->GetObject( nIndex); - const ScAddress& rDetPos = rDetData.GetPos(); - SCTAB nTab = rDetPos.Tab(); - if ( nTab < pDoc->GetTableCount() ) - { - rDetOp.AddOperation( rDetData.GetOperation(), rDetPos, static_cast( nIndex) ); + rDetOp.AddOperation( rDetData.GetOperation(), rDetPos, static_cast( nIndex) ); - // cells with detective operations are written even if empty - pSharedData->SetLastColumn( nTab, rDetPos.Col() ); - pSharedData->SetLastRow( nTab, rDetPos.Row() ); - } - } - rDetOp.Sort(); + // cells with detective operations are written even if empty + pSharedData->SetLastColumn( nTab, rDetPos.Col() ); + pSharedData->SetLastRow( nTab, rDetPos.Row() ); } } + rDetOp.Sort(); } void ScXMLExport::WriteSingleColumn(const sal_Int32 nRepeatColumns, const sal_Int32 nStyleIndex, @@ -1610,27 +1610,27 @@ void ScXMLExport::GetColumnRowHeader(bool& rHasColumnHeader, ScRange& rColumnHea OUString& rPrintRanges) const { uno::Reference xPrintAreas (xCurrentTable, uno::UNO_QUERY); - if (xPrintAreas.is()) - { - rHasRowHeader = xPrintAreas->getPrintTitleRows(); - rHasColumnHeader = xPrintAreas->getPrintTitleColumns(); - table::CellRangeAddress rTempRowHeaderRange = xPrintAreas->getTitleRows(); - rRowHeaderRange = ScRange(rTempRowHeaderRange.StartColumn, - rTempRowHeaderRange.StartRow, - rTempRowHeaderRange.Sheet, - rTempRowHeaderRange.EndColumn, - rTempRowHeaderRange.EndRow, - rTempRowHeaderRange.Sheet); - table::CellRangeAddress rTempColumnHeaderRange = xPrintAreas->getTitleColumns(); - rColumnHeaderRange = ScRange(rTempColumnHeaderRange.StartColumn, - rTempColumnHeaderRange.StartRow, - rTempColumnHeaderRange.Sheet, - rTempColumnHeaderRange.EndColumn, - rTempColumnHeaderRange.EndRow, - rTempColumnHeaderRange.Sheet); - uno::Sequence< table::CellRangeAddress > aRangeList( xPrintAreas->getPrintAreas() ); - ScRangeStringConverter::GetStringFromRangeList( rPrintRanges, aRangeList, pDoc, FormulaGrammar::CONV_OOO ); - } + if (!xPrintAreas.is()) + return; + + rHasRowHeader = xPrintAreas->getPrintTitleRows(); + rHasColumnHeader = xPrintAreas->getPrintTitleColumns(); + table::CellRangeAddress rTempRowHeaderRange = xPrintAreas->getTitleRows(); + rRowHeaderRange = ScRange(rTempRowHeaderRange.StartColumn, + rTempRowHeaderRange.StartRow, + rTempRowHeaderRange.Sheet, + rTempRowHeaderRange.EndColumn, + rTempRowHeaderRange.EndRow, + rTempRowHeaderRange.Sheet); + table::CellRangeAddress rTempColumnHeaderRange = xPrintAreas->getTitleColumns(); + rColumnHeaderRange = ScRange(rTempColumnHeaderRange.StartColumn, + rTempColumnHeaderRange.StartRow, + rTempColumnHeaderRange.Sheet, + rTempColumnHeaderRange.EndColumn, + rTempColumnHeaderRange.EndRow, + rTempColumnHeaderRange.Sheet); + uno::Sequence< table::CellRangeAddress > aRangeList( xPrintAreas->getPrintAreas() ); + ScRangeStringConverter::GetStringFromRangeList( rPrintRanges, aRangeList, pDoc, FormulaGrammar::CONV_OOO ); } void ScXMLExport::FillFieldGroup(ScOutlineArray* pFields, ScMyOpenCloseColumnRowGroup* pGroups) @@ -1655,74 +1655,74 @@ void ScXMLExport::FillFieldGroup(ScOutlineArray* pFields, ScMyOpenCloseColumnRow void ScXMLExport::FillColumnRowGroups() { - if (pDoc) + if (!pDoc) + return; + + ScOutlineTable* pOutlineTable = pDoc->GetOutlineTable( static_cast(nCurrentTable) ); + if(pOutlineTable) { - ScOutlineTable* pOutlineTable = pDoc->GetOutlineTable( static_cast(nCurrentTable) ); - if(pOutlineTable) - { - ScOutlineArray& rCols(pOutlineTable->GetColArray()); - ScOutlineArray& rRows(pOutlineTable->GetRowArray()); - FillFieldGroup(&rCols, pGroupColumns.get()); - FillFieldGroup(&rRows, pGroupRows.get()); - pSharedData->SetLastColumn(nCurrentTable, pGroupColumns->GetLast()); - pSharedData->SetLastRow(nCurrentTable, pGroupRows->GetLast()); - } + ScOutlineArray& rCols(pOutlineTable->GetColArray()); + ScOutlineArray& rRows(pOutlineTable->GetRowArray()); + FillFieldGroup(&rCols, pGroupColumns.get()); + FillFieldGroup(&rRows, pGroupRows.get()); + pSharedData->SetLastColumn(nCurrentTable, pGroupColumns->GetLast()); + pSharedData->SetLastRow(nCurrentTable, pGroupRows->GetLast()); } } void ScXMLExport::SetBodyAttributes() { - if (pDoc && pDoc->IsDocProtected()) + if (!(pDoc && pDoc->IsDocProtected())) + return; + + AddAttribute(XML_NAMESPACE_TABLE, XML_STRUCTURE_PROTECTED, XML_TRUE); + OUStringBuffer aBuffer; + uno::Sequence aPassHash; + ScPasswordHash eHashUsed = PASSHASH_UNSPECIFIED; + const ScDocProtection* p = pDoc->GetDocProtection(); + if (p) { - AddAttribute(XML_NAMESPACE_TABLE, XML_STRUCTURE_PROTECTED, XML_TRUE); - OUStringBuffer aBuffer; - uno::Sequence aPassHash; - ScPasswordHash eHashUsed = PASSHASH_UNSPECIFIED; - const ScDocProtection* p = pDoc->GetDocProtection(); - if (p) + if (p->hasPasswordHash(PASSHASH_SHA1)) { - if (p->hasPasswordHash(PASSHASH_SHA1)) - { - aPassHash = p->getPasswordHash(PASSHASH_SHA1); - eHashUsed = PASSHASH_SHA1; - } - else if (p->hasPasswordHash(PASSHASH_SHA256)) - { - aPassHash = p->getPasswordHash(PASSHASH_SHA256); - eHashUsed = PASSHASH_SHA256; - } - else if (p->hasPasswordHash(PASSHASH_XL, PASSHASH_SHA1)) - { - aPassHash = p->getPasswordHash(PASSHASH_XL, PASSHASH_SHA1); - eHashUsed = PASSHASH_XL; - } + aPassHash = p->getPasswordHash(PASSHASH_SHA1); + eHashUsed = PASSHASH_SHA1; } - ::comphelper::Base64::encode(aBuffer, aPassHash); - if (!aBuffer.isEmpty()) + else if (p->hasPasswordHash(PASSHASH_SHA256)) { - AddAttribute(XML_NAMESPACE_TABLE, XML_PROTECTION_KEY, aBuffer.makeStringAndClear()); - if (getSaneDefaultVersion() >= SvtSaveOptions::ODFSVER_012) - { - if (eHashUsed == PASSHASH_XL) - { - AddAttribute(XML_NAMESPACE_TABLE, XML_PROTECTION_KEY_DIGEST_ALGORITHM, - ScPassHashHelper::getHashURI(PASSHASH_XL)); - if (getSaneDefaultVersion() & SvtSaveOptions::ODFSVER_EXTENDED) - AddAttribute(XML_NAMESPACE_LO_EXT, XML_PROTECTION_KEY_DIGEST_ALGORITHM_2, - ScPassHashHelper::getHashURI(PASSHASH_SHA1)); - } - else if (eHashUsed == PASSHASH_SHA1) - { - AddAttribute(XML_NAMESPACE_TABLE, XML_PROTECTION_KEY_DIGEST_ALGORITHM, - ScPassHashHelper::getHashURI(PASSHASH_SHA1)); - } - else if (eHashUsed == PASSHASH_SHA256) - { - AddAttribute(XML_NAMESPACE_TABLE, XML_PROTECTION_KEY_DIGEST_ALGORITHM, - ScPassHashHelper::getHashURI(PASSHASH_SHA256)); - } - } + aPassHash = p->getPasswordHash(PASSHASH_SHA256); + eHashUsed = PASSHASH_SHA256; } + else if (p->hasPasswordHash(PASSHASH_XL, PASSHASH_SHA1)) + { + aPassHash = p->getPasswordHash(PASSHASH_XL, PASSHASH_SHA1); + eHashUsed = PASSHASH_XL; + } + } + ::comphelper::Base64::encode(aBuffer, aPassHash); + if (aBuffer.isEmpty()) + return; + + AddAttribute(XML_NAMESPACE_TABLE, XML_PROTECTION_KEY, aBuffer.makeStringAndClear()); + if (getSaneDefaultVersion() < SvtSaveOptions::ODFSVER_012) + return; + + if (eHashUsed == PASSHASH_XL) + { + AddAttribute(XML_NAMESPACE_TABLE, XML_PROTECTION_KEY_DIGEST_ALGORITHM, + ScPassHashHelper::getHashURI(PASSHASH_XL)); + if (getSaneDefaultVersion() & SvtSaveOptions::ODFSVER_EXTENDED) + AddAttribute(XML_NAMESPACE_LO_EXT, XML_PROTECTION_KEY_DIGEST_ALGORITHM_2, + ScPassHashHelper::getHashURI(PASSHASH_SHA1)); + } + else if (eHashUsed == PASSHASH_SHA1) + { + AddAttribute(XML_NAMESPACE_TABLE, XML_PROTECTION_KEY_DIGEST_ALGORITHM, + ScPassHashHelper::getHashURI(PASSHASH_SHA1)); + } + else if (eHashUsed == PASSHASH_SHA256) + { + AddAttribute(XML_NAMESPACE_TABLE, XML_PROTECTION_KEY_DIGEST_ALGORITHM, + ScPassHashHelper::getHashURI(PASSHASH_SHA256)); } } @@ -1799,40 +1799,40 @@ void ScXMLExport::CopySourceStream( sal_Int32 nStartOffset, sal_Int32 nEndOffset { uno::Reference xHandler = GetDocHandler(); uno::Reference xDestSource( xHandler, uno::UNO_QUERY ); - if ( xDestSource.is() ) - { - uno::Reference xDestStream = xDestSource->getOutputStream(); - uno::Reference xDestSeek( xDestStream, uno::UNO_QUERY ); - if ( xDestSeek.is() ) - { - // temporary: set same stream again to clear buffer - xDestSource->setOutputStream( xDestStream ); + if ( !xDestSource.is() ) + return; - if ( getExportFlags() & SvXMLExportFlags::PRETTY ) - { - const OString aOutStr("\n "); - uno::Sequence aOutSeq( reinterpret_cast(aOutStr.getStr()), aOutStr.getLength() ); - xDestStream->writeBytes( aOutSeq ); - } + uno::Reference xDestStream = xDestSource->getOutputStream(); + uno::Reference xDestSeek( xDestStream, uno::UNO_QUERY ); + if ( !xDestSeek.is() ) + return; - rNewStart = static_cast(xDestSeek->getPosition()); + // temporary: set same stream again to clear buffer + xDestSource->setOutputStream( xDestStream ); - if ( nStartOffset > nSourceStreamPos ) - lcl_SkipBytesInBlocks( xSourceStream, nStartOffset - nSourceStreamPos ); + if ( getExportFlags() & SvXMLExportFlags::PRETTY ) + { + const OString aOutStr("\n "); + uno::Sequence aOutSeq( reinterpret_cast(aOutStr.getStr()), aOutStr.getLength() ); + xDestStream->writeBytes( aOutSeq ); + } - if ( !lcl_CopyStreamElement( xSourceStream, xDestStream, nEndOffset - nStartOffset ) ) - { - // If copying went wrong, set an error. - // ScXMLImportWrapper then resets all stream flags, so the next save attempt will use normal saving. + rNewStart = static_cast(xDestSeek->getPosition()); - uno::Sequence aEmptySeq; - SetError(XMLERROR_CANCEL|XMLERROR_FLAG_SEVERE, aEmptySeq); - } - nSourceStreamPos = nEndOffset; + if ( nStartOffset > nSourceStreamPos ) + lcl_SkipBytesInBlocks( xSourceStream, nStartOffset - nSourceStreamPos ); - rNewEnd = static_cast(xDestSeek->getPosition()); - } + if ( !lcl_CopyStreamElement( xSourceStream, xDestStream, nEndOffset - nStartOffset ) ) + { + // If copying went wrong, set an error. + // ScXMLImportWrapper then resets all stream flags, so the next save attempt will use normal saving. + + uno::Sequence aEmptySeq; + SetError(XMLERROR_CANCEL|XMLERROR_FLAG_SEVERE, aEmptySeq); } + nSourceStreamPos = nEndOffset; + + rNewEnd = static_cast(xDestSeek->getPosition()); } const ScXMLEditAttributeMap& ScXMLExport::GetEditAttributeMap() const @@ -2051,76 +2051,76 @@ void ScXMLExport::AddStyleFromCells(const uno::Reference& x aPropStates.clear(); if (nNumberFormat == -1) xProperties->getPropertyValue(SC_UNONAME_NUMFMT) >>= nNumberFormat; - if (!sStyleName.isEmpty()) + if (sStyleName.isEmpty()) + return; + + if (!aPropStates.empty()) { - if (!aPropStates.empty()) + sal_Int32 nIndex; + if (pOldName) { - sal_Int32 nIndex; - if (pOldName) + if (GetAutoStylePool()->AddNamed(*pOldName, XmlStyleFamily::TABLE_CELL, sStyleName, aPropStates)) { - if (GetAutoStylePool()->AddNamed(*pOldName, XmlStyleFamily::TABLE_CELL, sStyleName, aPropStates)) - { - GetAutoStylePool()->RegisterName(XmlStyleFamily::TABLE_CELL, *pOldName); - // add to pCellStyles, so the name is found for normal sheets - pCellStyles->AddStyleName(*pOldName, nIndex); - } + GetAutoStylePool()->RegisterName(XmlStyleFamily::TABLE_CELL, *pOldName); + // add to pCellStyles, so the name is found for normal sheets + pCellStyles->AddStyleName(*pOldName, nIndex); } - else + } + else + { + OUString sName; + bool bAdded = false; + if (nKey) { - OUString sName; - bool bAdded = false; - if (nKey) - { - uno::Reference xSpreadDoc( GetModel(), uno::UNO_QUERY ); - ScFormatSaveData* pFormatData = comphelper::getUnoTunnelImplementation(xSpreadDoc)->GetFormatSaveData(); - auto itr = pFormatData->maIDToName.find(nKey); - if (itr != pFormatData->maIDToName.end()) - { - sName = itr->second; - bAdded = GetAutoStylePool()->AddNamed(sName, XmlStyleFamily::TABLE_CELL, sStyleName, aPropStates); - if (bAdded) - GetAutoStylePool()->RegisterName(XmlStyleFamily::TABLE_CELL, sName); - } - } - bool bIsAutoStyle(true); - if (bAdded || GetAutoStylePool()->Add(sName, XmlStyleFamily::TABLE_CELL, sStyleName, aPropStates)) + uno::Reference xSpreadDoc( GetModel(), uno::UNO_QUERY ); + ScFormatSaveData* pFormatData = comphelper::getUnoTunnelImplementation(xSpreadDoc)->GetFormatSaveData(); + auto itr = pFormatData->maIDToName.find(nKey); + if (itr != pFormatData->maIDToName.end()) { - pCellStyles->AddStyleName(sName, nIndex); + sName = itr->second; + bAdded = GetAutoStylePool()->AddNamed(sName, XmlStyleFamily::TABLE_CELL, sStyleName, aPropStates); + if (bAdded) + GetAutoStylePool()->RegisterName(XmlStyleFamily::TABLE_CELL, sName); } - else - nIndex = pCellStyles->GetIndexOfStyleName(sName, XML_STYLE_FAMILY_TABLE_CELL_STYLES_PREFIX, bIsAutoStyle); + } + bool bIsAutoStyle(true); + if (bAdded || GetAutoStylePool()->Add(sName, XmlStyleFamily::TABLE_CELL, sStyleName, aPropStates)) + { + pCellStyles->AddStyleName(sName, nIndex); + } + else + nIndex = pCellStyles->GetIndexOfStyleName(sName, XML_STYLE_FAMILY_TABLE_CELL_STYLES_PREFIX, bIsAutoStyle); - const uno::Sequence aAddresses(xCellRanges->getRangeAddresses()); - bool bGetMerge(true); - for (table::CellRangeAddress const & address : aAddresses) - { - pSharedData->SetLastColumn(nTable, address.EndColumn); - pSharedData->SetLastRow(nTable, address.EndRow); - pCellStyles->AddRangeStyleName(address, nIndex, bIsAutoStyle, nValidationIndex, nNumberFormat); - if (bGetMerge) - bGetMerge = GetMerged(&address, xTable); - } + const uno::Sequence aAddresses(xCellRanges->getRangeAddresses()); + bool bGetMerge(true); + for (table::CellRangeAddress const & address : aAddresses) + { + pSharedData->SetLastColumn(nTable, address.EndColumn); + pSharedData->SetLastRow(nTable, address.EndRow); + pCellStyles->AddRangeStyleName(address, nIndex, bIsAutoStyle, nValidationIndex, nNumberFormat); + if (bGetMerge) + bGetMerge = GetMerged(&address, xTable); } } - else + } + else + { + OUString sEncodedStyleName(EncodeStyleName(sStyleName)); + sal_Int32 nIndex(0); + pCellStyles->AddStyleName(sEncodedStyleName, nIndex, false); + if ( !pOldName ) { - OUString sEncodedStyleName(EncodeStyleName(sStyleName)); - sal_Int32 nIndex(0); - pCellStyles->AddStyleName(sEncodedStyleName, nIndex, false); - if ( !pOldName ) + const uno::Sequence aAddresses(xCellRanges->getRangeAddresses()); + bool bGetMerge(true); + for (table::CellRangeAddress const & address : aAddresses) { - const uno::Sequence aAddresses(xCellRanges->getRangeAddresses()); - bool bGetMerge(true); - for (table::CellRangeAddress const & address : aAddresses) + if (bGetMerge) + bGetMerge = GetMerged(&address, xTable); + pCellStyles->AddRangeStyleName(address, nIndex, false, nValidationIndex, nNumberFormat); + if( sStyleName != "Default" || nValidationIndex != -1 ) { - if (bGetMerge) - bGetMerge = GetMerged(&address, xTable); - pCellStyles->AddRangeStyleName(address, nIndex, false, nValidationIndex, nNumberFormat); - if( sStyleName != "Default" || nValidationIndex != -1 ) - { - pSharedData->SetLastColumn(nTable, address.EndColumn); - pSharedData->SetLastRow(nTable, address.EndRow); - } + pSharedData->SetLastColumn(nTable, address.EndColumn); + pSharedData->SetLastRow(nTable, address.EndRow); } } } @@ -2131,36 +2131,36 @@ void ScXMLExport::AddStyleFromColumn(const uno::Reference& const OUString* pOldName, sal_Int32& rIndex, bool& rIsVisible) { std::vector aPropStates(xColumnStylesExportPropertySetMapper->Filter(xColumnProperties)); - if(!aPropStates.empty()) + if(aPropStates.empty()) + return; + + auto aItr = std::find_if(aPropStates.begin(), aPropStates.end(), + [this](const XMLPropertyState& rPropState) { + return xColumnStylesPropertySetMapper->GetEntryContextId(rPropState.mnIndex) == CTF_SC_ISVISIBLE; }); + if (aItr != aPropStates.end()) { - auto aItr = std::find_if(aPropStates.begin(), aPropStates.end(), - [this](const XMLPropertyState& rPropState) { - return xColumnStylesPropertySetMapper->GetEntryContextId(rPropState.mnIndex) == CTF_SC_ISVISIBLE; }); - if (aItr != aPropStates.end()) - { - aItr->maValue >>= rIsVisible; - } + aItr->maValue >>= rIsVisible; + } - OUString sParent; - if (pOldName) + OUString sParent; + if (pOldName) + { + if (GetAutoStylePool()->AddNamed(*pOldName, XmlStyleFamily::TABLE_COLUMN, sParent, aPropStates)) { - if (GetAutoStylePool()->AddNamed(*pOldName, XmlStyleFamily::TABLE_COLUMN, sParent, aPropStates)) - { - GetAutoStylePool()->RegisterName(XmlStyleFamily::TABLE_COLUMN, *pOldName); - // add to pColumnStyles, so the name is found for normal sheets - rIndex = pColumnStyles->AddStyleName(*pOldName); - } + GetAutoStylePool()->RegisterName(XmlStyleFamily::TABLE_COLUMN, *pOldName); + // add to pColumnStyles, so the name is found for normal sheets + rIndex = pColumnStyles->AddStyleName(*pOldName); } - else + } + else + { + OUString sName; + if (GetAutoStylePool()->Add(sName, XmlStyleFamily::TABLE_COLUMN, sParent, aPropStates)) { - OUString sName; - if (GetAutoStylePool()->Add(sName, XmlStyleFamily::TABLE_COLUMN, sParent, aPropStates)) - { - rIndex = pColumnStyles->AddStyleName(sName); - } - else - rIndex = pColumnStyles->GetIndexOfStyleName(sName, XML_STYLE_FAMILY_TABLE_COLUMN_STYLES_PREFIX); + rIndex = pColumnStyles->AddStyleName(sName); } + else + rIndex = pColumnStyles->GetIndexOfStyleName(sName, XML_STYLE_FAMILY_TABLE_COLUMN_STYLES_PREFIX); } } @@ -2168,28 +2168,28 @@ void ScXMLExport::AddStyleFromRow(const uno::Reference& xRo const OUString* pOldName, sal_Int32& rIndex) { std::vector aPropStates(xRowStylesExportPropertySetMapper->Filter(xRowProperties)); - if(!aPropStates.empty()) + if(aPropStates.empty()) + return; + + OUString sParent; + if (pOldName) { - OUString sParent; - if (pOldName) + if (GetAutoStylePool()->AddNamed(*pOldName, XmlStyleFamily::TABLE_ROW, sParent, aPropStates)) { - if (GetAutoStylePool()->AddNamed(*pOldName, XmlStyleFamily::TABLE_ROW, sParent, aPropStates)) - { - GetAutoStylePool()->RegisterName(XmlStyleFamily::TABLE_ROW, *pOldName); - // add to pRowStyles, so the name is found for normal sheets - rIndex = pRowStyles->AddStyleName(*pOldName); - } + GetAutoStylePool()->RegisterName(XmlStyleFamily::TABLE_ROW, *pOldName); + // add to pRowStyles, so the name is found for normal sheets + rIndex = pRowStyles->AddStyleName(*pOldName); } - else + } + else + { + OUString sName; + if (GetAutoStylePool()->Add(sName, XmlStyleFamily::TABLE_ROW, sParent, aPropStates)) { - OUString sName; - if (GetAutoStylePool()->Add(sName, XmlStyleFamily::TABLE_ROW, sParent, aPropStates)) - { - rIndex = pRowStyles->AddStyleName(sName); - } - else - rIndex = pRowStyles->GetIndexOfStyleName(sName, XML_STYLE_FAMILY_TABLE_ROW_STYLES_PREFIX); + rIndex = pRowStyles->AddStyleName(sName); } + else + rIndex = pRowStyles->GetIndexOfStyleName(sName, XML_STYLE_FAMILY_TABLE_ROW_STYLES_PREFIX); } } @@ -2665,37 +2665,39 @@ void ScXMLExport::ExportMasterStyles_() void ScXMLExport::CollectInternalShape( uno::Reference< drawing::XShape > const & xShape ) { // detective objects and notes - if( SvxShape* pShapeImp = comphelper::getUnoTunnelImplementation( xShape ) ) + SvxShape* pShapeImp = comphelper::getUnoTunnelImplementation( xShape ); + if( !pShapeImp ) + return; + + SdrObject* pObject = pShapeImp->GetSdrObject(); + if( !pObject ) + return; + + // collect note caption objects from all layers (internal or hidden) + if( ScDrawObjData* pCaptData = ScDrawLayer::GetNoteCaptionData( pObject, static_cast< SCTAB >( nCurrentTable ) ) ) { - if( SdrObject* pObject = pShapeImp->GetSdrObject() ) + if(pDoc->GetNote(pCaptData->maStart)) { - // collect note caption objects from all layers (internal or hidden) - if( ScDrawObjData* pCaptData = ScDrawLayer::GetNoteCaptionData( pObject, static_cast< SCTAB >( nCurrentTable ) ) ) - { - if(pDoc->GetNote(pCaptData->maStart)) - { - pSharedData->AddNoteObj( xShape, pCaptData->maStart ); + pSharedData->AddNoteObj( xShape, pCaptData->maStart ); - // #i60851# When the file is saved while editing a new note, - // the cell is still empty -> last column/row must be updated - OSL_ENSURE( pCaptData->maStart.Tab() == nCurrentTable, "invalid table in object data" ); - pSharedData->SetLastColumn( nCurrentTable, pCaptData->maStart.Col() ); - pSharedData->SetLastRow( nCurrentTable, pCaptData->maStart.Row() ); - } - } - // other objects from internal layer only (detective) - else if( pObject->GetLayer() == SC_LAYER_INTERN ) - { - ScDetectiveFunc aDetFunc( pDoc, static_cast(nCurrentTable) ); - ScAddress aPosition; - ScRange aSourceRange; - bool bRedLine; - ScDetectiveObjType eObjType = aDetFunc.GetDetectiveObjectType( - pObject, nCurrentTable, aPosition, aSourceRange, bRedLine ); - pSharedData->GetDetectiveObjContainer()->AddObject( eObjType, static_cast(nCurrentTable), aPosition, aSourceRange, bRedLine ); - } + // #i60851# When the file is saved while editing a new note, + // the cell is still empty -> last column/row must be updated + OSL_ENSURE( pCaptData->maStart.Tab() == nCurrentTable, "invalid table in object data" ); + pSharedData->SetLastColumn( nCurrentTable, pCaptData->maStart.Col() ); + pSharedData->SetLastRow( nCurrentTable, pCaptData->maStart.Row() ); } } + // other objects from internal layer only (detective) + else if( pObject->GetLayer() == SC_LAYER_INTERN ) + { + ScDetectiveFunc aDetFunc( pDoc, static_cast(nCurrentTable) ); + ScAddress aPosition; + ScRange aSourceRange; + bool bRedLine; + ScDetectiveObjType eObjType = aDetFunc.GetDetectiveObjectType( + pObject, nCurrentTable, aPosition, aSourceRange, bRedLine ); + pSharedData->GetDetectiveObjContainer()->AddObject( eObjType, static_cast(nCurrentTable), aPosition, aSourceRange, bRedLine ); + } } bool ScXMLExport::GetMerged (const table::CellRangeAddress* pCellAddress, @@ -2972,21 +2974,20 @@ void ScXMLExport::WriteTable(sal_Int32 nTable, const uno::ReferenceGetLastRow(nTable)); - if (pDoc) - { - // Export sheet-local named ranges. - ScRangeName* pRangeName = pDoc->GetRangeName(nTable); - if (pRangeName && !pRangeName->empty()) - { - WriteNamedRange(pRangeName); - } + if (!pDoc) + return; - if (getSaneDefaultVersion() & SvtSaveOptions::ODFSVER_EXTENDED) - { - //export new conditional format information - ExportConditionalFormat(nTable); - } + // Export sheet-local named ranges. + ScRangeName* pRangeName = pDoc->GetRangeName(nTable); + if (pRangeName && !pRangeName->empty()) + { + WriteNamedRange(pRangeName); + } + if (getSaneDefaultVersion() & SvtSaveOptions::ODFSVER_EXTENDED) + { + //export new conditional format information + ExportConditionalFormat(nTable); } } @@ -3467,41 +3468,41 @@ void ScXMLExport::ExportShape(const uno::Reference < drawing::XShape >& xShape, void ScXMLExport::WriteShapes(const ScMyCell& rMyCell) { - if( rMyCell.bHasShape && !rMyCell.aShapeList.empty() && pDoc ) + if( !(rMyCell.bHasShape && !rMyCell.aShapeList.empty() && pDoc) ) + return; + + awt::Point aPoint; + tools::Rectangle aRect = pDoc->GetMMRect(rMyCell.maCellAddress.Col(), rMyCell.maCellAddress.Row(), + rMyCell.maCellAddress.Col(), rMyCell.maCellAddress.Row(), rMyCell.maCellAddress.Tab()); + bool bNegativePage = pDoc->IsNegativePage(rMyCell.maCellAddress.Tab()); + if (bNegativePage) + aPoint.X = aRect.Right(); + else + aPoint.X = aRect.Left(); + aPoint.Y = aRect.Top(); + for (const auto& rShape : rMyCell.aShapeList) { - awt::Point aPoint; - tools::Rectangle aRect = pDoc->GetMMRect(rMyCell.maCellAddress.Col(), rMyCell.maCellAddress.Row(), - rMyCell.maCellAddress.Col(), rMyCell.maCellAddress.Row(), rMyCell.maCellAddress.Tab()); - bool bNegativePage = pDoc->IsNegativePage(rMyCell.maCellAddress.Tab()); - if (bNegativePage) - aPoint.X = aRect.Right(); - else - aPoint.X = aRect.Left(); - aPoint.Y = aRect.Top(); - for (const auto& rShape : rMyCell.aShapeList) + if (rShape.xShape.is()) { - if (rShape.xShape.is()) - { - if (bNegativePage) - aPoint.X = 2 * rShape.xShape->getPosition().X + rShape.xShape->getSize().Width - aPoint.X; + if (bNegativePage) + aPoint.X = 2 * rShape.xShape->getPosition().X + rShape.xShape->getSize().Width - aPoint.X; - // We only write the end address if we want the shape to resize with the cell - if ( rShape.bResizeWithCell && - rShape.xShape->getShapeType() != "com.sun.star.drawing.CaptionShape" ) - { - OUString sEndAddress; - ScRangeStringConverter::GetStringFromAddress(sEndAddress, rShape.aEndAddress, pDoc, FormulaGrammar::CONV_OOO); - AddAttribute(XML_NAMESPACE_TABLE, XML_END_CELL_ADDRESS, sEndAddress); - OUStringBuffer sBuffer; - GetMM100UnitConverter().convertMeasureToXML( - sBuffer, rShape.nEndX); - AddAttribute(XML_NAMESPACE_TABLE, XML_END_X, sBuffer.makeStringAndClear()); - GetMM100UnitConverter().convertMeasureToXML( - sBuffer, rShape.nEndY); - AddAttribute(XML_NAMESPACE_TABLE, XML_END_Y, sBuffer.makeStringAndClear()); - } - ExportShape(rShape.xShape, &aPoint); + // We only write the end address if we want the shape to resize with the cell + if ( rShape.bResizeWithCell && + rShape.xShape->getShapeType() != "com.sun.star.drawing.CaptionShape" ) + { + OUString sEndAddress; + ScRangeStringConverter::GetStringFromAddress(sEndAddress, rShape.aEndAddress, pDoc, FormulaGrammar::CONV_OOO); + AddAttribute(XML_NAMESPACE_TABLE, XML_END_CELL_ADDRESS, sEndAddress); + OUStringBuffer sBuffer; + GetMM100UnitConverter().convertMeasureToXML( + sBuffer, rShape.nEndX); + AddAttribute(XML_NAMESPACE_TABLE, XML_END_X, sBuffer.makeStringAndClear()); + GetMM100UnitConverter().convertMeasureToXML( + sBuffer, rShape.nEndY); + AddAttribute(XML_NAMESPACE_TABLE, XML_END_Y, sBuffer.makeStringAndClear()); } + ExportShape(rShape.xShape, &aPoint); } } } @@ -3509,99 +3510,92 @@ void ScXMLExport::WriteShapes(const ScMyCell& rMyCell) void ScXMLExport::WriteTableShapes() { ScMyTableShapes* pTableShapes(pSharedData->GetTableShapes()); - if (pTableShapes && !(*pTableShapes)[nCurrentTable].empty()) + if (!(pTableShapes && !(*pTableShapes)[nCurrentTable].empty())) + return; + + OSL_ENSURE(pTableShapes->size() > static_cast(nCurrentTable), "wrong Table"); + SvXMLElementExport aShapesElem(*this, XML_NAMESPACE_TABLE, XML_SHAPES, true, false); + for (const auto& rxShape : (*pTableShapes)[nCurrentTable]) { - OSL_ENSURE(pTableShapes->size() > static_cast(nCurrentTable), "wrong Table"); - SvXMLElementExport aShapesElem(*this, XML_NAMESPACE_TABLE, XML_SHAPES, true, false); - for (const auto& rxShape : (*pTableShapes)[nCurrentTable]) + if (rxShape.is()) { - if (rxShape.is()) + if (pDoc->IsNegativePage(static_cast(nCurrentTable))) { - if (pDoc->IsNegativePage(static_cast(nCurrentTable))) - { - awt::Point aPoint(rxShape->getPosition()); - awt::Size aSize(rxShape->getSize()); - aPoint.X += aPoint.X + aSize.Width; - aPoint.Y = 0; - ExportShape(rxShape, &aPoint); - } - else - ExportShape(rxShape, nullptr); + awt::Point aPoint(rxShape->getPosition()); + awt::Size aSize(rxShape->getSize()); + aPoint.X += aPoint.X + aSize.Width; + aPoint.Y = 0; + ExportShape(rxShape, &aPoint); } + else + ExportShape(rxShape, nullptr); } - (*pTableShapes)[nCurrentTable].clear(); } + (*pTableShapes)[nCurrentTable].clear(); } void ScXMLExport::WriteAreaLink( const ScMyCell& rMyCell ) { - if( rMyCell.bHasAreaLink ) + if( !rMyCell.bHasAreaLink ) + return; + + const ScMyAreaLink& rAreaLink = rMyCell.aAreaLink; + AddAttribute( XML_NAMESPACE_TABLE, XML_NAME, rAreaLink.sSourceStr ); + AddAttribute( XML_NAMESPACE_XLINK, XML_TYPE, XML_SIMPLE ); + AddAttribute( XML_NAMESPACE_XLINK, XML_HREF, GetRelativeReference(rAreaLink.sURL) ); + AddAttribute( XML_NAMESPACE_TABLE, XML_FILTER_NAME, rAreaLink.sFilter ); + if( !rAreaLink.sFilterOptions.isEmpty() ) + AddAttribute( XML_NAMESPACE_TABLE, XML_FILTER_OPTIONS, rAreaLink.sFilterOptions ); + OUStringBuffer sValue; + AddAttribute( XML_NAMESPACE_TABLE, XML_LAST_COLUMN_SPANNED, OUString::number(rAreaLink.GetColCount()) ); + AddAttribute( XML_NAMESPACE_TABLE, XML_LAST_ROW_SPANNED, OUString::number(rAreaLink.GetRowCount()) ); + if( rAreaLink.nRefresh ) { - const ScMyAreaLink& rAreaLink = rMyCell.aAreaLink; - AddAttribute( XML_NAMESPACE_TABLE, XML_NAME, rAreaLink.sSourceStr ); - AddAttribute( XML_NAMESPACE_XLINK, XML_TYPE, XML_SIMPLE ); - AddAttribute( XML_NAMESPACE_XLINK, XML_HREF, GetRelativeReference(rAreaLink.sURL) ); - AddAttribute( XML_NAMESPACE_TABLE, XML_FILTER_NAME, rAreaLink.sFilter ); - if( !rAreaLink.sFilterOptions.isEmpty() ) - AddAttribute( XML_NAMESPACE_TABLE, XML_FILTER_OPTIONS, rAreaLink.sFilterOptions ); - OUStringBuffer sValue; - AddAttribute( XML_NAMESPACE_TABLE, XML_LAST_COLUMN_SPANNED, OUString::number(rAreaLink.GetColCount()) ); - AddAttribute( XML_NAMESPACE_TABLE, XML_LAST_ROW_SPANNED, OUString::number(rAreaLink.GetRowCount()) ); - if( rAreaLink.nRefresh ) - { - ::sax::Converter::convertDuration( sValue, - static_cast(rAreaLink.nRefresh) / 86400 ); - AddAttribute( XML_NAMESPACE_TABLE, XML_REFRESH_DELAY, sValue.makeStringAndClear() ); - } - SvXMLElementExport aElem( *this, XML_NAMESPACE_TABLE, XML_CELL_RANGE_SOURCE, true, true ); + ::sax::Converter::convertDuration( sValue, + static_cast(rAreaLink.nRefresh) / 86400 ); + AddAttribute( XML_NAMESPACE_TABLE, XML_REFRESH_DELAY, sValue.makeStringAndClear() ); } + SvXMLElementExport aElem( *this, XML_NAMESPACE_TABLE, XML_CELL_RANGE_SOURCE, true, true ); } void ScXMLExport::exportAnnotationMeta( const uno::Reference < drawing::XShape >& xShape) { ScPostIt* pNote = pCurrentCell->pNote; - if (pNote) - { - // TODO : notes - //is it still useful, as this call back is only called from ScXMLExport::WriteAnnotation - // and should be in sync with pCurrentCell - SdrCaptionObj* pNoteCaption = pNote->GetOrCreateCaption(pCurrentCell->maCellAddress); - uno::Reference xCurrentShape( pNoteCaption->getUnoShape(), uno::UNO_QUERY ); - if (xCurrentShape.get()!=xShape.get()) - return; + if (!pNote) + return; - const OUString& sAuthor(pNote->GetAuthor()); - if (!sAuthor.isEmpty()) - { - SvXMLElementExport aCreatorElem( *this, XML_NAMESPACE_DC, - XML_CREATOR, true, - false ); - Characters(sAuthor); - } + // TODO : notes + //is it still useful, as this call back is only called from ScXMLExport::WriteAnnotation + // and should be in sync with pCurrentCell + SdrCaptionObj* pNoteCaption = pNote->GetOrCreateCaption(pCurrentCell->maCellAddress); + uno::Reference xCurrentShape( pNoteCaption->getUnoShape(), uno::UNO_QUERY ); + if (xCurrentShape.get()!=xShape.get()) + return; - const OUString& aDate(pNote->GetDate()); - if (pDoc) + const OUString& sAuthor(pNote->GetAuthor()); + if (!sAuthor.isEmpty()) + { + SvXMLElementExport aCreatorElem( *this, XML_NAMESPACE_DC, + XML_CREATOR, true, + false ); + Characters(sAuthor); + } + + const OUString& aDate(pNote->GetDate()); + if (pDoc) + { + SvNumberFormatter* pNumForm = pDoc->GetFormatTable(); + double fDate; + sal_uInt32 nfIndex = pNumForm->GetFormatIndex(NF_DATE_SYS_DDMMYYYY, LANGUAGE_SYSTEM); + if (pNumForm->IsNumberFormat(aDate, nfIndex, fDate)) { - SvNumberFormatter* pNumForm = pDoc->GetFormatTable(); - double fDate; - sal_uInt32 nfIndex = pNumForm->GetFormatIndex(NF_DATE_SYS_DDMMYYYY, LANGUAGE_SYSTEM); - if (pNumForm->IsNumberFormat(aDate, nfIndex, fDate)) - { - OUStringBuffer sBuf; - GetMM100UnitConverter().convertDateTime(sBuf, fDate,true); - SvXMLElementExport aDateElem( *this, XML_NAMESPACE_DC, - XML_DATE, true, - false ); - Characters(sBuf.makeStringAndClear()); - } - else - { - SvXMLElementExport aDateElem( *this, XML_NAMESPACE_META, - XML_DATE_STRING, true, - false ); - Characters(aDate); - } + OUStringBuffer sBuf; + GetMM100UnitConverter().convertDateTime(sBuf, fDate,true); + SvXMLElementExport aDateElem( *this, XML_NAMESPACE_DC, + XML_DATE, true, + false ); + Characters(sBuf.makeStringAndClear()); } else { @@ -3611,70 +3605,76 @@ void ScXMLExport::exportAnnotationMeta( const uno::Reference < drawing::XShape > Characters(aDate); } } + else + { + SvXMLElementExport aDateElem( *this, XML_NAMESPACE_META, + XML_DATE_STRING, true, + false ); + Characters(aDate); + } } void ScXMLExport::WriteAnnotation(ScMyCell& rMyCell) { ScPostIt* pNote = pDoc->GetNote(rMyCell.maCellAddress); - if (pNote) - { - if (pNote->IsCaptionShown()) - AddAttribute(XML_NAMESPACE_OFFICE, XML_DISPLAY, XML_TRUE); - - pCurrentCell = &rMyCell; + if (!pNote) + return; - SdrCaptionObj* pNoteCaption = pNote->GetOrCreateCaption(rMyCell.maCellAddress); - if (pNoteCaption) - { - uno::Reference xShape( pNoteCaption->getUnoShape(), uno::UNO_QUERY ); - if (xShape.is()) - GetShapeExport()->exportShape(xShape, SEF_DEFAULT|XMLShapeExportFlags::ANNOTATION); - } + if (pNote->IsCaptionShown()) + AddAttribute(XML_NAMESPACE_OFFICE, XML_DISPLAY, XML_TRUE); - pCurrentCell = nullptr; + pCurrentCell = &rMyCell; + SdrCaptionObj* pNoteCaption = pNote->GetOrCreateCaption(rMyCell.maCellAddress); + if (pNoteCaption) + { + uno::Reference xShape( pNoteCaption->getUnoShape(), uno::UNO_QUERY ); + if (xShape.is()) + GetShapeExport()->exportShape(xShape, SEF_DEFAULT|XMLShapeExportFlags::ANNOTATION); } + + pCurrentCell = nullptr; } void ScXMLExport::WriteDetective( const ScMyCell& rMyCell ) { - if( rMyCell.bHasDetectiveObj || rMyCell.bHasDetectiveOp ) + if( !(rMyCell.bHasDetectiveObj || rMyCell.bHasDetectiveOp) ) + return; + + const ScMyDetectiveObjVec& rObjVec = rMyCell.aDetectiveObjVec; + const ScMyDetectiveOpVec& rOpVec = rMyCell.aDetectiveOpVec; + sal_Int32 nObjCount(rObjVec.size()); + sal_Int32 nOpCount(rOpVec.size()); + if( !(nObjCount || nOpCount) ) + return; + + SvXMLElementExport aDetElem( *this, XML_NAMESPACE_TABLE, XML_DETECTIVE, true, true ); + OUString sString; + for(const auto& rObj : rObjVec) { - const ScMyDetectiveObjVec& rObjVec = rMyCell.aDetectiveObjVec; - const ScMyDetectiveOpVec& rOpVec = rMyCell.aDetectiveOpVec; - sal_Int32 nObjCount(rObjVec.size()); - sal_Int32 nOpCount(rOpVec.size()); - if( nObjCount || nOpCount ) + if (rObj.eObjType != SC_DETOBJ_CIRCLE) { - SvXMLElementExport aDetElem( *this, XML_NAMESPACE_TABLE, XML_DETECTIVE, true, true ); - OUString sString; - for(const auto& rObj : rObjVec) + if( (rObj.eObjType == SC_DETOBJ_ARROW) || (rObj.eObjType == SC_DETOBJ_TOOTHERTAB)) { - if (rObj.eObjType != SC_DETOBJ_CIRCLE) - { - if( (rObj.eObjType == SC_DETOBJ_ARROW) || (rObj.eObjType == SC_DETOBJ_TOOTHERTAB)) - { - ScRangeStringConverter::GetStringFromRange( sString, rObj.aSourceRange, pDoc, FormulaGrammar::CONV_OOO ); - AddAttribute( XML_NAMESPACE_TABLE, XML_CELL_RANGE_ADDRESS, sString ); - } - ScXMLConverter::GetStringFromDetObjType( sString, rObj.eObjType ); - AddAttribute( XML_NAMESPACE_TABLE, XML_DIRECTION, sString ); - if( rObj.bHasError ) - AddAttribute( XML_NAMESPACE_TABLE, XML_CONTAINS_ERROR, XML_TRUE ); - } - else - AddAttribute( XML_NAMESPACE_TABLE, XML_MARKED_INVALID, XML_TRUE ); - SvXMLElementExport aRangeElem( *this, XML_NAMESPACE_TABLE, XML_HIGHLIGHTED_RANGE, true, true ); - } - for(const auto& rOp : rOpVec) - { - OUString sOpString; - ScXMLConverter::GetStringFromDetOpType( sOpString, rOp.eOpType ); - AddAttribute( XML_NAMESPACE_TABLE, XML_NAME, sOpString ); - AddAttribute( XML_NAMESPACE_TABLE, XML_INDEX, OUString::number(rOp.nIndex) ); - SvXMLElementExport aRangeElem( *this, XML_NAMESPACE_TABLE, XML_OPERATION, true, true ); + ScRangeStringConverter::GetStringFromRange( sString, rObj.aSourceRange, pDoc, FormulaGrammar::CONV_OOO ); + AddAttribute( XML_NAMESPACE_TABLE, XML_CELL_RANGE_ADDRESS, sString ); } + ScXMLConverter::GetStringFromDetObjType( sString, rObj.eObjType ); + AddAttribute( XML_NAMESPACE_TABLE, XML_DIRECTION, sString ); + if( rObj.bHasError ) + AddAttribute( XML_NAMESPACE_TABLE, XML_CONTAINS_ERROR, XML_TRUE ); } + else + AddAttribute( XML_NAMESPACE_TABLE, XML_MARKED_INVALID, XML_TRUE ); + SvXMLElementExport aRangeElem( *this, XML_NAMESPACE_TABLE, XML_HIGHLIGHTED_RANGE, true, true ); + } + for(const auto& rOp : rOpVec) + { + OUString sOpString; + ScXMLConverter::GetStringFromDetOpType( sOpString, rOp.eOpType ); + AddAttribute( XML_NAMESPACE_TABLE, XML_NAME, sOpString ); + AddAttribute( XML_NAMESPACE_TABLE, XML_INDEX, OUString::number(rOp.nIndex) ); + SvXMLElementExport aRangeElem( *this, XML_NAMESPACE_TABLE, XML_OPERATION, true, true ); } } @@ -3767,72 +3767,72 @@ bool ScXMLExport::IsCellEqual (const ScMyCell& aCell1, const ScMyCell& aCell2) void ScXMLExport::WriteCalculationSettings(const uno::Reference & xSpreadDoc) { uno::Reference xPropertySet(xSpreadDoc, uno::UNO_QUERY); - if (xPropertySet.is()) + if (!xPropertySet.is()) + return; + + bool bCalcAsShown (::cppu::any2bool( xPropertySet->getPropertyValue(SC_UNO_CALCASSHOWN) )); + bool bIgnoreCase (::cppu::any2bool( xPropertySet->getPropertyValue(SC_UNO_IGNORECASE) )); + bool bLookUpLabels (::cppu::any2bool( xPropertySet->getPropertyValue(SC_UNO_LOOKUPLABELS) )); + bool bMatchWholeCell (::cppu::any2bool( xPropertySet->getPropertyValue(SC_UNO_MATCHWHOLE) )); + bool bUseRegularExpressions (::cppu::any2bool( xPropertySet->getPropertyValue(SC_UNO_REGEXENABLED) )); + bool bUseWildcards (::cppu::any2bool( xPropertySet->getPropertyValue(SC_UNO_WILDCARDSENABLED) )); + if (bUseWildcards && bUseRegularExpressions) + bUseRegularExpressions = false; // mutually exclusive, wildcards take precedence + bool bIsIterationEnabled (::cppu::any2bool( xPropertySet->getPropertyValue(SC_UNO_ITERENABLED) )); + sal_uInt16 nYear2000 (pDoc ? pDoc->GetDocOptions().GetYear2000() : 0); + sal_Int32 nIterationCount(100); + xPropertySet->getPropertyValue( SC_UNO_ITERCOUNT ) >>= nIterationCount; + double fIterationEpsilon = 0; + xPropertySet->getPropertyValue( SC_UNO_ITEREPSILON ) >>= fIterationEpsilon; + util::Date aNullDate; + xPropertySet->getPropertyValue( SC_UNO_NULLDATE ) >>= aNullDate; + if (!(bCalcAsShown || bIgnoreCase || !bLookUpLabels || !bMatchWholeCell || !bUseRegularExpressions || + bUseWildcards || + bIsIterationEnabled || nIterationCount != 100 || !::rtl::math::approxEqual(fIterationEpsilon, 0.001) || + aNullDate.Day != 30 || aNullDate.Month != 12 || aNullDate.Year != 1899 || nYear2000 != 1930)) + return; + + if (bIgnoreCase) + AddAttribute(XML_NAMESPACE_TABLE, XML_CASE_SENSITIVE, XML_FALSE); + if (bCalcAsShown) + AddAttribute(XML_NAMESPACE_TABLE, XML_PRECISION_AS_SHOWN, XML_TRUE); + if (!bMatchWholeCell) + AddAttribute(XML_NAMESPACE_TABLE, XML_SEARCH_CRITERIA_MUST_APPLY_TO_WHOLE_CELL, XML_FALSE); + if (!bLookUpLabels) + AddAttribute(XML_NAMESPACE_TABLE, XML_AUTOMATIC_FIND_LABELS, XML_FALSE); + if (!bUseRegularExpressions) + AddAttribute(XML_NAMESPACE_TABLE, XML_USE_REGULAR_EXPRESSIONS, XML_FALSE); + if (bUseWildcards) + AddAttribute(XML_NAMESPACE_TABLE, XML_USE_WILDCARDS, XML_TRUE); + if (nYear2000 != 1930) + { + AddAttribute(XML_NAMESPACE_TABLE, XML_NULL_YEAR, OUString::number(nYear2000)); + } + SvXMLElementExport aCalcSettings(*this, XML_NAMESPACE_TABLE, XML_CALCULATION_SETTINGS, true, true); { - bool bCalcAsShown (::cppu::any2bool( xPropertySet->getPropertyValue(SC_UNO_CALCASSHOWN) )); - bool bIgnoreCase (::cppu::any2bool( xPropertySet->getPropertyValue(SC_UNO_IGNORECASE) )); - bool bLookUpLabels (::cppu::any2bool( xPropertySet->getPropertyValue(SC_UNO_LOOKUPLABELS) )); - bool bMatchWholeCell (::cppu::any2bool( xPropertySet->getPropertyValue(SC_UNO_MATCHWHOLE) )); - bool bUseRegularExpressions (::cppu::any2bool( xPropertySet->getPropertyValue(SC_UNO_REGEXENABLED) )); - bool bUseWildcards (::cppu::any2bool( xPropertySet->getPropertyValue(SC_UNO_WILDCARDSENABLED) )); - if (bUseWildcards && bUseRegularExpressions) - bUseRegularExpressions = false; // mutually exclusive, wildcards take precedence - bool bIsIterationEnabled (::cppu::any2bool( xPropertySet->getPropertyValue(SC_UNO_ITERENABLED) )); - sal_uInt16 nYear2000 (pDoc ? pDoc->GetDocOptions().GetYear2000() : 0); - sal_Int32 nIterationCount(100); - xPropertySet->getPropertyValue( SC_UNO_ITERCOUNT ) >>= nIterationCount; - double fIterationEpsilon = 0; - xPropertySet->getPropertyValue( SC_UNO_ITEREPSILON ) >>= fIterationEpsilon; - util::Date aNullDate; - xPropertySet->getPropertyValue( SC_UNO_NULLDATE ) >>= aNullDate; - if (bCalcAsShown || bIgnoreCase || !bLookUpLabels || !bMatchWholeCell || !bUseRegularExpressions || - bUseWildcards || - bIsIterationEnabled || nIterationCount != 100 || !::rtl::math::approxEqual(fIterationEpsilon, 0.001) || - aNullDate.Day != 30 || aNullDate.Month != 12 || aNullDate.Year != 1899 || nYear2000 != 1930) + if (aNullDate.Day != 30 || aNullDate.Month != 12 || aNullDate.Year != 1899) { - if (bIgnoreCase) - AddAttribute(XML_NAMESPACE_TABLE, XML_CASE_SENSITIVE, XML_FALSE); - if (bCalcAsShown) - AddAttribute(XML_NAMESPACE_TABLE, XML_PRECISION_AS_SHOWN, XML_TRUE); - if (!bMatchWholeCell) - AddAttribute(XML_NAMESPACE_TABLE, XML_SEARCH_CRITERIA_MUST_APPLY_TO_WHOLE_CELL, XML_FALSE); - if (!bLookUpLabels) - AddAttribute(XML_NAMESPACE_TABLE, XML_AUTOMATIC_FIND_LABELS, XML_FALSE); - if (!bUseRegularExpressions) - AddAttribute(XML_NAMESPACE_TABLE, XML_USE_REGULAR_EXPRESSIONS, XML_FALSE); - if (bUseWildcards) - AddAttribute(XML_NAMESPACE_TABLE, XML_USE_WILDCARDS, XML_TRUE); - if (nYear2000 != 1930) + OUStringBuffer sDate; + SvXMLUnitConverter::convertDateTime(sDate, 0.0, aNullDate); + AddAttribute(XML_NAMESPACE_TABLE, XML_DATE_VALUE, sDate.makeStringAndClear()); + SvXMLElementExport aElemNullDate(*this, XML_NAMESPACE_TABLE, XML_NULL_DATE, true, true); + } + if (bIsIterationEnabled || nIterationCount != 100 || !::rtl::math::approxEqual(fIterationEpsilon, 0.001)) + { + OUStringBuffer sBuffer; + if (bIsIterationEnabled) + AddAttribute(XML_NAMESPACE_TABLE, XML_STATUS, XML_ENABLE); + if (nIterationCount != 100) { - AddAttribute(XML_NAMESPACE_TABLE, XML_NULL_YEAR, OUString::number(nYear2000)); + AddAttribute(XML_NAMESPACE_TABLE, XML_STEPS, OUString::number(nIterationCount)); } - SvXMLElementExport aCalcSettings(*this, XML_NAMESPACE_TABLE, XML_CALCULATION_SETTINGS, true, true); + if (!::rtl::math::approxEqual(fIterationEpsilon, 0.001)) { - if (aNullDate.Day != 30 || aNullDate.Month != 12 || aNullDate.Year != 1899) - { - OUStringBuffer sDate; - SvXMLUnitConverter::convertDateTime(sDate, 0.0, aNullDate); - AddAttribute(XML_NAMESPACE_TABLE, XML_DATE_VALUE, sDate.makeStringAndClear()); - SvXMLElementExport aElemNullDate(*this, XML_NAMESPACE_TABLE, XML_NULL_DATE, true, true); - } - if (bIsIterationEnabled || nIterationCount != 100 || !::rtl::math::approxEqual(fIterationEpsilon, 0.001)) - { - OUStringBuffer sBuffer; - if (bIsIterationEnabled) - AddAttribute(XML_NAMESPACE_TABLE, XML_STATUS, XML_ENABLE); - if (nIterationCount != 100) - { - AddAttribute(XML_NAMESPACE_TABLE, XML_STEPS, OUString::number(nIterationCount)); - } - if (!::rtl::math::approxEqual(fIterationEpsilon, 0.001)) - { - ::sax::Converter::convertDouble(sBuffer, - fIterationEpsilon); - AddAttribute(XML_NAMESPACE_TABLE, XML_MAXIMUM_DIFFERENCE, sBuffer.makeStringAndClear()); - } - SvXMLElementExport aElemIteration(*this, XML_NAMESPACE_TABLE, XML_ITERATION, true, true); - } + ::sax::Converter::convertDouble(sBuffer, + fIterationEpsilon); + AddAttribute(XML_NAMESPACE_TABLE, XML_MAXIMUM_DIFFERENCE, sBuffer.makeStringAndClear()); } + SvXMLElementExport aElemIteration(*this, XML_NAMESPACE_TABLE, XML_ITERATION, true, true); } } } @@ -3840,66 +3840,66 @@ void ScXMLExport::WriteCalculationSettings(const uno::Reference xLinkable (xCurrentTable, uno::UNO_QUERY); - if (xLinkable.is() && GetModel().is()) + if (!(xLinkable.is() && GetModel().is())) + return; + + sheet::SheetLinkMode nMode (xLinkable->getLinkMode()); + if (nMode == sheet::SheetLinkMode_NONE) + return; + + OUString sLink (xLinkable->getLinkUrl()); + uno::Reference xProps (GetModel(), uno::UNO_QUERY); + if (!xProps.is()) + return; + + uno::Reference xIndex(xProps->getPropertyValue(SC_UNO_SHEETLINKS), uno::UNO_QUERY); + if (!xIndex.is()) + return; + + sal_Int32 nCount(xIndex->getCount()); + if (nCount) { - sheet::SheetLinkMode nMode (xLinkable->getLinkMode()); - if (nMode != sheet::SheetLinkMode_NONE) + bool bFound(false); + uno::Reference xLinkProps; + for (sal_Int32 i = 0; (i < nCount) && !bFound; ++i) { - OUString sLink (xLinkable->getLinkUrl()); - uno::Reference xProps (GetModel(), uno::UNO_QUERY); - if (xProps.is()) + xLinkProps.set(xIndex->getByIndex(i), uno::UNO_QUERY); + if (xLinkProps.is()) { - uno::Reference xIndex(xProps->getPropertyValue(SC_UNO_SHEETLINKS), uno::UNO_QUERY); - if (xIndex.is()) + OUString sNewLink; + if (xLinkProps->getPropertyValue(SC_UNONAME_LINKURL) >>= sNewLink) + bFound = sLink == sNewLink; + } + } + if (bFound && xLinkProps.is()) + { + OUString sFilter; + OUString sFilterOptions; + OUString sTableName (xLinkable->getLinkSheetName()); + sal_Int32 nRefresh(0); + xLinkProps->getPropertyValue(SC_UNONAME_FILTER) >>= sFilter; + xLinkProps->getPropertyValue(SC_UNONAME_FILTOPT) >>= sFilterOptions; + xLinkProps->getPropertyValue(SC_UNONAME_REFDELAY) >>= nRefresh; + if (!sLink.isEmpty()) + { + AddAttribute(XML_NAMESPACE_XLINK, XML_TYPE, XML_SIMPLE); + AddAttribute(XML_NAMESPACE_XLINK, XML_HREF, GetRelativeReference(sLink)); + if (!sTableName.isEmpty()) + AddAttribute(XML_NAMESPACE_TABLE, XML_TABLE_NAME, sTableName); + if (!sFilter.isEmpty()) + AddAttribute(XML_NAMESPACE_TABLE, XML_FILTER_NAME, sFilter); + if (!sFilterOptions.isEmpty()) + AddAttribute(XML_NAMESPACE_TABLE, XML_FILTER_OPTIONS, sFilterOptions); + if (nMode != sheet::SheetLinkMode_NORMAL) + AddAttribute(XML_NAMESPACE_TABLE, XML_MODE, XML_COPY_RESULTS_ONLY); + if( nRefresh ) { - sal_Int32 nCount(xIndex->getCount()); - if (nCount) - { - bool bFound(false); - uno::Reference xLinkProps; - for (sal_Int32 i = 0; (i < nCount) && !bFound; ++i) - { - xLinkProps.set(xIndex->getByIndex(i), uno::UNO_QUERY); - if (xLinkProps.is()) - { - OUString sNewLink; - if (xLinkProps->getPropertyValue(SC_UNONAME_LINKURL) >>= sNewLink) - bFound = sLink == sNewLink; - } - } - if (bFound && xLinkProps.is()) - { - OUString sFilter; - OUString sFilterOptions; - OUString sTableName (xLinkable->getLinkSheetName()); - sal_Int32 nRefresh(0); - xLinkProps->getPropertyValue(SC_UNONAME_FILTER) >>= sFilter; - xLinkProps->getPropertyValue(SC_UNONAME_FILTOPT) >>= sFilterOptions; - xLinkProps->getPropertyValue(SC_UNONAME_REFDELAY) >>= nRefresh; - if (!sLink.isEmpty()) - { - AddAttribute(XML_NAMESPACE_XLINK, XML_TYPE, XML_SIMPLE); - AddAttribute(XML_NAMESPACE_XLINK, XML_HREF, GetRelativeReference(sLink)); - if (!sTableName.isEmpty()) - AddAttribute(XML_NAMESPACE_TABLE, XML_TABLE_NAME, sTableName); - if (!sFilter.isEmpty()) - AddAttribute(XML_NAMESPACE_TABLE, XML_FILTER_NAME, sFilter); - if (!sFilterOptions.isEmpty()) - AddAttribute(XML_NAMESPACE_TABLE, XML_FILTER_OPTIONS, sFilterOptions); - if (nMode != sheet::SheetLinkMode_NORMAL) - AddAttribute(XML_NAMESPACE_TABLE, XML_MODE, XML_COPY_RESULTS_ONLY); - if( nRefresh ) - { - OUStringBuffer sBuffer; - ::sax::Converter::convertDuration( sBuffer, - static_cast(nRefresh) / 86400 ); - AddAttribute( XML_NAMESPACE_TABLE, XML_REFRESH_DELAY, sBuffer.makeStringAndClear() ); - } - SvXMLElementExport aSourceElem(*this, XML_NAMESPACE_TABLE, XML_TABLE_SOURCE, true, true); - } - } - } + OUStringBuffer sBuffer; + ::sax::Converter::convertDuration( sBuffer, + static_cast(nRefresh) / 86400 ); + AddAttribute( XML_NAMESPACE_TABLE, XML_REFRESH_DELAY, sBuffer.makeStringAndClear() ); } + SvXMLElementExport aSourceElem(*this, XML_NAMESPACE_TABLE, XML_TABLE_SOURCE, true, true); } } } @@ -3908,36 +3908,36 @@ void ScXMLExport::WriteTableSource() // core implementation void ScXMLExport::WriteScenario() { - if (pDoc && pDoc->IsScenario(static_cast(nCurrentTable))) - { - OUString sComment; - Color aColor; - ScScenarioFlags nFlags; - pDoc->GetScenarioData(static_cast(nCurrentTable), sComment, aColor, nFlags); - if (!(nFlags & ScScenarioFlags::ShowFrame)) - AddAttribute(XML_NAMESPACE_TABLE, XML_DISPLAY_BORDER, XML_FALSE); - OUStringBuffer aBuffer; - ::sax::Converter::convertColor(aBuffer, aColor); - AddAttribute(XML_NAMESPACE_TABLE, XML_BORDER_COLOR, aBuffer.makeStringAndClear()); - if (!(nFlags & ScScenarioFlags::TwoWay)) - AddAttribute(XML_NAMESPACE_TABLE, XML_COPY_BACK, XML_FALSE); - if (!(nFlags & ScScenarioFlags::Attrib)) - AddAttribute(XML_NAMESPACE_TABLE, XML_COPY_STYLES, XML_FALSE); - if (nFlags & ScScenarioFlags::Value) - AddAttribute(XML_NAMESPACE_TABLE, XML_COPY_FORMULAS, XML_FALSE); - if (nFlags & ScScenarioFlags::Protected) - AddAttribute(XML_NAMESPACE_TABLE, XML_PROTECTED, XML_TRUE); - ::sax::Converter::convertBool(aBuffer, - pDoc->IsActiveScenario(static_cast(nCurrentTable))); - AddAttribute(XML_NAMESPACE_TABLE, XML_IS_ACTIVE, aBuffer.makeStringAndClear()); - const ScRangeList* pRangeList = pDoc->GetScenarioRanges(static_cast(nCurrentTable)); - OUString sRangeListStr; - ScRangeStringConverter::GetStringFromRangeList( sRangeListStr, pRangeList, pDoc, FormulaGrammar::CONV_OOO ); - AddAttribute(XML_NAMESPACE_TABLE, XML_SCENARIO_RANGES, sRangeListStr); - if (!sComment.isEmpty()) - AddAttribute(XML_NAMESPACE_TABLE, XML_COMMENT, sComment); - SvXMLElementExport aElem(*this, XML_NAMESPACE_TABLE, XML_SCENARIO, true, true); - } + if (!(pDoc && pDoc->IsScenario(static_cast(nCurrentTable)))) + return; + + OUString sComment; + Color aColor; + ScScenarioFlags nFlags; + pDoc->GetScenarioData(static_cast(nCurrentTable), sComment, aColor, nFlags); + if (!(nFlags & ScScenarioFlags::ShowFrame)) + AddAttribute(XML_NAMESPACE_TABLE, XML_DISPLAY_BORDER, XML_FALSE); + OUStringBuffer aBuffer; + ::sax::Converter::convertColor(aBuffer, aColor); + AddAttribute(XML_NAMESPACE_TABLE, XML_BORDER_COLOR, aBuffer.makeStringAndClear()); + if (!(nFlags & ScScenarioFlags::TwoWay)) + AddAttribute(XML_NAMESPACE_TABLE, XML_COPY_BACK, XML_FALSE); + if (!(nFlags & ScScenarioFlags::Attrib)) + AddAttribute(XML_NAMESPACE_TABLE, XML_COPY_STYLES, XML_FALSE); + if (nFlags & ScScenarioFlags::Value) + AddAttribute(XML_NAMESPACE_TABLE, XML_COPY_FORMULAS, XML_FALSE); + if (nFlags & ScScenarioFlags::Protected) + AddAttribute(XML_NAMESPACE_TABLE, XML_PROTECTED, XML_TRUE); + ::sax::Converter::convertBool(aBuffer, + pDoc->IsActiveScenario(static_cast(nCurrentTable))); + AddAttribute(XML_NAMESPACE_TABLE, XML_IS_ACTIVE, aBuffer.makeStringAndClear()); + const ScRangeList* pRangeList = pDoc->GetScenarioRanges(static_cast(nCurrentTable)); + OUString sRangeListStr; + ScRangeStringConverter::GetStringFromRangeList( sRangeListStr, pRangeList, pDoc, FormulaGrammar::CONV_OOO ); + AddAttribute(XML_NAMESPACE_TABLE, XML_SCENARIO_RANGES, sRangeListStr); + if (!sComment.isEmpty()) + AddAttribute(XML_NAMESPACE_TABLE, XML_COMMENT, sComment); + SvXMLElementExport aElem(*this, XML_NAMESPACE_TABLE, XML_SCENARIO, true, true); } void ScXMLExport::WriteTheLabelRanges( const uno::Reference< sheet::XSpreadsheetDocument >& xSpreadDoc ) @@ -4005,21 +4005,21 @@ void ScXMLExport::WriteExternalDataMapping() sc::ExternalDataMapper& rDataMapper = pDoc->GetExternalDataMapper(); auto& rDataSources = rDataMapper.getDataSources(); - if (!rDataSources.empty()) + if (rDataSources.empty()) + return; + + SvXMLElementExport aMappings(*this, XML_NAMESPACE_CALC_EXT, XML_DATA_MAPPINGS, true, true); + for (const auto& itr : rDataSources) { - SvXMLElementExport aMappings(*this, XML_NAMESPACE_CALC_EXT, XML_DATA_MAPPINGS, true, true); - for (const auto& itr : rDataSources) - { - AddAttribute(XML_NAMESPACE_XLINK, XML_HREF, itr.getURL()); - AddAttribute(XML_NAMESPACE_CALC_EXT, XML_PROVIDER, itr.getProvider()); - AddAttribute(XML_NAMESPACE_CALC_EXT, XML_DATA_FREQUENCY, OUString::number(sc::ExternalDataSource::getUpdateFrequency())); - AddAttribute(XML_NAMESPACE_CALC_EXT, XML_ID, itr.getID()); - AddAttribute(XML_NAMESPACE_CALC_EXT, XML_DATABASE_NAME, itr.getDBName()); - - SvXMLElementExport aMapping(*this, XML_NAMESPACE_CALC_EXT, XML_DATA_MAPPING, true, true); - // Add the data transformations - WriteExternalDataTransformations(itr.getDataTransformation()); - } + AddAttribute(XML_NAMESPACE_XLINK, XML_HREF, itr.getURL()); + AddAttribute(XML_NAMESPACE_CALC_EXT, XML_PROVIDER, itr.getProvider()); + AddAttribute(XML_NAMESPACE_CALC_EXT, XML_DATA_FREQUENCY, OUString::number(sc::ExternalDataSource::getUpdateFrequency())); + AddAttribute(XML_NAMESPACE_CALC_EXT, XML_ID, itr.getID()); + AddAttribute(XML_NAMESPACE_CALC_EXT, XML_DATABASE_NAME, itr.getDBName()); + + SvXMLElementExport aMapping(*this, XML_NAMESPACE_CALC_EXT, XML_DATA_MAPPING, true, true); + // Add the data transformations + WriteExternalDataTransformations(itr.getDataTransformation()); } } @@ -4980,37 +4980,37 @@ void ScXMLExport::WriteExternalRefCaches() // core implementation void ScXMLExport::WriteConsolidation() { - if (pDoc) - { - const ScConsolidateParam* pCons(pDoc->GetConsolidateDlgData()); - if( pCons ) - { - OUString sStrData; + if (!pDoc) + return; - ScXMLConverter::GetStringFromFunction( sStrData, pCons->eFunction ); - AddAttribute( XML_NAMESPACE_TABLE, XML_FUNCTION, sStrData ); + const ScConsolidateParam* pCons(pDoc->GetConsolidateDlgData()); + if( !pCons ) + return; - sStrData.clear(); - for( sal_Int32 nIndex = 0; nIndex < pCons->nDataAreaCount; ++nIndex ) - ScRangeStringConverter::GetStringFromArea( sStrData, pCons->pDataAreas[ nIndex ], pDoc, FormulaGrammar::CONV_OOO, ' ', true ); - AddAttribute( XML_NAMESPACE_TABLE, XML_SOURCE_CELL_RANGE_ADDRESSES, sStrData ); + OUString sStrData; - ScRangeStringConverter::GetStringFromAddress( sStrData, ScAddress( pCons->nCol, pCons->nRow, pCons->nTab ), pDoc, FormulaGrammar::CONV_OOO ); - AddAttribute( XML_NAMESPACE_TABLE, XML_TARGET_CELL_ADDRESS, sStrData ); + ScXMLConverter::GetStringFromFunction( sStrData, pCons->eFunction ); + AddAttribute( XML_NAMESPACE_TABLE, XML_FUNCTION, sStrData ); - if( pCons->bByCol && !pCons->bByRow ) - AddAttribute( XML_NAMESPACE_TABLE, XML_USE_LABEL, XML_COLUMN ); - else if( !pCons->bByCol && pCons->bByRow ) - AddAttribute( XML_NAMESPACE_TABLE, XML_USE_LABEL, XML_ROW ); - else if( pCons->bByCol && pCons->bByRow ) - AddAttribute( XML_NAMESPACE_TABLE, XML_USE_LABEL, XML_BOTH ); + sStrData.clear(); + for( sal_Int32 nIndex = 0; nIndex < pCons->nDataAreaCount; ++nIndex ) + ScRangeStringConverter::GetStringFromArea( sStrData, pCons->pDataAreas[ nIndex ], pDoc, FormulaGrammar::CONV_OOO, ' ', true ); + AddAttribute( XML_NAMESPACE_TABLE, XML_SOURCE_CELL_RANGE_ADDRESSES, sStrData ); - if( pCons->bReferenceData ) - AddAttribute( XML_NAMESPACE_TABLE, XML_LINK_TO_SOURCE_DATA, XML_TRUE ); + ScRangeStringConverter::GetStringFromAddress( sStrData, ScAddress( pCons->nCol, pCons->nRow, pCons->nTab ), pDoc, FormulaGrammar::CONV_OOO ); + AddAttribute( XML_NAMESPACE_TABLE, XML_TARGET_CELL_ADDRESS, sStrData ); - SvXMLElementExport aElem( *this, XML_NAMESPACE_TABLE, XML_CONSOLIDATION, true, true ); - } - } + if( pCons->bByCol && !pCons->bByRow ) + AddAttribute( XML_NAMESPACE_TABLE, XML_USE_LABEL, XML_COLUMN ); + else if( !pCons->bByCol && pCons->bByRow ) + AddAttribute( XML_NAMESPACE_TABLE, XML_USE_LABEL, XML_ROW ); + else if( pCons->bByCol && pCons->bByRow ) + AddAttribute( XML_NAMESPACE_TABLE, XML_USE_LABEL, XML_BOTH ); + + if( pCons->bReferenceData ) + AddAttribute( XML_NAMESPACE_TABLE, XML_LINK_TO_SOURCE_DATA, XML_TRUE ); + + SvXMLElementExport aElem( *this, XML_NAMESPACE_TABLE, XML_CONSOLIDATION, true, true ); } SvXMLAutoStylePoolP* ScXMLExport::CreateAutoStylePool() @@ -5026,46 +5026,46 @@ XMLPageExport* ScXMLExport::CreatePageExport() void ScXMLExport::GetChangeTrackViewSettings(uno::Sequence& rProps) { ScChangeViewSettings* pViewSettings(GetDocument() ? GetDocument()->GetChangeViewSettings() : nullptr); - if (pViewSettings) - { - sal_Int32 nChangePos(rProps.getLength()); - rProps.realloc(nChangePos + 1); - beans::PropertyValue* pProps(rProps.getArray()); + if (!pViewSettings) + return; - uno::Sequence aChangeProps(SC_VIEWCHANGES_COUNT); - beans::PropertyValue* pChangeProps(aChangeProps.getArray()); - pChangeProps[SC_SHOW_CHANGES].Name = "ShowChanges"; - pChangeProps[SC_SHOW_CHANGES].Value <<= pViewSettings->ShowChanges(); - pChangeProps[SC_SHOW_ACCEPTED_CHANGES].Name = "ShowAcceptedChanges"; - pChangeProps[SC_SHOW_ACCEPTED_CHANGES].Value <<= pViewSettings->IsShowAccepted(); - pChangeProps[SC_SHOW_REJECTED_CHANGES].Name = "ShowRejectedChanges"; - pChangeProps[SC_SHOW_REJECTED_CHANGES].Value <<= pViewSettings->IsShowRejected(); - pChangeProps[SC_SHOW_CHANGES_BY_DATETIME].Name = "ShowChangesByDatetime"; - pChangeProps[SC_SHOW_CHANGES_BY_DATETIME].Value <<= pViewSettings->HasDate(); - pChangeProps[SC_SHOW_CHANGES_BY_DATETIME_MODE].Name = "ShowChangesByDatetimeMode"; - pChangeProps[SC_SHOW_CHANGES_BY_DATETIME_MODE].Value <<= static_cast(pViewSettings->GetTheDateMode()); - pChangeProps[SC_SHOW_CHANGES_BY_DATETIME_FIRST_DATETIME].Name = "ShowChangesByDatetimeFirstDatetime"; - pChangeProps[SC_SHOW_CHANGES_BY_DATETIME_FIRST_DATETIME].Value <<= pViewSettings->GetTheFirstDateTime().GetUNODateTime(); - pChangeProps[SC_SHOW_CHANGES_BY_DATETIME_SECOND_DATETIME].Name = "ShowChangesByDatetimeSecondDatetime"; - pChangeProps[SC_SHOW_CHANGES_BY_DATETIME_SECOND_DATETIME].Value <<= pViewSettings->GetTheLastDateTime().GetUNODateTime(); - pChangeProps[SC_SHOW_CHANGES_BY_AUTHOR].Name = "ShowChangesByAuthor"; - pChangeProps[SC_SHOW_CHANGES_BY_AUTHOR].Value <<= pViewSettings->HasAuthor(); - pChangeProps[SC_SHOW_CHANGES_BY_AUTHOR_NAME].Name = "ShowChangesByAuthorName"; - pChangeProps[SC_SHOW_CHANGES_BY_AUTHOR_NAME].Value <<= pViewSettings->GetTheAuthorToShow(); - pChangeProps[SC_SHOW_CHANGES_BY_COMMENT].Name = "ShowChangesByComment"; - pChangeProps[SC_SHOW_CHANGES_BY_COMMENT].Value <<= pViewSettings->HasComment(); - pChangeProps[SC_SHOW_CHANGES_BY_COMMENT_TEXT].Name = "ShowChangesByCommentText"; - pChangeProps[SC_SHOW_CHANGES_BY_COMMENT_TEXT].Value <<= pViewSettings->GetTheComment(); - pChangeProps[SC_SHOW_CHANGES_BY_RANGES].Name = "ShowChangesByRanges"; - pChangeProps[SC_SHOW_CHANGES_BY_RANGES].Value <<= pViewSettings->HasRange(); - OUString sRangeList; - ScRangeStringConverter::GetStringFromRangeList(sRangeList, &(pViewSettings->GetTheRangeList()), GetDocument(), FormulaGrammar::CONV_OOO); - pChangeProps[SC_SHOW_CHANGES_BY_RANGES_LIST].Name = "ShowChangesByRangesList"; - pChangeProps[SC_SHOW_CHANGES_BY_RANGES_LIST].Value <<= sRangeList; - - pProps[nChangePos].Name = "TrackedChangesViewSettings"; - pProps[nChangePos].Value <<= aChangeProps; - } + sal_Int32 nChangePos(rProps.getLength()); + rProps.realloc(nChangePos + 1); + beans::PropertyValue* pProps(rProps.getArray()); + + uno::Sequence aChangeProps(SC_VIEWCHANGES_COUNT); + beans::PropertyValue* pChangeProps(aChangeProps.getArray()); + pChangeProps[SC_SHOW_CHANGES].Name = "ShowChanges"; + pChangeProps[SC_SHOW_CHANGES].Value <<= pViewSettings->ShowChanges(); + pChangeProps[SC_SHOW_ACCEPTED_CHANGES].Name = "ShowAcceptedChanges"; + pChangeProps[SC_SHOW_ACCEPTED_CHANGES].Value <<= pViewSettings->IsShowAccepted(); + pChangeProps[SC_SHOW_REJECTED_CHANGES].Name = "ShowRejectedChanges"; + pChangeProps[SC_SHOW_REJECTED_CHANGES].Value <<= pViewSettings->IsShowRejected(); + pChangeProps[SC_SHOW_CHANGES_BY_DATETIME].Name = "ShowChangesByDatetime"; + pChangeProps[SC_SHOW_CHANGES_BY_DATETIME].Value <<= pViewSettings->HasDate(); + pChangeProps[SC_SHOW_CHANGES_BY_DATETIME_MODE].Name = "ShowChangesByDatetimeMode"; + pChangeProps[SC_SHOW_CHANGES_BY_DATETIME_MODE].Value <<= static_cast(pViewSettings->GetTheDateMode()); + pChangeProps[SC_SHOW_CHANGES_BY_DATETIME_FIRST_DATETIME].Name = "ShowChangesByDatetimeFirstDatetime"; + pChangeProps[SC_SHOW_CHANGES_BY_DATETIME_FIRST_DATETIME].Value <<= pViewSettings->GetTheFirstDateTime().GetUNODateTime(); + pChangeProps[SC_SHOW_CHANGES_BY_DATETIME_SECOND_DATETIME].Name = "ShowChangesByDatetimeSecondDatetime"; + pChangeProps[SC_SHOW_CHANGES_BY_DATETIME_SECOND_DATETIME].Value <<= pViewSettings->GetTheLastDateTime().GetUNODateTime(); + pChangeProps[SC_SHOW_CHANGES_BY_AUTHOR].Name = "ShowChangesByAuthor"; + pChangeProps[SC_SHOW_CHANGES_BY_AUTHOR].Value <<= pViewSettings->HasAuthor(); + pChangeProps[SC_SHOW_CHANGES_BY_AUTHOR_NAME].Name = "ShowChangesByAuthorName"; + pChangeProps[SC_SHOW_CHANGES_BY_AUTHOR_NAME].Value <<= pViewSettings->GetTheAuthorToShow(); + pChangeProps[SC_SHOW_CHANGES_BY_COMMENT].Name = "ShowChangesByComment"; + pChangeProps[SC_SHOW_CHANGES_BY_COMMENT].Value <<= pViewSettings->HasComment(); + pChangeProps[SC_SHOW_CHANGES_BY_COMMENT_TEXT].Name = "ShowChangesByCommentText"; + pChangeProps[SC_SHOW_CHANGES_BY_COMMENT_TEXT].Value <<= pViewSettings->GetTheComment(); + pChangeProps[SC_SHOW_CHANGES_BY_RANGES].Name = "ShowChangesByRanges"; + pChangeProps[SC_SHOW_CHANGES_BY_RANGES].Value <<= pViewSettings->HasRange(); + OUString sRangeList; + ScRangeStringConverter::GetStringFromRangeList(sRangeList, &(pViewSettings->GetTheRangeList()), GetDocument(), FormulaGrammar::CONV_OOO); + pChangeProps[SC_SHOW_CHANGES_BY_RANGES_LIST].Name = "ShowChangesByRangesList"; + pChangeProps[SC_SHOW_CHANGES_BY_RANGES_LIST].Value <<= sRangeList; + + pProps[nChangePos].Name = "TrackedChangesViewSettings"; + pProps[nChangePos].Value <<= aChangeProps; } void ScXMLExport::GetViewSettings(uno::Sequence& rProps) @@ -5098,65 +5098,65 @@ void ScXMLExport::GetViewSettings(uno::Sequence& rProps) void ScXMLExport::GetConfigurationSettings(uno::Sequence& rProps) { - if (GetModel().is()) + if (!GetModel().is()) + return; + + uno::Reference xMultiServiceFactory(GetModel(), uno::UNO_QUERY); + if (!xMultiServiceFactory.is()) + return; + + uno::Reference xProperties(xMultiServiceFactory->createInstance("com.sun.star.comp.SpreadsheetSettings"), uno::UNO_QUERY); + if (xProperties.is()) + SvXMLUnitConverter::convertPropertySet(rProps, xProperties); + + sal_Int32 nPropsToAdd = 0; + OUStringBuffer aTrackedChangesKey; + if (GetDocument() && GetDocument()->GetChangeTrack() && GetDocument()->GetChangeTrack()->IsProtected()) { - uno::Reference xMultiServiceFactory(GetModel(), uno::UNO_QUERY); - if (xMultiServiceFactory.is()) - { - uno::Reference xProperties(xMultiServiceFactory->createInstance("com.sun.star.comp.SpreadsheetSettings"), uno::UNO_QUERY); - if (xProperties.is()) - SvXMLUnitConverter::convertPropertySet(rProps, xProperties); + ::comphelper::Base64::encode(aTrackedChangesKey, + GetDocument()->GetChangeTrack()->GetProtection()); + if (!aTrackedChangesKey.isEmpty()) + ++nPropsToAdd; + } - sal_Int32 nPropsToAdd = 0; - OUStringBuffer aTrackedChangesKey; - if (GetDocument() && GetDocument()->GetChangeTrack() && GetDocument()->GetChangeTrack()->IsProtected()) - { - ::comphelper::Base64::encode(aTrackedChangesKey, - GetDocument()->GetChangeTrack()->GetProtection()); - if (!aTrackedChangesKey.isEmpty()) - ++nPropsToAdd; - } + bool bVBACompat = false; + uno::Reference xCodeNameAccess; + OSL_ENSURE( pDoc, "ScXMLExport::GetConfigurationSettings - no ScDocument!" ); + if( pDoc && pDoc->IsInVBAMode() ) + { + // VBA compatibility mode + bVBACompat = true; + ++nPropsToAdd; + // code names + xCodeNameAccess = new XMLCodeNameProvider( pDoc ); + if( xCodeNameAccess->hasElements() ) + ++nPropsToAdd; + else + xCodeNameAccess.clear(); + } - bool bVBACompat = false; - uno::Reference xCodeNameAccess; - OSL_ENSURE( pDoc, "ScXMLExport::GetConfigurationSettings - no ScDocument!" ); - if( pDoc && pDoc->IsInVBAMode() ) - { - // VBA compatibility mode - bVBACompat = true; - ++nPropsToAdd; - // code names - xCodeNameAccess = new XMLCodeNameProvider( pDoc ); - if( xCodeNameAccess->hasElements() ) - ++nPropsToAdd; - else - xCodeNameAccess.clear(); - } + if( nPropsToAdd <= 0 ) + return; - if( nPropsToAdd > 0 ) - { - sal_Int32 nCount(rProps.getLength()); - rProps.realloc(nCount + nPropsToAdd); - if (!aTrackedChangesKey.isEmpty()) - { - rProps[nCount].Name = "TrackedChangesProtectionKey"; - rProps[nCount].Value <<= aTrackedChangesKey.makeStringAndClear(); - ++nCount; - } - if( bVBACompat ) - { - rProps[nCount].Name = "VBACompatibilityMode"; - rProps[nCount].Value <<= bVBACompat; - ++nCount; - } - if( xCodeNameAccess.is() ) - { - rProps[nCount].Name = "ScriptConfiguration"; - rProps[nCount].Value <<= xCodeNameAccess; - ++nCount; - } - } - } + sal_Int32 nCount(rProps.getLength()); + rProps.realloc(nCount + nPropsToAdd); + if (!aTrackedChangesKey.isEmpty()) + { + rProps[nCount].Name = "TrackedChangesProtectionKey"; + rProps[nCount].Value <<= aTrackedChangesKey.makeStringAndClear(); + ++nCount; + } + if( bVBACompat ) + { + rProps[nCount].Name = "VBACompatibilityMode"; + rProps[nCount].Value <<= bVBACompat; + ++nCount; + } + if( xCodeNameAccess.is() ) + { + rProps[nCount].Name = "ScriptConfiguration"; + rProps[nCount].Value <<= xCodeNameAccess; + ++nCount; } } diff --git a/sc/source/filter/xml/xmlexternaltabi.cxx b/sc/source/filter/xml/xmlexternaltabi.cxx index 8185cf6f5821..a0d9297dad46 100644 --- a/sc/source/filter/xml/xmlexternaltabi.cxx +++ b/sc/source/filter/xml/xmlexternaltabi.cxx @@ -47,21 +47,21 @@ ScXMLExternalRefTabSourceContext::ScXMLExternalRefTabSourceContext( { using namespace ::xmloff::token; - if ( rAttrList.is() ) + if ( !rAttrList.is() ) + return; + + for (auto &it : *rAttrList) { - for (auto &it : *rAttrList) - { - sal_Int32 nAttrToken = it.getToken(); - if ( nAttrToken == XML_ELEMENT( XLINK, XML_HREF ) ) - maRelativeUrl = it.toString(); - else if ( nAttrToken == XML_ELEMENT( TABLE, XML_TABLE_NAME ) ) - // todo - ; - else if ( nAttrToken == XML_ELEMENT( TABLE, XML_FILTER_NAME ) ) - maFilterName = it.toString(); - else if ( nAttrToken == XML_ELEMENT( TABLE, XML_FILTER_OPTIONS ) ) - maFilterOptions = it.toString(); - } + sal_Int32 nAttrToken = it.getToken(); + if ( nAttrToken == XML_ELEMENT( XLINK, XML_HREF ) ) + maRelativeUrl = it.toString(); + else if ( nAttrToken == XML_ELEMENT( TABLE, XML_TABLE_NAME ) ) + // todo + ; + else if ( nAttrToken == XML_ELEMENT( TABLE, XML_FILTER_NAME ) ) + maFilterName = it.toString(); + else if ( nAttrToken == XML_ELEMENT( TABLE, XML_FILTER_OPTIONS ) ) + maFilterOptions = it.toString(); } } @@ -156,18 +156,18 @@ ScXMLExternalRefRowContext::ScXMLExternalRefRowContext( mrExternalRefInfo.mnCol = 0; const SvXMLTokenMap& rAttrTokenMap = mrScImport.GetTableRowAttrTokenMap(); - if ( rAttrList.is() ) + if ( !rAttrList.is() ) + return; + + for (auto &it : *rAttrList) { - for (auto &it : *rAttrList) + switch ( rAttrTokenMap.Get( it.getToken() ) ) { - switch ( rAttrTokenMap.Get( it.getToken() ) ) + case XML_TOK_TABLE_ROW_ATTR_REPEATED: { - case XML_TOK_TABLE_ROW_ATTR_REPEATED: - { - mnRepeatRowCount = std::max(it.toInt32(), static_cast(1)); - } - break; + mnRepeatRowCount = std::max(it.toInt32(), static_cast(1)); } + break; } } } @@ -236,84 +236,84 @@ ScXMLExternalRefCellContext::ScXMLExternalRefCellContext( using namespace ::xmloff::token; const SvXMLTokenMap& rTokenMap = rImport.GetTableRowCellAttrTokenMap(); - if ( rAttrList.is() ) + if ( !rAttrList.is() ) + return; + + for (auto &it : *rAttrList) { - for (auto &it : *rAttrList) + switch ( rTokenMap.Get( it.getToken() ) ) { - switch ( rTokenMap.Get( it.getToken() ) ) + case XML_TOK_TABLE_ROW_CELL_ATTR_STYLE_NAME: { - case XML_TOK_TABLE_ROW_CELL_ATTR_STYLE_NAME: - { - XMLTableStylesContext* pStyles = static_cast(mrScImport.GetAutoStyles()); - const XMLTableStyleContext* pStyle = static_cast( - pStyles->FindStyleChildContext(XmlStyleFamily::TABLE_CELL, it.toString(), true)); - if (pStyle) - mnNumberFormat = const_cast(pStyle)->GetNumberFormat(); - } - break; - case XML_TOK_TABLE_ROW_CELL_ATTR_REPEATED: - { - mnRepeatCount = ::std::max( it.toInt32(), static_cast(1) ); - } - break; - case XML_TOK_TABLE_ROW_CELL_ATTR_VALUE_TYPE: - { - mnCellType = ScXMLImport::GetCellType( it.toCString(), it.getLength() ); - } - break; - case XML_TOK_TABLE_ROW_CELL_ATTR_VALUE: + XMLTableStylesContext* pStyles = static_cast(mrScImport.GetAutoStyles()); + const XMLTableStyleContext* pStyle = static_cast( + pStyles->FindStyleChildContext(XmlStyleFamily::TABLE_CELL, it.toString(), true)); + if (pStyle) + mnNumberFormat = const_cast(pStyle)->GetNumberFormat(); + } + break; + case XML_TOK_TABLE_ROW_CELL_ATTR_REPEATED: + { + mnRepeatCount = ::std::max( it.toInt32(), static_cast(1) ); + } + break; + case XML_TOK_TABLE_ROW_CELL_ATTR_VALUE_TYPE: + { + mnCellType = ScXMLImport::GetCellType( it.toCString(), it.getLength() ); + } + break; + case XML_TOK_TABLE_ROW_CELL_ATTR_VALUE: + { + if ( !it.isEmpty() ) { - if ( !it.isEmpty() ) - { - mfCellValue = it.toDouble(); - mbIsNumeric = true; - mbIsEmpty = false; - } + mfCellValue = it.toDouble(); + mbIsNumeric = true; + mbIsEmpty = false; } - break; - case XML_TOK_TABLE_ROW_CELL_ATTR_DATE_VALUE: + } + break; + case XML_TOK_TABLE_ROW_CELL_ATTR_DATE_VALUE: + { + if ( !it.isEmpty() && mrScImport.SetNullDateOnUnitConverter() ) { - if ( !it.isEmpty() && mrScImport.SetNullDateOnUnitConverter() ) - { - mrScImport.GetMM100UnitConverter().convertDateTime( mfCellValue, it.toString() ); - mbIsNumeric = true; - mbIsEmpty = false; - } + mrScImport.GetMM100UnitConverter().convertDateTime( mfCellValue, it.toString() ); + mbIsNumeric = true; + mbIsEmpty = false; } - break; - case XML_TOK_TABLE_ROW_CELL_ATTR_TIME_VALUE: + } + break; + case XML_TOK_TABLE_ROW_CELL_ATTR_TIME_VALUE: + { + if ( !it.isEmpty() ) { - if ( !it.isEmpty() ) - { - ::sax::Converter::convertDuration( mfCellValue, it.toString() ); - mbIsNumeric = true; - mbIsEmpty = false; - } + ::sax::Converter::convertDuration( mfCellValue, it.toString() ); + mbIsNumeric = true; + mbIsEmpty = false; } - break; - case XML_TOK_TABLE_ROW_CELL_ATTR_STRING_VALUE: + } + break; + case XML_TOK_TABLE_ROW_CELL_ATTR_STRING_VALUE: + { + if ( !it.isEmpty() ) { - if ( !it.isEmpty() ) - { - maCellString = it.toString(); - mbIsNumeric = false; - mbIsEmpty = false; - } + maCellString = it.toString(); + mbIsNumeric = false; + mbIsEmpty = false; } - break; - case XML_TOK_TABLE_ROW_CELL_ATTR_BOOLEAN_VALUE: + } + break; + case XML_TOK_TABLE_ROW_CELL_ATTR_BOOLEAN_VALUE: + { + if ( !it.isEmpty() ) { - if ( !it.isEmpty() ) - { - mfCellValue = IsXMLToken( it, XML_TRUE ) ? 1.0 : 0.0; - mbIsNumeric = true; - mbIsEmpty = false; - } + mfCellValue = IsXMLToken( it, XML_TRUE ) ? 1.0 : 0.0; + mbIsNumeric = true; + mbIsEmpty = false; } - break; - default: - ; } + break; + default: + ; } } } diff --git a/sc/source/filter/xml/xmlfilti.cxx b/sc/source/filter/xml/xmlfilti.cxx index 49013cfc4c6c..947a70695ffa 100644 --- a/sc/source/filter/xml/xmlfilti.cxx +++ b/sc/source/filter/xml/xmlfilti.cxx @@ -50,41 +50,41 @@ ScXMLFilterContext::ScXMLFilterContext( ScXMLImport& rImport, { ScDocument* pDoc(GetScImport().GetDocument()); - if ( rAttrList.is() ) + if ( !rAttrList.is() ) + return; + + for (auto &aIter : *rAttrList) { - for (auto &aIter : *rAttrList) + switch (aIter.getToken()) { - switch (aIter.getToken()) + case XML_ELEMENT( TABLE, XML_TARGET_RANGE_ADDRESS ): { - case XML_ELEMENT( TABLE, XML_TARGET_RANGE_ADDRESS ): - { - ScRange aScRange; - sal_Int32 nOffset(0); - if (ScRangeStringConverter::GetRangeFromString( aScRange, aIter.toString(), pDoc, ::formula::FormulaGrammar::CONV_OOO, nOffset )) - { - aOutputPosition = aScRange.aStart; - bCopyOutputData = true; - } - } - break; - case XML_ELEMENT( TABLE, XML_CONDITION_SOURCE_RANGE_ADDRESS ): - { - sal_Int32 nOffset(0); - if (ScRangeStringConverter::GetRangeFromString( aConditionSourceRangeAddress, aIter.toString(), pDoc, ::formula::FormulaGrammar::CONV_OOO, nOffset ) ) - bConditionSourceRange = true; - } - break; - case XML_ELEMENT( TABLE, XML_CONDITION_SOURCE ): + ScRange aScRange; + sal_Int32 nOffset(0); + if (ScRangeStringConverter::GetRangeFromString( aScRange, aIter.toString(), pDoc, ::formula::FormulaGrammar::CONV_OOO, nOffset )) { - // not supported by StarOffice + aOutputPosition = aScRange.aStart; + bCopyOutputData = true; } - break; - case XML_ELEMENT( TABLE, XML_DISPLAY_DUPLICATES ): - { - bSkipDuplicates = !IsXMLToken(aIter, XML_TRUE); - } - break; } + break; + case XML_ELEMENT( TABLE, XML_CONDITION_SOURCE_RANGE_ADDRESS ): + { + sal_Int32 nOffset(0); + if (ScRangeStringConverter::GetRangeFromString( aConditionSourceRangeAddress, aIter.toString(), pDoc, ::formula::FormulaGrammar::CONV_OOO, nOffset ) ) + bConditionSourceRange = true; + } + break; + case XML_ELEMENT( TABLE, XML_CONDITION_SOURCE ): + { + // not supported by StarOffice + } + break; + case XML_ELEMENT( TABLE, XML_DISPLAY_DUPLICATES ): + { + bSkipDuplicates = !IsXMLToken(aIter, XML_TRUE); + } + break; } } } @@ -285,38 +285,38 @@ ScXMLConditionContext::ScXMLConditionContext( bIsCaseSensitive(false) { - if ( rAttrList.is() ) + if ( !rAttrList.is() ) + return; + + for (auto &aIter : *rAttrList) { - for (auto &aIter : *rAttrList) + switch (aIter.getToken()) { - switch (aIter.getToken()) + case XML_ELEMENT( TABLE, XML_FIELD_NUMBER ): { - case XML_ELEMENT( TABLE, XML_FIELD_NUMBER ): - { - nField = aIter.toInt32(); - } - break; - case XML_ELEMENT( TABLE, XML_CASE_SENSITIVE ): - { - bIsCaseSensitive = IsXMLToken(aIter, XML_TRUE); - } - break; - case XML_ELEMENT( TABLE, XML_DATA_TYPE ): - { - sDataType = aIter.toString(); - } - break; - case XML_ELEMENT( TABLE, XML_VALUE ): - { - sConditionValue = aIter.toString(); - } - break; - case XML_ELEMENT( TABLE, XML_OPERATOR ): - { - sOperator = aIter.toString(); - } - break; + nField = aIter.toInt32(); + } + break; + case XML_ELEMENT( TABLE, XML_CASE_SENSITIVE ): + { + bIsCaseSensitive = IsXMLToken(aIter, XML_TRUE); + } + break; + case XML_ELEMENT( TABLE, XML_DATA_TYPE ): + { + sDataType = aIter.toString(); } + break; + case XML_ELEMENT( TABLE, XML_VALUE ): + { + sConditionValue = aIter.toString(); + } + break; + case XML_ELEMENT( TABLE, XML_OPERATOR ): + { + sOperator = aIter.toString(); + } + break; } } } @@ -440,23 +440,23 @@ ScXMLSetItemContext::ScXMLSetItemContext( const rtl::Reference& rAttrList, ScXMLConditionContext& rParent) : ScXMLImportContext(rImport) { - if ( rAttrList.is() ) + if ( !rAttrList.is() ) + return; + + for (auto &aIter : *rAttrList) { - for (auto &aIter : *rAttrList) + switch (aIter.getToken()) { - switch (aIter.getToken()) + case XML_ELEMENT( TABLE, XML_VALUE ): { - case XML_ELEMENT( TABLE, XML_VALUE ): - { - svl::SharedStringPool& rPool = GetScImport().GetDocument()->GetSharedStringPool(); - ScQueryEntry::Item aItem; - aItem.maString = rPool.intern(aIter.toString()); - aItem.meType = ScQueryEntry::ByString; - aItem.mfVal = 0.0; - rParent.AddSetItem(aItem); - } - break; + svl::SharedStringPool& rPool = GetScImport().GetDocument()->GetSharedStringPool(); + ScQueryEntry::Item aItem; + aItem.maString = rPool.intern(aIter.toString()); + aItem.meType = ScQueryEntry::ByString; + aItem.mfVal = 0.0; + rParent.AddSetItem(aItem); } + break; } } } @@ -478,34 +478,34 @@ ScXMLDPFilterContext::ScXMLDPFilterContext( ScXMLImport& rImport, bConnectionOr(true), bNextConnectionOr(true) { - if ( rAttrList.is() ) + if ( !rAttrList.is() ) + return; + + for (auto &aIter : *rAttrList) { - for (auto &aIter : *rAttrList) + switch (aIter.getToken()) { - switch (aIter.getToken()) + case XML_ELEMENT( TABLE, XML_TARGET_RANGE_ADDRESS ): { - case XML_ELEMENT( TABLE, XML_TARGET_RANGE_ADDRESS ): - { - // not supported - } - break; - case XML_ELEMENT( TABLE, XML_CONDITION_SOURCE_RANGE_ADDRESS ): - { - // not supported - } - break; - case XML_ELEMENT( TABLE, XML_CONDITION_SOURCE ): - { - // not supported by StarOffice - } - break; - case XML_ELEMENT( TABLE, XML_DISPLAY_DUPLICATES ): - { - bSkipDuplicates = !IsXMLToken(aIter, XML_TRUE); - } - break; - } - } + // not supported + } + break; + case XML_ELEMENT( TABLE, XML_CONDITION_SOURCE_RANGE_ADDRESS ): + { + // not supported + } + break; + case XML_ELEMENT( TABLE, XML_CONDITION_SOURCE ): + { + // not supported by StarOffice + } + break; + case XML_ELEMENT( TABLE, XML_DISPLAY_DUPLICATES ): + { + bSkipDuplicates = !IsXMLToken(aIter, XML_TRUE); + } + break; + } } } @@ -653,38 +653,38 @@ ScXMLDPConditionContext::ScXMLDPConditionContext( ScXMLImport& rImport, bIsCaseSensitive(false) { - if ( rAttrList.is() ) + if ( !rAttrList.is() ) + return; + + for (auto &aIter : *rAttrList) { - for (auto &aIter : *rAttrList) + switch (aIter.getToken()) { - switch (aIter.getToken()) + case XML_ELEMENT( TABLE, XML_FIELD_NUMBER ): { - case XML_ELEMENT( TABLE, XML_FIELD_NUMBER ): - { - nField = aIter.toInt32(); - } - break; - case XML_ELEMENT( TABLE, XML_CASE_SENSITIVE ): - { - bIsCaseSensitive = IsXMLToken(aIter, XML_TRUE); - } - break; - case XML_ELEMENT( TABLE, XML_DATA_TYPE ): - { - sDataType = aIter.toString(); - } - break; - case XML_ELEMENT( TABLE, XML_VALUE ): - { - sConditionValue = aIter.toString(); - } - break; - case XML_ELEMENT( TABLE, XML_OPERATOR ): - { - sOperator = aIter.toString(); - } - break; + nField = aIter.toInt32(); + } + break; + case XML_ELEMENT( TABLE, XML_CASE_SENSITIVE ): + { + bIsCaseSensitive = IsXMLToken(aIter, XML_TRUE); + } + break; + case XML_ELEMENT( TABLE, XML_DATA_TYPE ): + { + sDataType = aIter.toString(); + } + break; + case XML_ELEMENT( TABLE, XML_VALUE ): + { + sConditionValue = aIter.toString(); + } + break; + case XML_ELEMENT( TABLE, XML_OPERATOR ): + { + sOperator = aIter.toString(); } + break; } } } diff --git a/sc/source/filter/xml/xmlfonte.cxx b/sc/source/filter/xml/xmlfonte.cxx index 754c6471798f..1120ed9cfd09 100644 --- a/sc/source/filter/xml/xmlfonte.cxx +++ b/sc/source/filter/xml/xmlfonte.cxx @@ -93,50 +93,50 @@ ScXMLFontAutoStylePool_Impl::ScXMLFontAutoStylePool_Impl(ScXMLExport& rExportP, m_bEmbedAsianScript = rExportP.GetDocument()->IsEmbedFontScriptAsian(); m_bEmbedComplexScript = rExportP.GetDocument()->IsEmbedFontScriptComplex(); - if(pItr) + if(!pItr) + return; + + SfxStyleSheetBase* pStyle(pItr->First()); + + if(!pStyle) + return; + + // #i120077# remember the SfxItemPool in member variable before usage. The + // local EditEngine will not take over ownership of the pool. + mpEditEnginePool = EditEngine::CreatePool(); + EditEngine aEditEngine(mpEditEnginePool); + + while (pStyle) { - SfxStyleSheetBase* pStyle(pItr->First()); + const SfxItemPool& rPagePool(pStyle->GetPool()->GetPool()); - if(pStyle) + for (sal_uInt16 nPageWhichId : aPageWhichIds) { - // #i120077# remember the SfxItemPool in member variable before usage. The - // local EditEngine will not take over ownership of the pool. - mpEditEnginePool = EditEngine::CreatePool(); - EditEngine aEditEngine(mpEditEnginePool); - - while (pStyle) + for (const SfxPoolItem* pItem : rPagePool.GetItemSurrogates( nPageWhichId )) { - const SfxItemPool& rPagePool(pStyle->GetPool()->GetPool()); - - for (sal_uInt16 nPageWhichId : aPageWhichIds) + const ScPageHFItem* pPageItem = static_cast(pItem); + const EditTextObject* pLeftArea(pPageItem->GetLeftArea()); + if (pLeftArea) { - for (const SfxPoolItem* pItem : rPagePool.GetItemSurrogates( nPageWhichId )) - { - const ScPageHFItem* pPageItem = static_cast(pItem); - const EditTextObject* pLeftArea(pPageItem->GetLeftArea()); - if (pLeftArea) - { - aEditEngine.SetText(*pLeftArea); - AddFontItems(aEditWhichIds, 3, mpEditEnginePool, false); - } - const EditTextObject* pCenterArea(pPageItem->GetCenterArea()); - if (pCenterArea) - { - aEditEngine.SetText(*pCenterArea); - AddFontItems(aEditWhichIds, 3, mpEditEnginePool, false); - } - const EditTextObject* pRightArea(pPageItem->GetRightArea()); - if (pRightArea) - { - aEditEngine.SetText(*pRightArea); - AddFontItems(aEditWhichIds, 3, mpEditEnginePool, false); - } - } + aEditEngine.SetText(*pLeftArea); + AddFontItems(aEditWhichIds, 3, mpEditEnginePool, false); + } + const EditTextObject* pCenterArea(pPageItem->GetCenterArea()); + if (pCenterArea) + { + aEditEngine.SetText(*pCenterArea); + AddFontItems(aEditWhichIds, 3, mpEditEnginePool, false); + } + const EditTextObject* pRightArea(pPageItem->GetRightArea()); + if (pRightArea) + { + aEditEngine.SetText(*pRightArea); + AddFontItems(aEditWhichIds, 3, mpEditEnginePool, false); } - - pStyle = pItr->Next(); } } + + pStyle = pItr->Next(); } } diff --git a/sc/source/filter/xml/xmlimprt.cxx b/sc/source/filter/xml/xmlimprt.cxx index da3624b2e5ce..0290c4fe6ec9 100644 --- a/sc/source/filter/xml/xmlimprt.cxx +++ b/sc/source/filter/xml/xmlimprt.cxx @@ -837,82 +837,82 @@ void ScXMLImport::ExamineDefaultStyle() void ScXMLImport::SetChangeTrackingViewSettings(const css::uno::Sequence& rChangeProps) { - if (pDoc) + if (!pDoc) + return; + + if (!rChangeProps.hasElements()) + return; + + ScXMLImport::MutexGuard aGuard(*this); + sal_Int16 nTemp16(0); + std::unique_ptr pViewSettings(new ScChangeViewSettings()); + for (const auto& rChangeProp : rChangeProps) { - if (rChangeProps.hasElements()) + OUString sName(rChangeProp.Name); + if (sName == "ShowChanges") + pViewSettings->SetShowChanges(::cppu::any2bool(rChangeProp.Value)); + else if (sName == "ShowAcceptedChanges") + pViewSettings->SetShowAccepted(::cppu::any2bool(rChangeProp.Value)); + else if (sName == "ShowRejectedChanges") + pViewSettings->SetShowRejected(::cppu::any2bool(rChangeProp.Value)); + else if (sName == "ShowChangesByDatetime") + pViewSettings->SetHasDate(::cppu::any2bool(rChangeProp.Value)); + else if (sName == "ShowChangesByDatetimeMode") + { + if (rChangeProp.Value >>= nTemp16) + pViewSettings->SetTheDateMode(static_cast(nTemp16)); + } + else if (sName == "ShowChangesByDatetimeFirstDatetime") { - ScXMLImport::MutexGuard aGuard(*this); - sal_Int16 nTemp16(0); - std::unique_ptr pViewSettings(new ScChangeViewSettings()); - for (const auto& rChangeProp : rChangeProps) + util::DateTime aDateTime; + if (rChangeProp.Value >>= aDateTime) { - OUString sName(rChangeProp.Name); - if (sName == "ShowChanges") - pViewSettings->SetShowChanges(::cppu::any2bool(rChangeProp.Value)); - else if (sName == "ShowAcceptedChanges") - pViewSettings->SetShowAccepted(::cppu::any2bool(rChangeProp.Value)); - else if (sName == "ShowRejectedChanges") - pViewSettings->SetShowRejected(::cppu::any2bool(rChangeProp.Value)); - else if (sName == "ShowChangesByDatetime") - pViewSettings->SetHasDate(::cppu::any2bool(rChangeProp.Value)); - else if (sName == "ShowChangesByDatetimeMode") - { - if (rChangeProp.Value >>= nTemp16) - pViewSettings->SetTheDateMode(static_cast(nTemp16)); - } - else if (sName == "ShowChangesByDatetimeFirstDatetime") - { - util::DateTime aDateTime; - if (rChangeProp.Value >>= aDateTime) - { - pViewSettings->SetTheFirstDateTime(::DateTime(aDateTime)); - } - } - else if (sName == "ShowChangesByDatetimeSecondDatetime") - { - util::DateTime aDateTime; - if (rChangeProp.Value >>= aDateTime) - { - pViewSettings->SetTheLastDateTime(::DateTime(aDateTime)); - } - } - else if (sName == "ShowChangesByAuthor") - pViewSettings->SetHasAuthor(::cppu::any2bool(rChangeProp.Value)); - else if (sName == "ShowChangesByAuthorName") - { - OUString sOUName; - if (rChangeProp.Value >>= sOUName) - { - pViewSettings->SetTheAuthorToShow(sOUName); - } - } - else if (sName == "ShowChangesByComment") - pViewSettings->SetHasComment(::cppu::any2bool(rChangeProp.Value)); - else if (sName == "ShowChangesByCommentText") - { - OUString sOUComment; - if (rChangeProp.Value >>= sOUComment) - { - pViewSettings->SetTheComment(sOUComment); - } - } - else if (sName == "ShowChangesByRanges") - pViewSettings->SetHasRange(::cppu::any2bool(rChangeProp.Value)); - else if (sName == "ShowChangesByRangesList") - { - OUString sRanges; - if ((rChangeProp.Value >>= sRanges) && !sRanges.isEmpty()) - { - ScRangeList aRangeList; - ScRangeStringConverter::GetRangeListFromString( - aRangeList, sRanges, GetDocument(), FormulaGrammar::CONV_OOO); - pViewSettings->SetTheRangeList(aRangeList); - } - } + pViewSettings->SetTheFirstDateTime(::DateTime(aDateTime)); + } + } + else if (sName == "ShowChangesByDatetimeSecondDatetime") + { + util::DateTime aDateTime; + if (rChangeProp.Value >>= aDateTime) + { + pViewSettings->SetTheLastDateTime(::DateTime(aDateTime)); + } + } + else if (sName == "ShowChangesByAuthor") + pViewSettings->SetHasAuthor(::cppu::any2bool(rChangeProp.Value)); + else if (sName == "ShowChangesByAuthorName") + { + OUString sOUName; + if (rChangeProp.Value >>= sOUName) + { + pViewSettings->SetTheAuthorToShow(sOUName); + } + } + else if (sName == "ShowChangesByComment") + pViewSettings->SetHasComment(::cppu::any2bool(rChangeProp.Value)); + else if (sName == "ShowChangesByCommentText") + { + OUString sOUComment; + if (rChangeProp.Value >>= sOUComment) + { + pViewSettings->SetTheComment(sOUComment); + } + } + else if (sName == "ShowChangesByRanges") + pViewSettings->SetHasRange(::cppu::any2bool(rChangeProp.Value)); + else if (sName == "ShowChangesByRangesList") + { + OUString sRanges; + if ((rChangeProp.Value >>= sRanges) && !sRanges.isEmpty()) + { + ScRangeList aRangeList; + ScRangeStringConverter::GetRangeListFromString( + aRangeList, sRanges, GetDocument(), FormulaGrammar::CONV_OOO); + pViewSettings->SetTheRangeList(aRangeList); } - pDoc->SetChangeViewSettings(*pViewSettings); } } + pDoc->SetChangeViewSettings(*pViewSettings); } void ScXMLImport::SetViewSettings(const uno::Sequence& aViewProps) @@ -939,81 +939,81 @@ void ScXMLImport::SetViewSettings(const uno::Sequence& aVi SetChangeTrackingViewSettings(aChangeProps); } } - if (nHeight && nWidth && GetModel().is()) + if (!(nHeight && nWidth && GetModel().is())) + return; + + ScModelObj* pDocObj(comphelper::getUnoTunnelImplementation( GetModel() )); + if (!pDocObj) + return; + + SfxObjectShell* pEmbeddedObj = pDocObj->GetEmbeddedObject(); + if (pEmbeddedObj) { - ScModelObj* pDocObj(comphelper::getUnoTunnelImplementation( GetModel() )); - if (pDocObj) - { - SfxObjectShell* pEmbeddedObj = pDocObj->GetEmbeddedObject(); - if (pEmbeddedObj) - { - tools::Rectangle aRect; - aRect.setX( nLeft ); - aRect.setY( nTop ); - aRect.setWidth( nWidth ); - aRect.setHeight( nHeight ); - pEmbeddedObj->SetVisArea(aRect); - } - } + tools::Rectangle aRect; + aRect.setX( nLeft ); + aRect.setY( nTop ); + aRect.setWidth( nWidth ); + aRect.setHeight( nHeight ); + pEmbeddedObj->SetVisArea(aRect); } } void ScXMLImport::SetConfigurationSettings(const uno::Sequence& aConfigProps) { - if (GetModel().is()) + if (!GetModel().is()) + return; + + uno::Reference xMultiServiceFactory(GetModel(), uno::UNO_QUERY); + if (!xMultiServiceFactory.is()) + return; + + sal_Int32 nCount(aConfigProps.getLength()); + css::uno::Sequence aFilteredProps(nCount); + sal_Int32 nFilteredPropsLen = 0; + for (sal_Int32 i = nCount - 1; i >= 0; --i) { - uno::Reference xMultiServiceFactory(GetModel(), uno::UNO_QUERY); - if (xMultiServiceFactory.is()) + if (aConfigProps[i].Name == "TrackedChangesProtectionKey") { - sal_Int32 nCount(aConfigProps.getLength()); - css::uno::Sequence aFilteredProps(nCount); - sal_Int32 nFilteredPropsLen = 0; - for (sal_Int32 i = nCount - 1; i >= 0; --i) + OUString sKey; + if (aConfigProps[i].Value >>= sKey) { - if (aConfigProps[i].Name == "TrackedChangesProtectionKey") + uno::Sequence aPass; + ::comphelper::Base64::decode(aPass, sKey); + if (aPass.hasElements()) { - OUString sKey; - if (aConfigProps[i].Value >>= sKey) + if (pDoc->GetChangeTrack()) + pDoc->GetChangeTrack()->SetProtection(aPass); + else { - uno::Sequence aPass; - ::comphelper::Base64::decode(aPass, sKey); - if (aPass.hasElements()) - { - if (pDoc->GetChangeTrack()) - pDoc->GetChangeTrack()->SetProtection(aPass); - else - { - std::set aUsers; - std::unique_ptr pTrack( new ScChangeTrack(pDoc, aUsers) ); - pTrack->SetProtection(aPass); - pDoc->SetChangeTrack(std::move(pTrack)); - } - } - } - } - // store the following items for later use (after document is loaded) - else if ((aConfigProps[i].Name == "VBACompatibilityMode") || (aConfigProps[i].Name == "ScriptConfiguration")) - { - uno::Reference< beans::XPropertySet > xImportInfo = getImportInfo(); - if (xImportInfo.is()) - { - uno::Reference< beans::XPropertySetInfo > xPropertySetInfo = xImportInfo->getPropertySetInfo(); - if (xPropertySetInfo.is() && xPropertySetInfo->hasPropertyByName(aConfigProps[i].Name)) - xImportInfo->setPropertyValue( aConfigProps[i].Name, aConfigProps[i].Value ); + std::set aUsers; + std::unique_ptr pTrack( new ScChangeTrack(pDoc, aUsers) ); + pTrack->SetProtection(aPass); + pDoc->SetChangeTrack(std::move(pTrack)); } } - if (aConfigProps[i].Name != "LinkUpdateMode") - { - aFilteredProps[nFilteredPropsLen++] = aConfigProps[i]; - } } - aFilteredProps.realloc(nFilteredPropsLen); - uno::Reference xInterface = xMultiServiceFactory->createInstance("com.sun.star.comp.SpreadsheetSettings"); - uno::Reference xProperties(xInterface, uno::UNO_QUERY); - if (xProperties.is()) - SvXMLUnitConverter::convertPropertySet(xProperties, aFilteredProps); + } + // store the following items for later use (after document is loaded) + else if ((aConfigProps[i].Name == "VBACompatibilityMode") || (aConfigProps[i].Name == "ScriptConfiguration")) + { + uno::Reference< beans::XPropertySet > xImportInfo = getImportInfo(); + if (xImportInfo.is()) + { + uno::Reference< beans::XPropertySetInfo > xPropertySetInfo = xImportInfo->getPropertySetInfo(); + if (xPropertySetInfo.is() && xPropertySetInfo->hasPropertyByName(aConfigProps[i].Name)) + xImportInfo->setPropertyValue( aConfigProps[i].Name, aConfigProps[i].Value ); + } + } + if (aConfigProps[i].Name != "LinkUpdateMode") + { + aFilteredProps[nFilteredPropsLen++] = aConfigProps[i]; } } + aFilteredProps.realloc(nFilteredPropsLen); + uno::Reference xInterface = xMultiServiceFactory->createInstance("com.sun.star.comp.SpreadsheetSettings"); + uno::Reference xProperties(xInterface, uno::UNO_QUERY); + if (xProperties.is()) + SvXMLUnitConverter::convertPropertySet(xProperties, aFilteredProps); } sal_Int32 ScXMLImport::SetCurrencySymbol(const sal_Int32 nKey, const OUString& rCurrency) @@ -1127,73 +1127,73 @@ void ScXMLImport::SetType(const uno::Reference & rPropertie if (!mbImportStyles) return; - if ((nCellType != util::NumberFormat::TEXT) && (nCellType != util::NumberFormat::UNDEFINED)) + if ((nCellType == util::NumberFormat::TEXT) || (nCellType == util::NumberFormat::UNDEFINED)) + return; + + if (rNumberFormat == -1) + rProperties->getPropertyValue( gsNumberFormat ) >>= rNumberFormat; + OSL_ENSURE(rNumberFormat != -1, "no NumberFormat"); + bool bIsStandard; + // sCurrentCurrency may be the ISO code abbreviation if the currency + // symbol matches such, or if no match found the symbol itself! + OUString sCurrentCurrency; + sal_Int32 nCurrentCellType( + GetNumberFormatAttributesExportHelper()->GetCellType( + rNumberFormat, sCurrentCurrency, bIsStandard) & ~util::NumberFormat::DEFINED); + // If the (numeric) cell type (number, currency, date, time, boolean) + // is different from the format type then for some combinations we may + // have to apply a format, e.g. in case the generator deduced format + // from type and did not apply a format but we don't keep a dedicated + // type internally. Specifically this is necessary if the cell type is + // not number but the format type is (i.e. General). Currency cells + // need extra attention, see calls of ScXMLImport::IsCurrencySymbol() + // and description within there and ScXMLImport::SetCurrencySymbol(). + if ((nCellType != nCurrentCellType) && + (nCellType != util::NumberFormat::NUMBER) && + (bIsStandard || (nCellType == util::NumberFormat::CURRENCY))) { - if (rNumberFormat == -1) - rProperties->getPropertyValue( gsNumberFormat ) >>= rNumberFormat; - OSL_ENSURE(rNumberFormat != -1, "no NumberFormat"); - bool bIsStandard; - // sCurrentCurrency may be the ISO code abbreviation if the currency - // symbol matches such, or if no match found the symbol itself! - OUString sCurrentCurrency; - sal_Int32 nCurrentCellType( - GetNumberFormatAttributesExportHelper()->GetCellType( - rNumberFormat, sCurrentCurrency, bIsStandard) & ~util::NumberFormat::DEFINED); - // If the (numeric) cell type (number, currency, date, time, boolean) - // is different from the format type then for some combinations we may - // have to apply a format, e.g. in case the generator deduced format - // from type and did not apply a format but we don't keep a dedicated - // type internally. Specifically this is necessary if the cell type is - // not number but the format type is (i.e. General). Currency cells - // need extra attention, see calls of ScXMLImport::IsCurrencySymbol() - // and description within there and ScXMLImport::SetCurrencySymbol(). - if ((nCellType != nCurrentCellType) && - (nCellType != util::NumberFormat::NUMBER) && - (bIsStandard || (nCellType == util::NumberFormat::CURRENCY))) + if (!xNumberFormats.is()) { - if (!xNumberFormats.is()) - { - uno::Reference xNumberFormatsSupplier(GetNumberFormatsSupplier()); - if (xNumberFormatsSupplier.is()) - xNumberFormats.set(xNumberFormatsSupplier->getNumberFormats()); - } - if (xNumberFormats.is()) + uno::Reference xNumberFormatsSupplier(GetNumberFormatsSupplier()); + if (xNumberFormatsSupplier.is()) + xNumberFormats.set(xNumberFormatsSupplier->getNumberFormats()); + } + if (xNumberFormats.is()) + { + try { - try + uno::Reference < beans::XPropertySet> xNumberFormatProperties(xNumberFormats->getByKey(rNumberFormat)); + if (xNumberFormatProperties.is()) { - uno::Reference < beans::XPropertySet> xNumberFormatProperties(xNumberFormats->getByKey(rNumberFormat)); - if (xNumberFormatProperties.is()) + if (nCellType != util::NumberFormat::CURRENCY) { - if (nCellType != util::NumberFormat::CURRENCY) + lang::Locale aLocale; + if ( xNumberFormatProperties->getPropertyValue(gsLocale) >>= aLocale ) { - lang::Locale aLocale; - if ( xNumberFormatProperties->getPropertyValue(gsLocale) >>= aLocale ) - { - if (!xNumberFormatTypes.is()) - xNumberFormatTypes.set(uno::Reference (xNumberFormats, uno::UNO_QUERY)); - rProperties->setPropertyValue( gsNumberFormat, uno::makeAny(xNumberFormatTypes->getStandardFormat(nCellType, aLocale)) ); - } - } - else if (!rCurrency.isEmpty() && !sCurrentCurrency.isEmpty()) - { - if (sCurrentCurrency != rCurrency) - if (!IsCurrencySymbol(rNumberFormat, sCurrentCurrency, rCurrency)) - rProperties->setPropertyValue( gsNumberFormat, uno::makeAny(SetCurrencySymbol(rNumberFormat, rCurrency))); + if (!xNumberFormatTypes.is()) + xNumberFormatTypes.set(uno::Reference (xNumberFormats, uno::UNO_QUERY)); + rProperties->setPropertyValue( gsNumberFormat, uno::makeAny(xNumberFormatTypes->getStandardFormat(nCellType, aLocale)) ); } } - } - catch ( uno::Exception& ) - { - OSL_FAIL("Numberformat not found"); + else if (!rCurrency.isEmpty() && !sCurrentCurrency.isEmpty()) + { + if (sCurrentCurrency != rCurrency) + if (!IsCurrencySymbol(rNumberFormat, sCurrentCurrency, rCurrency)) + rProperties->setPropertyValue( gsNumberFormat, uno::makeAny(SetCurrencySymbol(rNumberFormat, rCurrency))); + } } } + catch ( uno::Exception& ) + { + OSL_FAIL("Numberformat not found"); + } } - else - { - if ((nCellType == util::NumberFormat::CURRENCY) && !rCurrency.isEmpty() && !sCurrentCurrency.isEmpty() && - sCurrentCurrency != rCurrency && !IsCurrencySymbol(rNumberFormat, sCurrentCurrency, rCurrency)) - rProperties->setPropertyValue( gsNumberFormat, uno::makeAny(SetCurrencySymbol(rNumberFormat, rCurrency))); - } + } + else + { + if ((nCellType == util::NumberFormat::CURRENCY) && !rCurrency.isEmpty() && !sCurrentCurrency.isEmpty() && + sCurrentCurrency != rCurrency && !IsCurrencySymbol(rNumberFormat, sCurrentCurrency, rCurrency)) + rProperties->setPropertyValue( gsNumberFormat, uno::makeAny(SetCurrencySymbol(rNumberFormat, rCurrency))); } } @@ -1433,42 +1433,42 @@ sal_Int32 ScXMLImport::GetRangeType(const OUString& sRangeType) void ScXMLImport::SetLabelRanges() { - if (pMyLabelRanges) - { - uno::Reference xPropertySet (GetModel(), uno::UNO_QUERY); - if (xPropertySet.is()) - { - uno::Any aColAny = xPropertySet->getPropertyValue(SC_UNO_COLLABELRNG); - uno::Any aRowAny = xPropertySet->getPropertyValue(SC_UNO_ROWLABELRNG); + if (!pMyLabelRanges) + return; - uno::Reference< sheet::XLabelRanges > xColRanges; - uno::Reference< sheet::XLabelRanges > xRowRanges; + uno::Reference xPropertySet (GetModel(), uno::UNO_QUERY); + if (!xPropertySet.is()) + return; - if ( ( aColAny >>= xColRanges ) && ( aRowAny >>= xRowRanges ) ) - { - table::CellRangeAddress aLabelRange; - table::CellRangeAddress aDataRange; + uno::Any aColAny = xPropertySet->getPropertyValue(SC_UNO_COLLABELRNG); + uno::Any aRowAny = xPropertySet->getPropertyValue(SC_UNO_ROWLABELRNG); - for (const auto& rxLabelRange : *pMyLabelRanges) - { - sal_Int32 nOffset1(0); - sal_Int32 nOffset2(0); - FormulaGrammar::AddressConvention eConv = FormulaGrammar::CONV_OOO; + uno::Reference< sheet::XLabelRanges > xColRanges; + uno::Reference< sheet::XLabelRanges > xRowRanges; - if (ScRangeStringConverter::GetRangeFromString( aLabelRange, rxLabelRange->sLabelRangeStr, GetDocument(), eConv, nOffset1 ) && - ScRangeStringConverter::GetRangeFromString( aDataRange, rxLabelRange->sDataRangeStr, GetDocument(), eConv, nOffset2 )) - { - if ( rxLabelRange->bColumnOrientation ) - xColRanges->addNew( aLabelRange, aDataRange ); - else - xRowRanges->addNew( aLabelRange, aDataRange ); - } - } + if ( !(( aColAny >>= xColRanges ) && ( aRowAny >>= xRowRanges )) ) + return; - pMyLabelRanges->clear(); - } + table::CellRangeAddress aLabelRange; + table::CellRangeAddress aDataRange; + + for (const auto& rxLabelRange : *pMyLabelRanges) + { + sal_Int32 nOffset1(0); + sal_Int32 nOffset2(0); + FormulaGrammar::AddressConvention eConv = FormulaGrammar::CONV_OOO; + + if (ScRangeStringConverter::GetRangeFromString( aLabelRange, rxLabelRange->sLabelRangeStr, GetDocument(), eConv, nOffset1 ) && + ScRangeStringConverter::GetRangeFromString( aDataRange, rxLabelRange->sDataRangeStr, GetDocument(), eConv, nOffset2 )) + { + if ( rxLabelRange->bColumnOrientation ) + xColRanges->addNew( aLabelRange, aDataRange ); + else + xRowRanges->addNew( aLabelRange, aDataRange ); } } + + pMyLabelRanges->clear(); } namespace { @@ -1495,24 +1495,24 @@ public: if ( nUnoType & sheet::NamedRangeFlag::COLUMN_HEADER ) nNewType |= ScRangeData::Type::ColHeader; if ( nUnoType & sheet::NamedRangeFlag::ROW_HEADER ) nNewType |= ScRangeData::Type::RowHeader; - if (mpDoc) - { - // Insert a new name. - ScAddress aPos; - sal_Int32 nOffset = 0; - bool bSuccess = ScRangeStringConverter::GetAddressFromString( - aPos, p->sBaseCellAddress, mpDoc, FormulaGrammar::CONV_OOO, nOffset); + if (!mpDoc) + return; - if (bSuccess) - { - OUString aContent = p->sContent; - if (!p->bIsExpression) - ScXMLConverter::ConvertCellRangeAddress(aContent); + // Insert a new name. + ScAddress aPos; + sal_Int32 nOffset = 0; + bool bSuccess = ScRangeStringConverter::GetAddressFromString( + aPos, p->sBaseCellAddress, mpDoc, FormulaGrammar::CONV_OOO, nOffset); - ScRangeData* pData = new ScRangeData( - mpDoc, p->sName, aContent, aPos, nNewType, p->eGrammar); - mrRangeName.insert(pData); - } + if (bSuccess) + { + OUString aContent = p->sContent; + if (!p->bIsExpression) + ScXMLConverter::ConvertCellRangeAddress(aContent); + + ScRangeData* pData = new ScRangeData( + mpDoc, p->sName, aContent, aPos, nNewType, p->eGrammar); + mrRangeName.insert(pData); } } }; diff --git a/sc/source/filter/xml/xmllabri.cxx b/sc/source/filter/xml/xmllabri.cxx index c7b28e8750a0..16acf8f85164 100644 --- a/sc/source/filter/xml/xmllabri.cxx +++ b/sc/source/filter/xml/xmllabri.cxx @@ -60,22 +60,22 @@ ScXMLLabelRangeContext::ScXMLLabelRangeContext( ScXMLImportContext( rImport ), bColumnOrientation( false ) { - if ( rAttrList.is() ) + if ( !rAttrList.is() ) + return; + + for (auto &aIter : *rAttrList) { - for (auto &aIter : *rAttrList) + switch (aIter.getToken()) { - switch (aIter.getToken()) - { - case XML_ELEMENT( TABLE, XML_LABEL_CELL_RANGE_ADDRESS ): - sLabelRangeStr = aIter.toString(); - break; - case XML_ELEMENT( TABLE, XML_DATA_CELL_RANGE_ADDRESS ): - sDataRangeStr = aIter.toString(); - break; - case XML_ELEMENT( TABLE, XML_ORIENTATION ): - bColumnOrientation = IsXMLToken(aIter, XML_COLUMN ); - break; - } + case XML_ELEMENT( TABLE, XML_LABEL_CELL_RANGE_ADDRESS ): + sLabelRangeStr = aIter.toString(); + break; + case XML_ELEMENT( TABLE, XML_DATA_CELL_RANGE_ADDRESS ): + sDataRangeStr = aIter.toString(); + break; + case XML_ELEMENT( TABLE, XML_ORIENTATION ): + bColumnOrientation = IsXMLToken(aIter, XML_COLUMN ); + break; } } } diff --git a/sc/source/filter/xml/xmlrowi.cxx b/sc/source/filter/xml/xmlrowi.cxx index e23b3467428d..bbec80238a26 100644 --- a/sc/source/filter/xml/xmlrowi.cxx +++ b/sc/source/filter/xml/xmlrowi.cxx @@ -143,78 +143,78 @@ void SAL_CALL ScXMLTableRowContext::endFastElement(sal_Int32 /*nElement*/) SCTAB nSheet = rXMLImport.GetTables().GetCurrentSheet(); sal_Int32 nCurrentRow(rXMLImport.GetTables().GetCurrentRow()); uno::Reference xSheet(rXMLImport.GetTables().GetCurrentXSheet()); - if(xSheet.is()) + if(!xSheet.is()) + return; + + sal_Int32 nFirstRow(nCurrentRow - nRepeatedRows + 1); + if (nFirstRow > pDoc->MaxRow()) + nFirstRow = pDoc->MaxRow(); + if (nCurrentRow > pDoc->MaxRow()) + nCurrentRow = pDoc->MaxRow(); + uno::Reference xCellRange(xSheet->getCellRangeByPosition(0, nFirstRow, 0, nCurrentRow)); + if (!xCellRange.is()) + return; + + uno::Reference xColumnRowRange (xCellRange, uno::UNO_QUERY); + if (!xColumnRowRange.is()) + return; + + uno::Reference xRowProperties(xColumnRowRange->getRows(), uno::UNO_QUERY); + if (!xRowProperties.is()) + return; + + if (!sStyleName.isEmpty()) { - sal_Int32 nFirstRow(nCurrentRow - nRepeatedRows + 1); - if (nFirstRow > pDoc->MaxRow()) - nFirstRow = pDoc->MaxRow(); - if (nCurrentRow > pDoc->MaxRow()) - nCurrentRow = pDoc->MaxRow(); - uno::Reference xCellRange(xSheet->getCellRangeByPosition(0, nFirstRow, 0, nCurrentRow)); - if (xCellRange.is()) + XMLTableStylesContext *pStyles(static_cast(rXMLImport.GetAutoStyles())); + if ( pStyles ) { - uno::Reference xColumnRowRange (xCellRange, uno::UNO_QUERY); - if (xColumnRowRange.is()) + XMLTableStyleContext* pStyle(const_cast(static_cast(pStyles->FindStyleChildContext( + XmlStyleFamily::TABLE_ROW, sStyleName, true)))); + if (pStyle) { - uno::Reference xRowProperties(xColumnRowRange->getRows(), uno::UNO_QUERY); - if (xRowProperties.is()) - { - if (!sStyleName.isEmpty()) - { - XMLTableStylesContext *pStyles(static_cast(rXMLImport.GetAutoStyles())); - if ( pStyles ) - { - XMLTableStyleContext* pStyle(const_cast(static_cast(pStyles->FindStyleChildContext( - XmlStyleFamily::TABLE_ROW, sStyleName, true)))); - if (pStyle) - { - pStyle->FillPropertySet(xRowProperties); + pStyle->FillPropertySet(xRowProperties); - if ( nSheet != pStyle->GetLastSheet() ) - { - ScSheetSaveData* pSheetData = comphelper::getUnoTunnelImplementation(rXMLImport.GetModel())->GetSheetSaveData(); - pSheetData->AddRowStyle( sStyleName, ScAddress( 0, static_cast(nFirstRow), nSheet ) ); - pStyle->SetLastSheet(nSheet); - } - } - } - } - bool bVisible (true); - bool bFiltered (false); - if (IsXMLToken(sVisibility, XML_COLLAPSE)) - { - bVisible = false; - } - else if (IsXMLToken(sVisibility, XML_FILTER)) - { - bVisible = false; - bFiltered = true; - } - if (!bVisible) - { - rXMLImport.GetDoc().setRowsVisible(nSheet, nFirstRow, nCurrentRow, false); - } - if (bFiltered) - xRowProperties->setPropertyValue(SC_ISFILTERED, uno::makeAny(bFiltered)); - - uno::Any any = xRowProperties->getPropertyValue(SC_UNONAME_OHEIGHT); - bool bOptionalHeight = false; - any >>= bOptionalHeight; - if (bOptionalHeight) - { - // Save this row for later height update - std::vector& rRecalcRanges = rXMLImport.GetRecalcRowRanges(); - while (static_cast(rRecalcRanges.size()) <= nSheet) - { - rRecalcRanges.emplace_back(0, pDoc->MaxRow()); - } - rRecalcRanges.at(nSheet).mnTab = nSheet; - rRecalcRanges.at(nSheet).maRanges.setTrue(nFirstRow, nCurrentRow); - } + if ( nSheet != pStyle->GetLastSheet() ) + { + ScSheetSaveData* pSheetData = comphelper::getUnoTunnelImplementation(rXMLImport.GetModel())->GetSheetSaveData(); + pSheetData->AddRowStyle( sStyleName, ScAddress( 0, static_cast(nFirstRow), nSheet ) ); + pStyle->SetLastSheet(nSheet); } } } } + bool bVisible (true); + bool bFiltered (false); + if (IsXMLToken(sVisibility, XML_COLLAPSE)) + { + bVisible = false; + } + else if (IsXMLToken(sVisibility, XML_FILTER)) + { + bVisible = false; + bFiltered = true; + } + if (!bVisible) + { + rXMLImport.GetDoc().setRowsVisible(nSheet, nFirstRow, nCurrentRow, false); + } + if (bFiltered) + xRowProperties->setPropertyValue(SC_ISFILTERED, uno::makeAny(bFiltered)); + + uno::Any any = xRowProperties->getPropertyValue(SC_UNONAME_OHEIGHT); + bool bOptionalHeight = false; + any >>= bOptionalHeight; + if (bOptionalHeight) + { + // Save this row for later height update + std::vector& rRecalcRanges = rXMLImport.GetRecalcRowRanges(); + while (static_cast(rRecalcRanges.size()) <= nSheet) + { + rRecalcRanges.emplace_back(0, pDoc->MaxRow()); + } + rRecalcRanges.at(nSheet).mnTab = nSheet; + rRecalcRanges.at(nSheet).maRanges.setTrue(nFirstRow, nCurrentRow); + } } ScXMLTableRowsContext::ScXMLTableRowsContext( ScXMLImport& rImport, diff --git a/sc/source/filter/xml/xmlsceni.cxx b/sc/source/filter/xml/xmlsceni.cxx index 37df2e26db52..27361aa5ed2e 100644 --- a/sc/source/filter/xml/xmlsceni.cxx +++ b/sc/source/filter/xml/xmlsceni.cxx @@ -45,41 +45,41 @@ ScXMLTableScenarioContext::ScXMLTableScenarioContext( { rImport.LockSolarMutex(); - if ( rAttrList.is() ) + if ( !rAttrList.is() ) + return; + + for (auto &aIter : *rAttrList) { - for (auto &aIter : *rAttrList) + switch (aIter.getToken()) { - switch (aIter.getToken()) - { - case XML_ELEMENT( TABLE, XML_DISPLAY_BORDER ): - bDisplayBorder = IsXMLToken(aIter, XML_TRUE); - break; - case XML_ELEMENT( TABLE, XML_BORDER_COLOR ): - ::sax::Converter::convertColor(aBorderColor, aIter.toString()); - break; - case XML_ELEMENT( TABLE, XML_COPY_BACK ): - bCopyBack = IsXMLToken(aIter, XML_TRUE); - break; - case XML_ELEMENT( TABLE, XML_COPY_STYLES ): - bCopyStyles = IsXMLToken(aIter, XML_TRUE); - break; - case XML_ELEMENT( TABLE, XML_COPY_FORMULAS ): - bCopyFormulas = IsXMLToken(aIter, XML_TRUE); - break; - case XML_ELEMENT( TABLE, XML_IS_ACTIVE ): - bIsActive = IsXMLToken(aIter, XML_TRUE); - break; - case XML_ELEMENT( TABLE, XML_SCENARIO_RANGES ): - ScRangeStringConverter::GetRangeListFromString( - aScenarioRanges, aIter.toString(), GetScImport().GetDocument(), ::formula::FormulaGrammar::CONV_OOO ); - break; - case XML_ELEMENT( TABLE, XML_COMMENT ): - sComment = aIter.toString(); - break; - case XML_ELEMENT( TABLE, XML_PROTECTED ): - bProtected = IsXMLToken(aIter, XML_TRUE); - break; - } + case XML_ELEMENT( TABLE, XML_DISPLAY_BORDER ): + bDisplayBorder = IsXMLToken(aIter, XML_TRUE); + break; + case XML_ELEMENT( TABLE, XML_BORDER_COLOR ): + ::sax::Converter::convertColor(aBorderColor, aIter.toString()); + break; + case XML_ELEMENT( TABLE, XML_COPY_BACK ): + bCopyBack = IsXMLToken(aIter, XML_TRUE); + break; + case XML_ELEMENT( TABLE, XML_COPY_STYLES ): + bCopyStyles = IsXMLToken(aIter, XML_TRUE); + break; + case XML_ELEMENT( TABLE, XML_COPY_FORMULAS ): + bCopyFormulas = IsXMLToken(aIter, XML_TRUE); + break; + case XML_ELEMENT( TABLE, XML_IS_ACTIVE ): + bIsActive = IsXMLToken(aIter, XML_TRUE); + break; + case XML_ELEMENT( TABLE, XML_SCENARIO_RANGES ): + ScRangeStringConverter::GetRangeListFromString( + aScenarioRanges, aIter.toString(), GetScImport().GetDocument(), ::formula::FormulaGrammar::CONV_OOO ); + break; + case XML_ELEMENT( TABLE, XML_COMMENT ): + sComment = aIter.toString(); + break; + case XML_ELEMENT( TABLE, XML_PROTECTED ): + bProtected = IsXMLToken(aIter, XML_TRUE); + break; } } } @@ -93,29 +93,29 @@ void SAL_CALL ScXMLTableScenarioContext::endFastElement( sal_Int32 /*nElement*/ { SCTAB nCurrTable( GetScImport().GetTables().GetCurrentSheet() ); ScDocument* pDoc(GetScImport().GetDocument()); - if (pDoc) + if (!pDoc) + return; + + pDoc->SetScenario( nCurrTable, true ); + ScScenarioFlags nFlags( ScScenarioFlags::NONE ); + if( bDisplayBorder ) + nFlags |= ScScenarioFlags::ShowFrame; + if( bCopyBack ) + nFlags |= ScScenarioFlags::TwoWay; + if( bCopyStyles ) + nFlags |= ScScenarioFlags::Attrib; + if( !bCopyFormulas ) + nFlags |= ScScenarioFlags::Value; + if( bProtected ) + nFlags |= ScScenarioFlags::Protected; + pDoc->SetScenarioData( nCurrTable, sComment, aBorderColor, nFlags ); + for( size_t i = 0; i < aScenarioRanges.size(); ++i ) { - pDoc->SetScenario( nCurrTable, true ); - ScScenarioFlags nFlags( ScScenarioFlags::NONE ); - if( bDisplayBorder ) - nFlags |= ScScenarioFlags::ShowFrame; - if( bCopyBack ) - nFlags |= ScScenarioFlags::TwoWay; - if( bCopyStyles ) - nFlags |= ScScenarioFlags::Attrib; - if( !bCopyFormulas ) - nFlags |= ScScenarioFlags::Value; - if( bProtected ) - nFlags |= ScScenarioFlags::Protected; - pDoc->SetScenarioData( nCurrTable, sComment, aBorderColor, nFlags ); - for( size_t i = 0; i < aScenarioRanges.size(); ++i ) - { - ScRange const & rRange = aScenarioRanges[ i ]; - pDoc->ApplyFlagsTab( rRange.aStart.Col(), rRange.aStart.Row(), - rRange.aEnd.Col(), rRange.aEnd.Row(), nCurrTable, ScMF::Scenario ); - } - pDoc->SetActiveScenario( nCurrTable, bIsActive ); + ScRange const & rRange = aScenarioRanges[ i ]; + pDoc->ApplyFlagsTab( rRange.aStart.Col(), rRange.aStart.Row(), + rRange.aEnd.Col(), rRange.aEnd.Row(), nCurrTable, ScMF::Scenario ); } + pDoc->SetActiveScenario( nCurrTable, bIsActive ); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/filter/xml/xmlsorti.cxx b/sc/source/filter/xml/xmlsorti.cxx index 0991c275eaea..16de3a1bc9dc 100644 --- a/sc/source/filter/xml/xmlsorti.cxx +++ b/sc/source/filter/xml/xmlsorti.cxx @@ -44,59 +44,59 @@ ScXMLSortContext::ScXMLSortContext( ScXMLImport& rImport, bIsCaseSensitive(false), bEnabledUserList(false) { - if ( rAttrList.is() ) + if ( !rAttrList.is() ) + return; + + for (auto &aIter : *rAttrList) { - for (auto &aIter : *rAttrList) + switch (aIter.getToken()) { - switch (aIter.getToken()) + case XML_ELEMENT( TABLE, XML_BIND_STYLES_TO_CONTENT ): { - case XML_ELEMENT( TABLE, XML_BIND_STYLES_TO_CONTENT ): - { - bBindFormatsToContent = IsXMLToken(aIter, XML_TRUE); - } - break; - case XML_ELEMENT( TABLE, XML_TARGET_RANGE_ADDRESS ): - { - ScRange aScRange; - sal_Int32 nOffset(0); - if (ScRangeStringConverter::GetRangeFromString( aScRange, aIter.toString(), GetScImport().GetDocument(), ::formula::FormulaGrammar::CONV_OOO, nOffset )) - { - ScUnoConversion::FillApiAddress( aOutputPosition, aScRange.aStart ); - bCopyOutputData = true; - } - } - break; - case XML_ELEMENT( TABLE, XML_CASE_SENSITIVE ): - { - bIsCaseSensitive = IsXMLToken(aIter, XML_TRUE); - } - break; - case XML_ELEMENT( TABLE, XML_RFC_LANGUAGE_TAG ): - { - maLanguageTagODF.maRfcLanguageTag = aIter.toString(); - } - break; - case XML_ELEMENT( TABLE, XML_LANGUAGE ): - { - maLanguageTagODF.maLanguage = aIter.toString(); - } - break; - case XML_ELEMENT( TABLE, XML_SCRIPT ): - { - maLanguageTagODF.maScript = aIter.toString(); - } - break; - case XML_ELEMENT( TABLE, XML_COUNTRY ): - { - maLanguageTagODF.maCountry = aIter.toString(); - } - break; - case XML_ELEMENT( TABLE, XML_ALGORITHM ): + bBindFormatsToContent = IsXMLToken(aIter, XML_TRUE); + } + break; + case XML_ELEMENT( TABLE, XML_TARGET_RANGE_ADDRESS ): + { + ScRange aScRange; + sal_Int32 nOffset(0); + if (ScRangeStringConverter::GetRangeFromString( aScRange, aIter.toString(), GetScImport().GetDocument(), ::formula::FormulaGrammar::CONV_OOO, nOffset )) { - sAlgorithm = aIter.toString(); + ScUnoConversion::FillApiAddress( aOutputPosition, aScRange.aStart ); + bCopyOutputData = true; } - break; } + break; + case XML_ELEMENT( TABLE, XML_CASE_SENSITIVE ): + { + bIsCaseSensitive = IsXMLToken(aIter, XML_TRUE); + } + break; + case XML_ELEMENT( TABLE, XML_RFC_LANGUAGE_TAG ): + { + maLanguageTagODF.maRfcLanguageTag = aIter.toString(); + } + break; + case XML_ELEMENT( TABLE, XML_LANGUAGE ): + { + maLanguageTagODF.maLanguage = aIter.toString(); + } + break; + case XML_ELEMENT( TABLE, XML_SCRIPT ): + { + maLanguageTagODF.maScript = aIter.toString(); + } + break; + case XML_ELEMENT( TABLE, XML_COUNTRY ): + { + maLanguageTagODF.maCountry = aIter.toString(); + } + break; + case XML_ELEMENT( TABLE, XML_ALGORITHM ): + { + sAlgorithm = aIter.toString(); + } + break; } } } @@ -203,28 +203,28 @@ ScXMLSortByContext::ScXMLSortByContext( ScXMLImport& rImport, sDataType(GetXMLToken(XML_AUTOMATIC)), sOrder(GetXMLToken(XML_ASCENDING)) { - if ( rAttrList.is() ) + if ( !rAttrList.is() ) + return; + + for (auto &aIter : *rAttrList) { - for (auto &aIter : *rAttrList) + switch (aIter.getToken()) { - switch (aIter.getToken()) + case XML_ELEMENT( TABLE, XML_FIELD_NUMBER ): { - case XML_ELEMENT( TABLE, XML_FIELD_NUMBER ): - { - sFieldNumber = aIter.toString(); - } - break; - case XML_ELEMENT( TABLE, XML_DATA_TYPE ): - { - sDataType = aIter.toString(); - } - break; - case XML_ELEMENT( TABLE, XML_ORDER ): - { - sOrder = aIter.toString(); - } - break; + sFieldNumber = aIter.toString(); + } + break; + case XML_ELEMENT( TABLE, XML_DATA_TYPE ): + { + sDataType = aIter.toString(); + } + break; + case XML_ELEMENT( TABLE, XML_ORDER ): + { + sOrder = aIter.toString(); } + break; } } } diff --git a/sc/source/filter/xml/xmlstyle.cxx b/sc/source/filter/xml/xmlstyle.cxx index 1cb5fb26591e..0cb367174613 100644 --- a/sc/source/filter/xml/xmlstyle.cxx +++ b/sc/source/filter/xml/xmlstyle.cxx @@ -680,108 +680,108 @@ void ScXMLAutoStylePoolP::exportStyleContent( ) const { SvXMLAutoStylePoolP::exportStyleContent( rHandler, nFamily, rProperties, rPropExp, rUnitConverter, rNamespaceMap ); - if (nFamily == XmlStyleFamily::TABLE_CELL) + if (nFamily != XmlStyleFamily::TABLE_CELL) + return; + + for(const auto& rProperty : rProperties) { - for(const auto& rProperty : rProperties) + if (rProperty.mnIndex != -1) { - if (rProperty.mnIndex != -1) + sal_Int16 nContextID = rScXMLExport.GetCellStylesPropertySetMapper()->GetEntryContextId(rProperty.mnIndex); + switch (nContextID) { - sal_Int16 nContextID = rScXMLExport.GetCellStylesPropertySetMapper()->GetEntryContextId(rProperty.mnIndex); - switch (nContextID) + case CTF_SC_MAP : { - case CTF_SC_MAP : + uno::Reference xIndex( rProperty.maValue, uno::UNO_QUERY ); + if ( xIndex.is() ) { - uno::Reference xIndex( rProperty.maValue, uno::UNO_QUERY ); - if ( xIndex.is() ) + sal_Int32 nConditionCount(xIndex->getCount()); + for (sal_Int32 nCondition = 0; nCondition < nConditionCount; ++nCondition) { - sal_Int32 nConditionCount(xIndex->getCount()); - for (sal_Int32 nCondition = 0; nCondition < nConditionCount; ++nCondition) + uno::Reference xSheetConditionalEntry(xIndex->getByIndex(nCondition), uno::UNO_QUERY); + if (xSheetConditionalEntry.is()) { - uno::Reference xSheetConditionalEntry(xIndex->getByIndex(nCondition), uno::UNO_QUERY); - if (xSheetConditionalEntry.is()) + OUString sStyleName(xSheetConditionalEntry->getStyleName()); + uno::Reference xSheetCondition(xSheetConditionalEntry, uno::UNO_QUERY); + if (xSheetCondition.is()) { - OUString sStyleName(xSheetConditionalEntry->getStyleName()); - uno::Reference xSheetCondition(xSheetConditionalEntry, uno::UNO_QUERY); - if (xSheetCondition.is()) + sheet::ConditionOperator aOperator = xSheetCondition->getOperator(); + if (aOperator != sheet::ConditionOperator_NONE) { - sheet::ConditionOperator aOperator = xSheetCondition->getOperator(); - if (aOperator != sheet::ConditionOperator_NONE) + if (aOperator == sheet::ConditionOperator_FORMULA) + { + OUString sCondition = "is-true-formula(" + + xSheetCondition->getFormula1() + + ")"; + rScXMLExport.AddAttribute(XML_NAMESPACE_STYLE, XML_CONDITION, sCondition); + rScXMLExport.AddAttribute(XML_NAMESPACE_STYLE, XML_APPLY_STYLE_NAME, rScXMLExport.EncodeStyleName( sStyleName )); + OUString sOUBaseAddress; + ScDocument* pDoc = rScXMLExport.GetDocument(); + ScRangeStringConverter::GetStringFromAddress( sOUBaseAddress, + xSheetCondition->getSourcePosition(), pDoc, FormulaGrammar::CONV_OOO ); + rScXMLExport.AddAttribute(XML_NAMESPACE_STYLE, XML_BASE_CELL_ADDRESS, sOUBaseAddress); + SvXMLElementExport aMElem(rScXMLExport, XML_NAMESPACE_STYLE, XML_MAP, true, true); + } + else { - if (aOperator == sheet::ConditionOperator_FORMULA) + OUString sCondition; + if (aOperator == sheet::ConditionOperator_BETWEEN || + aOperator == sheet::ConditionOperator_NOT_BETWEEN) { - OUString sCondition = "is-true-formula(" - + xSheetCondition->getFormula1() - + ")"; - rScXMLExport.AddAttribute(XML_NAMESPACE_STYLE, XML_CONDITION, sCondition); - rScXMLExport.AddAttribute(XML_NAMESPACE_STYLE, XML_APPLY_STYLE_NAME, rScXMLExport.EncodeStyleName( sStyleName )); - OUString sOUBaseAddress; - ScDocument* pDoc = rScXMLExport.GetDocument(); - ScRangeStringConverter::GetStringFromAddress( sOUBaseAddress, - xSheetCondition->getSourcePosition(), pDoc, FormulaGrammar::CONV_OOO ); - rScXMLExport.AddAttribute(XML_NAMESPACE_STYLE, XML_BASE_CELL_ADDRESS, sOUBaseAddress); - SvXMLElementExport aMElem(rScXMLExport, XML_NAMESPACE_STYLE, XML_MAP, true, true); + if (aOperator == sheet::ConditionOperator_BETWEEN) + sCondition = "cell-content-is-between("; + else + sCondition = "cell-content-is-not-between("; + sCondition += xSheetCondition->getFormula1() + + "," + + xSheetCondition->getFormula2() + + ")"; } else { - OUString sCondition; - if (aOperator == sheet::ConditionOperator_BETWEEN || - aOperator == sheet::ConditionOperator_NOT_BETWEEN) - { - if (aOperator == sheet::ConditionOperator_BETWEEN) - sCondition = "cell-content-is-between("; - else - sCondition = "cell-content-is-not-between("; - sCondition += xSheetCondition->getFormula1() - + "," - + xSheetCondition->getFormula2() - + ")"; - } - else + sCondition = "cell-content()"; + switch (aOperator) { - sCondition = "cell-content()"; - switch (aOperator) + case sheet::ConditionOperator_LESS: + sCondition += "<"; + break; + case sheet::ConditionOperator_GREATER: + sCondition += ">"; + break; + case sheet::ConditionOperator_LESS_EQUAL: + sCondition += "<="; + break; + case sheet::ConditionOperator_GREATER_EQUAL: + sCondition += ">="; + break; + case sheet::ConditionOperator_EQUAL: + sCondition += "="; + break; + case sheet::ConditionOperator_NOT_EQUAL: + sCondition += "!="; + break; + default: { - case sheet::ConditionOperator_LESS: - sCondition += "<"; - break; - case sheet::ConditionOperator_GREATER: - sCondition += ">"; - break; - case sheet::ConditionOperator_LESS_EQUAL: - sCondition += "<="; - break; - case sheet::ConditionOperator_GREATER_EQUAL: - sCondition += ">="; - break; - case sheet::ConditionOperator_EQUAL: - sCondition += "="; - break; - case sheet::ConditionOperator_NOT_EQUAL: - sCondition += "!="; - break; - default: - { - // added to avoid warnings - } + // added to avoid warnings } - sCondition += xSheetCondition->getFormula1(); } - rScXMLExport.AddAttribute(XML_NAMESPACE_STYLE, XML_CONDITION, sCondition); - rScXMLExport.AddAttribute(XML_NAMESPACE_STYLE, XML_APPLY_STYLE_NAME, rScXMLExport.EncodeStyleName( sStyleName )); - OUString sOUBaseAddress; - ScRangeStringConverter::GetStringFromAddress( sOUBaseAddress, - xSheetCondition->getSourcePosition(), rScXMLExport.GetDocument(), FormulaGrammar::CONV_OOO ); - rScXMLExport.AddAttribute(XML_NAMESPACE_STYLE, XML_BASE_CELL_ADDRESS, sOUBaseAddress); - SvXMLElementExport aMElem(rScXMLExport, XML_NAMESPACE_STYLE, XML_MAP, true, true); + sCondition += xSheetCondition->getFormula1(); } + rScXMLExport.AddAttribute(XML_NAMESPACE_STYLE, XML_CONDITION, sCondition); + rScXMLExport.AddAttribute(XML_NAMESPACE_STYLE, XML_APPLY_STYLE_NAME, rScXMLExport.EncodeStyleName( sStyleName )); + OUString sOUBaseAddress; + ScRangeStringConverter::GetStringFromAddress( sOUBaseAddress, + xSheetCondition->getSourcePosition(), rScXMLExport.GetDocument(), FormulaGrammar::CONV_OOO ); + rScXMLExport.AddAttribute(XML_NAMESPACE_STYLE, XML_BASE_CELL_ADDRESS, sOUBaseAddress); + SvXMLElementExport aMElem(rScXMLExport, XML_NAMESPACE_STYLE, XML_MAP, true, true); } } } } } } - break; } + break; } } } diff --git a/sc/source/filter/xml/xmlsubti.cxx b/sc/source/filter/xml/xmlsubti.cxx index b2f1013816f8..fa47ef2ce29b 100644 --- a/sc/source/filter/xml/xmlsubti.cxx +++ b/sc/source/filter/xml/xmlsubti.cxx @@ -95,32 +95,32 @@ uno::Reference getCurrentSheet(const uno::Reference 0) + pDoc->AppendTabOnLoad(sTableName); + else + pDoc->SetTabNameOnLoad(maCurrentCellPos.Tab(), sTableName); + + xCurrentSheet = getCurrentSheet(rImport.GetModel(), maCurrentCellPos.Tab()); + if (xCurrentSheet.is()) { - nCurrentColCount = 0; - sCurrentSheetName = sTableName; - //reset cols and rows for new sheet, but increment tab - maCurrentCellPos.SetCol(-1); - maCurrentCellPos.SetRow(-1); - maCurrentCellPos.SetTab(maCurrentCellPos.Tab() + 1); - - maProtectionData = rProtectData; - ScDocument *pDoc = ScXMLConverter::GetScDocument(rImport.GetModel()); - - // The document contains one sheet when created. So for the first - // sheet, we only need to set its name. - if (maCurrentCellPos.Tab() > 0) - pDoc->AppendTabOnLoad(sTableName); - else - pDoc->SetTabNameOnLoad(maCurrentCellPos.Tab(), sTableName); - - xCurrentSheet = getCurrentSheet(rImport.GetModel(), maCurrentCellPos.Tab()); - if (xCurrentSheet.is()) - { - // We need to set the current cell range here regardless of - // presence of style name. - SetTableStyle(sStyleName); - } + // We need to set the current cell range here regardless of + // presence of style name. + SetTableStyle(sStyleName); } } @@ -128,35 +128,35 @@ void ScMyTables::SetTableStyle(const OUString& sStyleName) { //these uno calls are a bit difficult to remove, XMLTableStyleContext::FillPropertySet uses //SvXMLImportPropertyMapper::FillPropertySet - if ( !sStyleName.isEmpty() ) + if ( sStyleName.isEmpty() ) + return; + + // #i57869# All table style properties for all sheets are now applied here, + // before importing the contents. + // This is needed for the background color. + // Sheet visibility has special handling in ScDocFunc::SetTableVisible to + // allow hiding the first sheet. + // RTL layout is only remembered, not actually applied, so the shapes can + // be loaded before mirroring. + + if ( !xCurrentSheet.is() ) + return; + + uno::Reference xProperties(xCurrentSheet, uno::UNO_QUERY); + if ( !xProperties.is() ) + return; + + XMLTableStylesContext *pStyles = static_cast(rImport.GetAutoStyles()); + if ( pStyles ) { - // #i57869# All table style properties for all sheets are now applied here, - // before importing the contents. - // This is needed for the background color. - // Sheet visibility has special handling in ScDocFunc::SetTableVisible to - // allow hiding the first sheet. - // RTL layout is only remembered, not actually applied, so the shapes can - // be loaded before mirroring. - - if ( xCurrentSheet.is() ) + XMLTableStyleContext* pStyle = const_cast(static_cast(pStyles->FindStyleChildContext( + XmlStyleFamily::TABLE_TABLE, sStyleName, true))); + if ( pStyle ) { - uno::Reference xProperties(xCurrentSheet, uno::UNO_QUERY); - if ( xProperties.is() ) - { - XMLTableStylesContext *pStyles = static_cast(rImport.GetAutoStyles()); - if ( pStyles ) - { - XMLTableStyleContext* pStyle = const_cast(static_cast(pStyles->FindStyleChildContext( - XmlStyleFamily::TABLE_TABLE, sStyleName, true))); - if ( pStyle ) - { - pStyle->FillPropertySet(xProperties); - - ScSheetSaveData* pSheetData = comphelper::getUnoTunnelImplementation(rImport.GetModel())->GetSheetSaveData(); - pSheetData->AddTableStyle( sStyleName, ScAddress( 0, 0, maCurrentCellPos.Tab() ) ); - } - } - } + pStyle->FillPropertySet(xProperties); + + ScSheetSaveData* pSheetData = comphelper::getUnoTunnelImplementation(rImport.GetModel())->GetSheetSaveData(); + pSheetData->AddTableStyle( sStyleName, ScAddress( 0, 0, maCurrentCellPos.Tab() ) ); } } } @@ -190,22 +190,22 @@ void ScMyTables::DeleteTable() maMatrixRangeList.RemoveAll(); - if (rImport.GetDocument() && maProtectionData.mbProtected) - { - uno::Sequence aHash; - ::comphelper::Base64::decode(aHash, maProtectionData.maPassword); - - std::unique_ptr pProtect(new ScTableProtection); - pProtect->setProtected(maProtectionData.mbProtected); - pProtect->setPasswordHash(aHash, maProtectionData.meHash1, maProtectionData.meHash2); - pProtect->setOption(ScTableProtection::SELECT_LOCKED_CELLS, maProtectionData.mbSelectProtectedCells); - pProtect->setOption(ScTableProtection::SELECT_UNLOCKED_CELLS, maProtectionData.mbSelectUnprotectedCells); - pProtect->setOption(ScTableProtection::INSERT_COLUMNS, maProtectionData.mbInsertColumns); - pProtect->setOption(ScTableProtection::INSERT_ROWS, maProtectionData.mbInsertRows); - pProtect->setOption(ScTableProtection::DELETE_COLUMNS, maProtectionData.mbDeleteColumns); - pProtect->setOption(ScTableProtection::DELETE_ROWS, maProtectionData.mbDeleteRows); - rImport.GetDocument()->SetTabProtection(maCurrentCellPos.Tab(), pProtect.get()); - } + if (!(rImport.GetDocument() && maProtectionData.mbProtected)) + return; + + uno::Sequence aHash; + ::comphelper::Base64::decode(aHash, maProtectionData.maPassword); + + std::unique_ptr pProtect(new ScTableProtection); + pProtect->setProtected(maProtectionData.mbProtected); + pProtect->setPasswordHash(aHash, maProtectionData.meHash1, maProtectionData.meHash2); + pProtect->setOption(ScTableProtection::SELECT_LOCKED_CELLS, maProtectionData.mbSelectProtectedCells); + pProtect->setOption(ScTableProtection::SELECT_UNLOCKED_CELLS, maProtectionData.mbSelectUnprotectedCells); + pProtect->setOption(ScTableProtection::INSERT_COLUMNS, maProtectionData.mbInsertColumns); + pProtect->setOption(ScTableProtection::INSERT_ROWS, maProtectionData.mbInsertRows); + pProtect->setOption(ScTableProtection::DELETE_COLUMNS, maProtectionData.mbDeleteColumns); + pProtect->setOption(ScTableProtection::DELETE_ROWS, maProtectionData.mbDeleteRows); + rImport.GetDocument()->SetTabProtection(maCurrentCellPos.Tab(), pProtect.get()); } void ScMyTables::AddColStyle(const sal_Int32 nRepeat, const OUString& rCellStyleName) diff --git a/sc/source/filter/xml/xmltransformationi.cxx b/sc/source/filter/xml/xmltransformationi.cxx index c872767a7fb0..d2af7bcc2b71 100644 --- a/sc/source/filter/xml/xmltransformationi.cxx +++ b/sc/source/filter/xml/xmltransformationi.cxx @@ -177,18 +177,18 @@ ScXMLColumnMergeContext::ScXMLColumnMergeContext( ScXMLImport& rImport, const rtl::Reference& rAttrList) : ScXMLImportContext(rImport) { - if (rAttrList.is()) + if (!rAttrList.is()) + return; + + for (auto& aIter : *rAttrList) { - for (auto& aIter : *rAttrList) + switch (aIter.getToken()) { - switch (aIter.getToken()) + case XML_ELEMENT(CALC_EXT, XML_MERGE_STRING): { - case XML_ELEMENT(CALC_EXT, XML_MERGE_STRING): - { - maMergeString = aIter.toString(); - } - break; + maMergeString = aIter.toString(); } + break; } } } @@ -415,35 +415,35 @@ ScXMLColumnNumberContext::ScXMLColumnNumberContext( } } - if (!aType.isEmpty()) - { - if (aType == "round") - maType = sc::NUMBER_TRANSFORM_TYPE::ROUND; - else if (aType == "round-up") - maType = sc::NUMBER_TRANSFORM_TYPE::ROUND_UP; - else if (aType == "round-down") - maType = sc::NUMBER_TRANSFORM_TYPE::ROUND_DOWN; - else if (aType == "abs") - maType = sc::NUMBER_TRANSFORM_TYPE::ABSOLUTE; - else if (aType == "log") - maType = sc::NUMBER_TRANSFORM_TYPE::LOG_E; - else if (aType == "log-base-10") - maType = sc::NUMBER_TRANSFORM_TYPE::LOG_10; - else if (aType == "cube") - maType = sc::NUMBER_TRANSFORM_TYPE::CUBE; - else if (aType == "number-square") - maType = sc::NUMBER_TRANSFORM_TYPE::SQUARE; - else if (aType == "square-root") - maType = sc::NUMBER_TRANSFORM_TYPE::SQUARE_ROOT; - else if (aType == "exponential") - maType = sc::NUMBER_TRANSFORM_TYPE::EXPONENT; - else if (aType == "even") - maType = sc::NUMBER_TRANSFORM_TYPE::IS_EVEN; - else if (aType == "odd") - maType = sc::NUMBER_TRANSFORM_TYPE::IS_ODD; - else if (aType == "sign") - maType = sc::NUMBER_TRANSFORM_TYPE::SIGN; - } + if (aType.isEmpty()) + return; + + if (aType == "round") + maType = sc::NUMBER_TRANSFORM_TYPE::ROUND; + else if (aType == "round-up") + maType = sc::NUMBER_TRANSFORM_TYPE::ROUND_UP; + else if (aType == "round-down") + maType = sc::NUMBER_TRANSFORM_TYPE::ROUND_DOWN; + else if (aType == "abs") + maType = sc::NUMBER_TRANSFORM_TYPE::ABSOLUTE; + else if (aType == "log") + maType = sc::NUMBER_TRANSFORM_TYPE::LOG_E; + else if (aType == "log-base-10") + maType = sc::NUMBER_TRANSFORM_TYPE::LOG_10; + else if (aType == "cube") + maType = sc::NUMBER_TRANSFORM_TYPE::CUBE; + else if (aType == "number-square") + maType = sc::NUMBER_TRANSFORM_TYPE::SQUARE; + else if (aType == "square-root") + maType = sc::NUMBER_TRANSFORM_TYPE::SQUARE_ROOT; + else if (aType == "exponential") + maType = sc::NUMBER_TRANSFORM_TYPE::EXPONENT; + else if (aType == "even") + maType = sc::NUMBER_TRANSFORM_TYPE::IS_EVEN; + else if (aType == "odd") + maType = sc::NUMBER_TRANSFORM_TYPE::IS_ODD; + else if (aType == "sign") + maType = sc::NUMBER_TRANSFORM_TYPE::SIGN; } ScXMLColumnNumberContext::~ScXMLColumnNumberContext() @@ -486,18 +486,18 @@ ScXMLColumnRemoveNullContext::ScXMLColumnRemoveNullContext( ScXMLImport& rImport, const rtl::Reference& rAttrList) : ScXMLImportContext(rImport) { - if (rAttrList.is()) + if (!rAttrList.is()) + return; + + for (auto& aIter : *rAttrList) { - for (auto& aIter : *rAttrList) + switch (aIter.getToken()) { - switch (aIter.getToken()) + case XML_ELEMENT(CALC_EXT, XML_REPLACE_STRING): { - case XML_ELEMENT(CALC_EXT, XML_REPLACE_STRING): - { - maReplaceString = aIter.toString(); - } - break; + maReplaceString = aIter.toString(); } + break; } } } @@ -558,45 +558,45 @@ ScXMLDateTimeContext::ScXMLDateTimeContext( } } - if (!aType.isEmpty()) - { - if (aType == "date-string") - maType = sc::DATETIME_TRANSFORMATION_TYPE::DATE_STRING; - else if (aType == "year") - maType = sc::DATETIME_TRANSFORMATION_TYPE::YEAR; - else if (aType == "start-of-year") - maType = sc::DATETIME_TRANSFORMATION_TYPE::START_OF_YEAR; - else if (aType == "end-of-year") - maType = sc::DATETIME_TRANSFORMATION_TYPE::END_OF_YEAR; - else if (aType == "month") - maType = sc::DATETIME_TRANSFORMATION_TYPE::MONTH; - else if (aType == "month-name") - maType = sc::DATETIME_TRANSFORMATION_TYPE::MONTH_NAME; - else if (aType == "start-of-month") - maType = sc::DATETIME_TRANSFORMATION_TYPE::START_OF_MONTH; - else if (aType == "end-of-month") - maType = sc::DATETIME_TRANSFORMATION_TYPE::END_OF_MONTH; - else if (aType == "day") - maType = sc::DATETIME_TRANSFORMATION_TYPE::DAY; - else if (aType == "day-of-week") - maType = sc::DATETIME_TRANSFORMATION_TYPE::DAY_OF_WEEK; - else if (aType == "day-of-year") - maType = sc::DATETIME_TRANSFORMATION_TYPE::DAY_OF_YEAR; - else if (aType == "quarter") - maType = sc::DATETIME_TRANSFORMATION_TYPE::QUARTER; - else if (aType == "start-of-quarter") - maType = sc::DATETIME_TRANSFORMATION_TYPE::START_OF_QUARTER; - else if (aType == "end-of-quarter") - maType = sc::DATETIME_TRANSFORMATION_TYPE::END_OF_QUARTER; - else if (aType == "time") - maType = sc::DATETIME_TRANSFORMATION_TYPE::TIME; - else if (aType == "hour") - maType = sc::DATETIME_TRANSFORMATION_TYPE::HOUR; - else if (aType == "minute") - maType = sc::DATETIME_TRANSFORMATION_TYPE::MINUTE; - else if (aType == "seconds") - maType = sc::DATETIME_TRANSFORMATION_TYPE::SECOND; - } + if (aType.isEmpty()) + return; + + if (aType == "date-string") + maType = sc::DATETIME_TRANSFORMATION_TYPE::DATE_STRING; + else if (aType == "year") + maType = sc::DATETIME_TRANSFORMATION_TYPE::YEAR; + else if (aType == "start-of-year") + maType = sc::DATETIME_TRANSFORMATION_TYPE::START_OF_YEAR; + else if (aType == "end-of-year") + maType = sc::DATETIME_TRANSFORMATION_TYPE::END_OF_YEAR; + else if (aType == "month") + maType = sc::DATETIME_TRANSFORMATION_TYPE::MONTH; + else if (aType == "month-name") + maType = sc::DATETIME_TRANSFORMATION_TYPE::MONTH_NAME; + else if (aType == "start-of-month") + maType = sc::DATETIME_TRANSFORMATION_TYPE::START_OF_MONTH; + else if (aType == "end-of-month") + maType = sc::DATETIME_TRANSFORMATION_TYPE::END_OF_MONTH; + else if (aType == "day") + maType = sc::DATETIME_TRANSFORMATION_TYPE::DAY; + else if (aType == "day-of-week") + maType = sc::DATETIME_TRANSFORMATION_TYPE::DAY_OF_WEEK; + else if (aType == "day-of-year") + maType = sc::DATETIME_TRANSFORMATION_TYPE::DAY_OF_YEAR; + else if (aType == "quarter") + maType = sc::DATETIME_TRANSFORMATION_TYPE::QUARTER; + else if (aType == "start-of-quarter") + maType = sc::DATETIME_TRANSFORMATION_TYPE::START_OF_QUARTER; + else if (aType == "end-of-quarter") + maType = sc::DATETIME_TRANSFORMATION_TYPE::END_OF_QUARTER; + else if (aType == "time") + maType = sc::DATETIME_TRANSFORMATION_TYPE::TIME; + else if (aType == "hour") + maType = sc::DATETIME_TRANSFORMATION_TYPE::HOUR; + else if (aType == "minute") + maType = sc::DATETIME_TRANSFORMATION_TYPE::MINUTE; + else if (aType == "seconds") + maType = sc::DATETIME_TRANSFORMATION_TYPE::SECOND; } ScXMLDateTimeContext::~ScXMLDateTimeContext() -- cgit v1.2.3