summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2020-08-07 15:54:53 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2020-08-08 08:48:28 +0200
commit66d0815d790918b35dd413b64c467dc168d720bb (patch)
treefc2f90921af7e6d03094267fa8a7861eb5734cf8
parent37c3da6d2c453448952783ef9437f12469edc316 (diff)
loplugin:flatten in sc/filter/excel
Change-Id: I48ab5b20a3345cd40d4715c3ff025d2df3b491fd Reviewed-on: https://gerrit.libreoffice.org/c/core/+/100337 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
-rw-r--r--sc/source/filter/excel/excdoc.cxx26
-rw-r--r--sc/source/filter/excel/excimp8.cxx60
-rw-r--r--sc/source/filter/excel/excrecds.cxx260
-rw-r--r--sc/source/filter/excel/impop.cxx226
-rw-r--r--sc/source/filter/excel/xechart.cxx573
-rw-r--r--sc/source/filter/excel/xecontent.cxx164
-rw-r--r--sc/source/filter/excel/xeescher.cxx86
-rw-r--r--sc/source/filter/excel/xeformula.cxx92
-rw-r--r--sc/source/filter/excel/xelink.cxx76
-rw-r--r--sc/source/filter/excel/xename.cxx34
-rw-r--r--sc/source/filter/excel/xepivot.cxx470
-rw-r--r--sc/source/filter/excel/xepivotxml.cxx47
-rw-r--r--sc/source/filter/excel/xestream.cxx58
-rw-r--r--sc/source/filter/excel/xestring.cxx58
-rw-r--r--sc/source/filter/excel/xestyle.cxx36
-rw-r--r--sc/source/filter/excel/xetable.cxx130
-rw-r--r--sc/source/filter/excel/xeview.cxx36
-rw-r--r--sc/source/filter/excel/xichart.cxx527
-rw-r--r--sc/source/filter/excel/xicontent.cxx58
-rw-r--r--sc/source/filter/excel/xiescher.cxx343
-rw-r--r--sc/source/filter/excel/xipage.cxx30
-rw-r--r--sc/source/filter/excel/xipivot.cxx199
-rw-r--r--sc/source/filter/excel/xiroot.cxx30
-rw-r--r--sc/source/filter/excel/xistream.cxx52
-rw-r--r--sc/source/filter/excel/xistyle.cxx218
-rw-r--r--sc/source/filter/excel/xlchart.cxx193
-rw-r--r--sc/source/filter/excel/xlformula.cxx26
27 files changed, 2074 insertions, 2034 deletions
diff --git a/sc/source/filter/excel/excdoc.cxx b/sc/source/filter/excel/excdoc.cxx
index 4eb91066b865..6bb415559869 100644
--- a/sc/source/filter/excel/excdoc.cxx
+++ b/sc/source/filter/excel/excdoc.cxx
@@ -643,21 +643,21 @@ void ExcTable::FillAsEmptyTable( SCTAB nCodeNameIdx )
{
InitializeTable( mnScTab );
- if( HasVbaStorage() && (nCodeNameIdx < GetExtDocOptions().GetCodeNameCount()) )
+ if( !(HasVbaStorage() && (nCodeNameIdx < GetExtDocOptions().GetCodeNameCount())) )
+ return;
+
+ if( GetBiff() <= EXC_BIFF5 )
{
- if( GetBiff() <= EXC_BIFF5 )
- {
- Add( new ExcBof );
- }
- else
- {
- Add( new ExcBof8 );
- Add( new XclCodename( GetExtDocOptions().GetCodeName( nCodeNameIdx ) ) );
- }
- // sheet view settings: WINDOW2, SCL, PANE, SELECTION
- aRecList.AppendNewRecord( new XclExpTabViewSettings( GetRoot(), mnScTab ) );
- Add( new ExcEof );
+ Add( new ExcBof );
}
+ else
+ {
+ Add( new ExcBof8 );
+ Add( new XclCodename( GetExtDocOptions().GetCodeName( nCodeNameIdx ) ) );
+ }
+ // sheet view settings: WINDOW2, SCL, PANE, SELECTION
+ aRecList.AppendNewRecord( new XclExpTabViewSettings( GetRoot(), mnScTab ) );
+ Add( new ExcEof );
}
void ExcTable::Write( XclExpStream& rStrm )
diff --git a/sc/source/filter/excel/excimp8.cxx b/sc/source/filter/excel/excimp8.cxx
index 91f01290c154..0fef106161be 100644
--- a/sc/source/filter/excel/excimp8.cxx
+++ b/sc/source/filter/excel/excimp8.cxx
@@ -320,7 +320,10 @@ void ImportExcel8::ReadBasic()
SfxObjectShell* pShell = GetDocShell();
tools::SvRef<SotStorage> xRootStrg = GetRootStorage();
const SvtFilterOptions& rFilterOpt = SvtFilterOptions::Get();
- if( pShell && xRootStrg.is() ) try
+ if( !pShell || !xRootStrg.is() )
+ return;
+
+ try
{
// #FIXME need to get rid of this, we can also do this from within oox
// via the "ooo.vba.VBAGlobals" service
@@ -357,7 +360,7 @@ void ImportExcel8::ReadBasic()
aVbaPrj.setOleOverridesSink( xOleNameOverrideSink );
aVbaPrj.importVbaProject( *vbaStg );
GetObjectManager().SetOleNameOverrideInfo( xOleNameOverrideSink );
- }
+ }
}
catch( uno::Exception& )
{
@@ -401,19 +404,20 @@ void ImportExcel8::PostDocLoad()
}
// read doc info (no docshell while pasting from clipboard)
- if( SfxObjectShell* pShell = GetDocShell() )
+ SfxObjectShell* pShell = GetDocShell();
+ if(!pShell)
+ return;
+
+ // BIFF5+ without storage is possible
+ tools::SvRef<SotStorage> xRootStrg = GetRootStorage();
+ if( xRootStrg.is() ) try
+ {
+ uno::Reference< document::XDocumentPropertiesSupplier > xDPS( pShell->GetModel(), uno::UNO_QUERY_THROW );
+ uno::Reference< document::XDocumentProperties > xDocProps( xDPS->getDocumentProperties(), uno::UNO_SET_THROW );
+ sfx2::LoadOlePropertySet( xDocProps, xRootStrg.get() );
+ }
+ catch( uno::Exception& )
{
- // BIFF5+ without storage is possible
- tools::SvRef<SotStorage> xRootStrg = GetRootStorage();
- if( xRootStrg.is() ) try
- {
- uno::Reference< document::XDocumentPropertiesSupplier > xDPS( pShell->GetModel(), uno::UNO_QUERY_THROW );
- uno::Reference< document::XDocumentProperties > xDocProps( xDPS->getDocumentProperties(), uno::UNO_SET_THROW );
- sfx2::LoadOlePropertySet( xDocProps, xRootStrg.get() );
- }
- catch( uno::Exception& )
- {
- }
}
// #i45843# Pivot tables are now handled outside of PostDocLoad, so they are available
@@ -496,21 +500,21 @@ void XclImpAutoFilterData::SetCellAttribs()
void XclImpAutoFilterData::InsertQueryParam()
{
- if (pCurrDBData)
- {
- ScRange aAdvRange;
- bool bHasAdv = pCurrDBData->GetAdvancedQuerySource( aAdvRange );
- if( bHasAdv )
- pExcRoot->pIR->GetDoc().CreateQueryParam(aAdvRange, aParam);
+ if (!pCurrDBData)
+ return;
- pCurrDBData->SetQueryParam( aParam );
- if( bHasAdv )
- pCurrDBData->SetAdvancedQuerySource( &aAdvRange );
- else
- {
- pCurrDBData->SetAutoFilter( true );
- SetCellAttribs();
- }
+ ScRange aAdvRange;
+ bool bHasAdv = pCurrDBData->GetAdvancedQuerySource( aAdvRange );
+ if( bHasAdv )
+ pExcRoot->pIR->GetDoc().CreateQueryParam(aAdvRange, aParam);
+
+ pCurrDBData->SetQueryParam( aParam );
+ if( bHasAdv )
+ pCurrDBData->SetAdvancedQuerySource( &aAdvRange );
+ else
+ {
+ pCurrDBData->SetAutoFilter( true );
+ SetCellAttribs();
}
}
diff --git a/sc/source/filter/excel/excrecds.cxx b/sc/source/filter/excel/excrecds.cxx
index 494bedaf6b03..3298d4244dff 100644
--- a/sc/source/filter/excel/excrecds.cxx
+++ b/sc/source/filter/excel/excrecds.cxx
@@ -421,74 +421,74 @@ XclExpSheetProtection::XclExpSheetProtection(bool bValue, SCTAB nTab ) :
void XclExpSheetProtection::SaveXml( XclExpXmlStream& rStrm )
{
- ScDocument& rDoc = rStrm.GetRoot().GetDoc();
- const ScTableProtection* pTabProtect = rDoc.GetTabProtection(mnTab);
- if ( pTabProtect )
- {
- const ScOoxPasswordHash& rPH = pTabProtect->getPasswordHash();
- // Do not write any hash attributes if there is no password.
- ScOoxPasswordHash aPH;
- if (rPH.hasPassword())
- aPH = rPH;
-
- Sequence<sal_Int8> aHash = pTabProtect->getPasswordHash(PASSHASH_XL);
- OString sHash;
- if (aHash.getLength() >= 2)
- {
- sHash = OString::number(
- ( static_cast<sal_uInt8>(aHash[0]) << 8
- | static_cast<sal_uInt8>(aHash[1]) ),
- 16 );
- }
- sax_fastparser::FSHelperPtr& rWorksheet = rStrm.GetCurrentStream();
- rWorksheet->singleElement( XML_sheetProtection,
- XML_algorithmName, aPH.maAlgorithmName.isEmpty() ? nullptr : aPH.maAlgorithmName.toUtf8().getStr(),
- XML_hashValue, aPH.maHashValue.isEmpty() ? nullptr : aPH.maHashValue.toUtf8().getStr(),
- XML_saltValue, aPH.maSaltValue.isEmpty() ? nullptr : aPH.maSaltValue.toUtf8().getStr(),
- XML_spinCount, aPH.mnSpinCount ? OString::number( aPH.mnSpinCount).getStr() : nullptr,
- XML_sheet, ToPsz( true ),
- XML_password, sHash.isEmpty()? nullptr : sHash.getStr(),
- XML_objects, pTabProtect->isOptionEnabled( ScTableProtection::OBJECTS ) ? nullptr : ToPsz( true ),
- XML_scenarios, pTabProtect->isOptionEnabled( ScTableProtection::SCENARIOS ) ? nullptr : ToPsz( true ),
- XML_formatCells, pTabProtect->isOptionEnabled( ScTableProtection::FORMAT_CELLS ) ? ToPsz( false ) : nullptr,
- XML_formatColumns, pTabProtect->isOptionEnabled( ScTableProtection::FORMAT_COLUMNS ) ? ToPsz( false ) : nullptr,
- XML_formatRows, pTabProtect->isOptionEnabled( ScTableProtection::FORMAT_ROWS ) ? ToPsz( false ) : nullptr,
- XML_insertColumns, pTabProtect->isOptionEnabled( ScTableProtection::INSERT_COLUMNS ) ? ToPsz( false ) : nullptr,
- XML_insertRows, pTabProtect->isOptionEnabled( ScTableProtection::INSERT_ROWS ) ? ToPsz( false ) : nullptr,
- XML_insertHyperlinks, pTabProtect->isOptionEnabled( ScTableProtection::INSERT_HYPERLINKS ) ? ToPsz( false ) : nullptr,
- XML_deleteColumns, pTabProtect->isOptionEnabled( ScTableProtection::DELETE_COLUMNS ) ? ToPsz( false ) : nullptr,
- XML_deleteRows, pTabProtect->isOptionEnabled( ScTableProtection::DELETE_ROWS ) ? ToPsz( false ) : nullptr,
- XML_selectLockedCells, pTabProtect->isOptionEnabled( ScTableProtection::SELECT_LOCKED_CELLS ) ? nullptr : ToPsz( true ),
- XML_sort, pTabProtect->isOptionEnabled( ScTableProtection::SORT ) ? ToPsz( false ) : nullptr,
- XML_autoFilter, pTabProtect->isOptionEnabled( ScTableProtection::AUTOFILTER ) ? ToPsz( false ) : nullptr,
- XML_pivotTables, pTabProtect->isOptionEnabled( ScTableProtection::PIVOT_TABLES ) ? ToPsz( false ) : nullptr,
- XML_selectUnlockedCells, pTabProtect->isOptionEnabled( ScTableProtection::SELECT_UNLOCKED_CELLS ) ? nullptr : ToPsz( true ) );
-
- const ::std::vector<ScEnhancedProtection>& rProts( pTabProtect->getEnhancedProtection());
- if (!rProts.empty())
- {
- rWorksheet->startElement(XML_protectedRanges);
- for (const auto& rProt : rProts)
- {
- SAL_WARN_IF( rProt.maSecurityDescriptorXML.isEmpty() && !rProt.maSecurityDescriptor.empty(),
- "sc.filter", "XclExpSheetProtection::SaveXml: losing BIFF security descriptor");
- rWorksheet->singleElement( XML_protectedRange,
- XML_name, rProt.maTitle.isEmpty() ? nullptr : rProt.maTitle.toUtf8().getStr(),
- XML_securityDescriptor, rProt.maSecurityDescriptorXML.isEmpty() ? nullptr : rProt.maSecurityDescriptorXML.toUtf8().getStr(),
- /* XXX 'password' is not part of OOXML, but Excel2013
- * writes it if loaded from BIFF, in which case
- * 'algorithmName', 'hashValue', 'saltValue' and
- * 'spinCount' are absent; so do we if it was present. */
- XML_password, rProt.mnPasswordVerifier ? OString::number( rProt.mnPasswordVerifier, 16).getStr() : nullptr,
- XML_algorithmName, rProt.maPasswordHash.maAlgorithmName.isEmpty() ? nullptr : rProt.maPasswordHash.maAlgorithmName.toUtf8().getStr(),
- XML_hashValue, rProt.maPasswordHash.maHashValue.isEmpty() ? nullptr : rProt.maPasswordHash.maHashValue.toUtf8().getStr(),
- XML_saltValue, rProt.maPasswordHash.maSaltValue.isEmpty() ? nullptr : rProt.maPasswordHash.maSaltValue.toUtf8().getStr(),
- XML_spinCount, rProt.maPasswordHash.mnSpinCount ? OString::number( rProt.maPasswordHash.mnSpinCount).getStr() : nullptr,
- XML_sqref, rProt.maRangeList.is() ? XclXmlUtils::ToOString( rStrm.GetRoot().GetDoc(), *rProt.maRangeList).getStr() : nullptr);
- }
- rWorksheet->endElement( XML_protectedRanges);
- }
+ ScDocument& rDoc = rStrm.GetRoot().GetDoc();
+ const ScTableProtection* pTabProtect = rDoc.GetTabProtection(mnTab);
+ if ( !pTabProtect )
+ return;
+
+ const ScOoxPasswordHash& rPH = pTabProtect->getPasswordHash();
+ // Do not write any hash attributes if there is no password.
+ ScOoxPasswordHash aPH;
+ if (rPH.hasPassword())
+ aPH = rPH;
+
+ Sequence<sal_Int8> aHash = pTabProtect->getPasswordHash(PASSHASH_XL);
+ OString sHash;
+ if (aHash.getLength() >= 2)
+ {
+ sHash = OString::number(
+ ( static_cast<sal_uInt8>(aHash[0]) << 8
+ | static_cast<sal_uInt8>(aHash[1]) ),
+ 16 );
+ }
+ sax_fastparser::FSHelperPtr& rWorksheet = rStrm.GetCurrentStream();
+ rWorksheet->singleElement( XML_sheetProtection,
+ XML_algorithmName, aPH.maAlgorithmName.isEmpty() ? nullptr : aPH.maAlgorithmName.toUtf8().getStr(),
+ XML_hashValue, aPH.maHashValue.isEmpty() ? nullptr : aPH.maHashValue.toUtf8().getStr(),
+ XML_saltValue, aPH.maSaltValue.isEmpty() ? nullptr : aPH.maSaltValue.toUtf8().getStr(),
+ XML_spinCount, aPH.mnSpinCount ? OString::number( aPH.mnSpinCount).getStr() : nullptr,
+ XML_sheet, ToPsz( true ),
+ XML_password, sHash.isEmpty()? nullptr : sHash.getStr(),
+ XML_objects, pTabProtect->isOptionEnabled( ScTableProtection::OBJECTS ) ? nullptr : ToPsz( true ),
+ XML_scenarios, pTabProtect->isOptionEnabled( ScTableProtection::SCENARIOS ) ? nullptr : ToPsz( true ),
+ XML_formatCells, pTabProtect->isOptionEnabled( ScTableProtection::FORMAT_CELLS ) ? ToPsz( false ) : nullptr,
+ XML_formatColumns, pTabProtect->isOptionEnabled( ScTableProtection::FORMAT_COLUMNS ) ? ToPsz( false ) : nullptr,
+ XML_formatRows, pTabProtect->isOptionEnabled( ScTableProtection::FORMAT_ROWS ) ? ToPsz( false ) : nullptr,
+ XML_insertColumns, pTabProtect->isOptionEnabled( ScTableProtection::INSERT_COLUMNS ) ? ToPsz( false ) : nullptr,
+ XML_insertRows, pTabProtect->isOptionEnabled( ScTableProtection::INSERT_ROWS ) ? ToPsz( false ) : nullptr,
+ XML_insertHyperlinks, pTabProtect->isOptionEnabled( ScTableProtection::INSERT_HYPERLINKS ) ? ToPsz( false ) : nullptr,
+ XML_deleteColumns, pTabProtect->isOptionEnabled( ScTableProtection::DELETE_COLUMNS ) ? ToPsz( false ) : nullptr,
+ XML_deleteRows, pTabProtect->isOptionEnabled( ScTableProtection::DELETE_ROWS ) ? ToPsz( false ) : nullptr,
+ XML_selectLockedCells, pTabProtect->isOptionEnabled( ScTableProtection::SELECT_LOCKED_CELLS ) ? nullptr : ToPsz( true ),
+ XML_sort, pTabProtect->isOptionEnabled( ScTableProtection::SORT ) ? ToPsz( false ) : nullptr,
+ XML_autoFilter, pTabProtect->isOptionEnabled( ScTableProtection::AUTOFILTER ) ? ToPsz( false ) : nullptr,
+ XML_pivotTables, pTabProtect->isOptionEnabled( ScTableProtection::PIVOT_TABLES ) ? ToPsz( false ) : nullptr,
+ XML_selectUnlockedCells, pTabProtect->isOptionEnabled( ScTableProtection::SELECT_UNLOCKED_CELLS ) ? nullptr : ToPsz( true ) );
+
+ const ::std::vector<ScEnhancedProtection>& rProts( pTabProtect->getEnhancedProtection());
+ if (rProts.empty())
+ return;
+
+ rWorksheet->startElement(XML_protectedRanges);
+ for (const auto& rProt : rProts)
+ {
+ SAL_WARN_IF( rProt.maSecurityDescriptorXML.isEmpty() && !rProt.maSecurityDescriptor.empty(),
+ "sc.filter", "XclExpSheetProtection::SaveXml: losing BIFF security descriptor");
+ rWorksheet->singleElement( XML_protectedRange,
+ XML_name, rProt.maTitle.isEmpty() ? nullptr : rProt.maTitle.toUtf8().getStr(),
+ XML_securityDescriptor, rProt.maSecurityDescriptorXML.isEmpty() ? nullptr : rProt.maSecurityDescriptorXML.toUtf8().getStr(),
+ /* XXX 'password' is not part of OOXML, but Excel2013
+ * writes it if loaded from BIFF, in which case
+ * 'algorithmName', 'hashValue', 'saltValue' and
+ * 'spinCount' are absent; so do we if it was present. */
+ XML_password, rProt.mnPasswordVerifier ? OString::number( rProt.mnPasswordVerifier, 16).getStr() : nullptr,
+ XML_algorithmName, rProt.maPasswordHash.maAlgorithmName.isEmpty() ? nullptr : rProt.maPasswordHash.maAlgorithmName.toUtf8().getStr(),
+ XML_hashValue, rProt.maPasswordHash.maHashValue.isEmpty() ? nullptr : rProt.maPasswordHash.maHashValue.toUtf8().getStr(),
+ XML_saltValue, rProt.maPasswordHash.maSaltValue.isEmpty() ? nullptr : rProt.maPasswordHash.maSaltValue.toUtf8().getStr(),
+ XML_spinCount, rProt.maPasswordHash.mnSpinCount ? OString::number( rProt.maPasswordHash.mnSpinCount).getStr() : nullptr,
+ XML_sqref, rProt.maRangeList.is() ? XclXmlUtils::ToOString( rStrm.GetRoot().GetDoc(), *rProt.maRangeList).getStr() : nullptr);
}
+ rWorksheet->endElement( XML_protectedRanges);
}
XclExpPassHash::XclExpPassHash(const Sequence<sal_Int8>& aHash) :
@@ -848,86 +848,86 @@ ExcAutoFilterRecs::ExcAutoFilterRecs( const XclExpRoot& rRoot, SCTAB nTab, const
bAdvanced = pData->GetAdvancedQuerySource( aAdvRange );
bFound = (pData->HasQueryParam() || pData->HasAutoFilter() || bAdvanced);
}
- if( bFound )
- {
- ScQueryParam aParam;
- pData->GetQueryParam( aParam );
+ if( !bFound )
+ return;
- ScRange aRange( aParam.nCol1, aParam.nRow1, aParam.nTab,
- aParam.nCol2, aParam.nRow2, aParam.nTab );
- SCCOL nColCnt = aParam.nCol2 - aParam.nCol1 + 1;
+ ScQueryParam aParam;
+ pData->GetQueryParam( aParam );
- maRef = aRange;
+ ScRange aRange( aParam.nCol1, aParam.nRow1, aParam.nTab,
+ aParam.nCol2, aParam.nRow2, aParam.nTab );
+ SCCOL nColCnt = aParam.nCol2 - aParam.nCol1 + 1;
- // #i2394# built-in defined names must be sorted by containing sheet name
- if (!pDefinedData)
- rNameMgr.InsertBuiltInName( EXC_BUILTIN_FILTERDATABASE, aRange );
+ maRef = aRange;
- // advanced filter
- if( bAdvanced )
- {
- // filter criteria, excel allows only same table
- if( !pDefinedData && aAdvRange.aStart.Tab() == nTab )
- rNameMgr.InsertBuiltInName( EXC_BUILTIN_CRITERIA, aAdvRange );
+ // #i2394# built-in defined names must be sorted by containing sheet name
+ if (!pDefinedData)
+ rNameMgr.InsertBuiltInName( EXC_BUILTIN_FILTERDATABASE, aRange );
- // filter destination range, excel allows only same table
- if( !aParam.bInplace )
- {
- ScRange aDestRange( aParam.nDestCol, aParam.nDestRow, aParam.nDestTab );
- aDestRange.aEnd.IncCol( nColCnt - 1 );
- if( !pDefinedData && aDestRange.aStart.Tab() == nTab )
- rNameMgr.InsertBuiltInName( EXC_BUILTIN_EXTRACT, aDestRange );
- }
+ // advanced filter
+ if( bAdvanced )
+ {
+ // filter criteria, excel allows only same table
+ if( !pDefinedData && aAdvRange.aStart.Tab() == nTab )
+ rNameMgr.InsertBuiltInName( EXC_BUILTIN_CRITERIA, aAdvRange );
- m_pFilterMode = new XclExpFiltermode;
+ // filter destination range, excel allows only same table
+ if( !aParam.bInplace )
+ {
+ ScRange aDestRange( aParam.nDestCol, aParam.nDestRow, aParam.nDestTab );
+ aDestRange.aEnd.IncCol( nColCnt - 1 );
+ if( !pDefinedData && aDestRange.aStart.Tab() == nTab )
+ rNameMgr.InsertBuiltInName( EXC_BUILTIN_EXTRACT, aDestRange );
}
- // AutoFilter
- else
+
+ m_pFilterMode = new XclExpFiltermode;
+ }
+ // AutoFilter
+ else
+ {
+ bool bConflict = false;
+ bool bContLoop = true;
+ bool bHasOr = false;
+ SCCOLROW nFirstField = aParam.GetEntry( 0 ).nField;
+
+ // create AUTOFILTER records for filtered columns
+ for( SCSIZE nEntry = 0; !bConflict && bContLoop && (nEntry < aParam.GetEntryCount()); nEntry++ )
{
- bool bConflict = false;
- bool bContLoop = true;
- bool bHasOr = false;
- SCCOLROW nFirstField = aParam.GetEntry( 0 ).nField;
+ const ScQueryEntry& rEntry = aParam.GetEntry( nEntry );
- // create AUTOFILTER records for filtered columns
- for( SCSIZE nEntry = 0; !bConflict && bContLoop && (nEntry < aParam.GetEntryCount()); nEntry++ )
+ bContLoop = rEntry.bDoQuery;
+ if( bContLoop )
{
- const ScQueryEntry& rEntry = aParam.GetEntry( nEntry );
+ XclExpAutofilter* pFilter = GetByCol( static_cast<SCCOL>(rEntry.nField) - aRange.aStart.Col() );
- bContLoop = rEntry.bDoQuery;
- if( bContLoop )
- {
- XclExpAutofilter* pFilter = GetByCol( static_cast<SCCOL>(rEntry.nField) - aRange.aStart.Col() );
+ if( nEntry > 0 )
+ bHasOr |= (rEntry.eConnect == SC_OR);
- if( nEntry > 0 )
- bHasOr |= (rEntry.eConnect == SC_OR);
-
- bConflict = (nEntry > 1) && bHasOr;
- if( !bConflict )
- bConflict = (nEntry == 1) && (rEntry.eConnect == SC_OR) &&
- (nFirstField != rEntry.nField);
- if( !bConflict )
- bConflict = pFilter->AddEntry( rEntry );
- }
+ bConflict = (nEntry > 1) && bHasOr;
+ if( !bConflict )
+ bConflict = (nEntry == 1) && (rEntry.eConnect == SC_OR) &&
+ (nFirstField != rEntry.nField);
+ if( !bConflict )
+ bConflict = pFilter->AddEntry( rEntry );
}
+ }
- // additional tests for conflicts
- for( size_t nPos = 0, nSize = maFilterList.GetSize(); !bConflict && (nPos < nSize); ++nPos )
- {
- XclExpAutofilterRef xFilter = maFilterList.GetRecord( nPos );
- bConflict = xFilter->HasCondition() && xFilter->HasTop10();
- }
+ // additional tests for conflicts
+ for( size_t nPos = 0, nSize = maFilterList.GetSize(); !bConflict && (nPos < nSize); ++nPos )
+ {
+ XclExpAutofilterRef xFilter = maFilterList.GetRecord( nPos );
+ bConflict = xFilter->HasCondition() && xFilter->HasTop10();
+ }
- if( bConflict )
- maFilterList.RemoveAllRecords();
+ if( bConflict )
+ maFilterList.RemoveAllRecords();
- if( !maFilterList.IsEmpty() )
- m_pFilterMode = new XclExpFiltermode;
- m_pFilterInfo = new XclExpAutofilterinfo( aRange.aStart, nColCnt );
+ if( !maFilterList.IsEmpty() )
+ m_pFilterMode = new XclExpFiltermode;
+ m_pFilterInfo = new XclExpAutofilterinfo( aRange.aStart, nColCnt );
- if (maFilterList.IsEmpty () && !bConflict)
- mbAutoFilter = true;
- }
+ if (maFilterList.IsEmpty () && !bConflict)
+ mbAutoFilter = true;
}
}
diff --git a/sc/source/filter/excel/impop.cxx b/sc/source/filter/excel/impop.cxx
index b3d5a369f271..9020ace75db9 100644
--- a/sc/source/filter/excel/impop.cxx
+++ b/sc/source/filter/excel/impop.cxx
@@ -164,18 +164,18 @@ void ImportExcel::ReadFileSharing()
nRecommendReadOnly = maStrm.ReaduInt16();
nPasswordHash = maStrm.ReaduInt16();
- if( (nRecommendReadOnly != 0) || (nPasswordHash != 0) )
- {
- if( SfxItemSet* pItemSet = GetMedium().GetItemSet() )
- pItemSet->Put( SfxBoolItem( SID_DOC_READONLY, true ) );
+ if((nRecommendReadOnly == 0) && (nPasswordHash == 0))
+ return;
- if( SfxObjectShell* pShell = GetDocShell() )
- {
- if( nRecommendReadOnly != 0 )
- pShell->SetLoadReadonly( true );
- if( nPasswordHash != 0 )
- pShell->SetModifyPasswordHash( nPasswordHash );
- }
+ if( SfxItemSet* pItemSet = GetMedium().GetItemSet() )
+ pItemSet->Put( SfxBoolItem( SID_DOC_READONLY, true ) );
+
+ if( SfxObjectShell* pShell = GetDocShell() )
+ {
+ if( nRecommendReadOnly != 0 )
+ pShell->SetLoadReadonly( true );
+ if( nPasswordHash != 0 )
+ pShell->SetModifyPasswordHash( nPasswordHash );
}
}
@@ -318,28 +318,28 @@ void ImportExcel::ReadLabel()
maStrm >> aXclPos;
ScAddress aScPos( ScAddress::UNINITIALIZED );
- if( GetAddressConverter().ConvertAddress( aScPos, aXclPos, GetCurrScTab(), true ) )
- {
- /* Record ID BIFF XF type String type
- 0x0004 2-7 3 byte 8-bit length, byte string
- 0x0004 8 3 byte 16-bit length, unicode string
- 0x0204 2-7 2 byte 16-bit length, byte string
- 0x0204 8 2 byte 16-bit length, unicode string */
- bool bBiff2 = maStrm.GetRecId() == EXC_ID2_LABEL;
- sal_uInt16 nXFIdx = ReadXFIndex( aScPos, bBiff2 );
- XclStrFlags nFlags = (bBiff2 && (GetBiff() <= EXC_BIFF5)) ? XclStrFlags::EightBitLength : XclStrFlags::NONE;
- XclImpString aString;
-
- // #i63105# use text encoding from FONT record
- rtl_TextEncoding eOldTextEnc = GetTextEncoding();
- if( const XclImpFont* pFont = GetXFBuffer().GetFont( nXFIdx ) )
- SetTextEncoding( pFont->GetFontEncoding() );
- aString.Read( maStrm, nFlags );
- SetTextEncoding( eOldTextEnc );
+ if( !GetAddressConverter().ConvertAddress( aScPos, aXclPos, GetCurrScTab(), true ) )
+ return;
- GetXFRangeBuffer().SetXF( aScPos, nXFIdx );
- XclImpStringHelper::SetToDocument(GetDocImport(), aScPos, GetRoot(), aString, nXFIdx);
- }
+ /* Record ID BIFF XF type String type
+ 0x0004 2-7 3 byte 8-bit length, byte string
+ 0x0004 8 3 byte 16-bit length, unicode string
+ 0x0204 2-7 2 byte 16-bit length, byte string
+ 0x0204 8 2 byte 16-bit length, unicode string */
+ bool bBiff2 = maStrm.GetRecId() == EXC_ID2_LABEL;
+ sal_uInt16 nXFIdx = ReadXFIndex( aScPos, bBiff2 );
+ XclStrFlags nFlags = (bBiff2 && (GetBiff() <= EXC_BIFF5)) ? XclStrFlags::EightBitLength : XclStrFlags::NONE;
+ XclImpString aString;
+
+ // #i63105# use text encoding from FONT record
+ rtl_TextEncoding eOldTextEnc = GetTextEncoding();
+ if( const XclImpFont* pFont = GetXFBuffer().GetFont( nXFIdx ) )
+ SetTextEncoding( pFont->GetFontEncoding() );
+ aString.Read( maStrm, nFlags );
+ SetTextEncoding( eOldTextEnc );
+
+ GetXFRangeBuffer().SetXF( aScPos, nXFIdx );
+ XclImpStringHelper::SetToDocument(GetDocImport(), aScPos, GetRoot(), aString, nXFIdx);
}
void ImportExcel::ReadBoolErr()
@@ -348,26 +348,26 @@ void ImportExcel::ReadBoolErr()
maStrm >> aXclPos;
ScAddress aScPos( ScAddress::UNINITIALIZED );
- if( GetAddressConverter().ConvertAddress( aScPos, aXclPos, GetCurrScTab(), true ) )
- {
- sal_uInt16 nXFIdx = ReadXFIndex( aScPos, maStrm.GetRecId() == EXC_ID2_BOOLERR );
- sal_uInt8 nValue, nType;
- nValue = maStrm.ReaduInt8();
- nType = maStrm.ReaduInt8();
+ if( !GetAddressConverter().ConvertAddress( aScPos, aXclPos, GetCurrScTab(), true ) )
+ return;
- if( nType == EXC_BOOLERR_BOOL )
- GetXFRangeBuffer().SetBoolXF( aScPos, nXFIdx );
- else
- GetXFRangeBuffer().SetXF( aScPos, nXFIdx );
+ sal_uInt16 nXFIdx = ReadXFIndex( aScPos, maStrm.GetRecId() == EXC_ID2_BOOLERR );
+ sal_uInt8 nValue, nType;
+ nValue = maStrm.ReaduInt8();
+ nType = maStrm.ReaduInt8();
- double fValue;
- std::unique_ptr<ScTokenArray> pScTokArr = ErrorToFormula( nType != EXC_BOOLERR_BOOL, nValue, fValue );
- ScFormulaCell* pCell = pScTokArr
- ? new ScFormulaCell(pD, aScPos, std::move(pScTokArr))
- : new ScFormulaCell(pD, aScPos);
- pCell->SetHybridDouble( fValue );
- GetDocImport().setFormulaCell(aScPos, pCell);
- }
+ if( nType == EXC_BOOLERR_BOOL )
+ GetXFRangeBuffer().SetBoolXF( aScPos, nXFIdx );
+ else
+ GetXFRangeBuffer().SetXF( aScPos, nXFIdx );
+
+ double fValue;
+ std::unique_ptr<ScTokenArray> pScTokArr = ErrorToFormula( nType != EXC_BOOLERR_BOOL, nValue, fValue );
+ ScFormulaCell* pCell = pScTokArr
+ ? new ScFormulaCell(pD, aScPos, std::move(pScTokArr))
+ : new ScFormulaCell(pD, aScPos);
+ pCell->SetHybridDouble( fValue );
+ GetDocImport().setFormulaCell(aScPos, pCell);
}
void ImportExcel::ReadRk()
@@ -399,26 +399,26 @@ void ImportExcel::Row25()
nRow = aIn.ReaduInt16();
aIn.Ignore( 4 );
- if( GetRoot().GetDoc().ValidRow( nRow ) )
- {
- nRowHeight = aIn.ReaduInt16(); // specify direct in Twips
- aIn.Ignore( 2 );
+ if( !GetRoot().GetDoc().ValidRow( nRow ) )
+ return;
- if( GetBiff() == EXC_BIFF2 )
- {// -------------------- BIFF2
- pColRowBuff->SetHeight( nRow, nRowHeight );
- }
- else
- {// -------------------- BIFF5
- sal_uInt16 nGrbit;
+ nRowHeight = aIn.ReaduInt16(); // specify direct in Twips
+ aIn.Ignore( 2 );
- aIn.Ignore( 2 ); // reserved
- nGrbit = aIn.ReaduInt16();
+ if( GetBiff() == EXC_BIFF2 )
+ {// -------------------- BIFF2
+ pColRowBuff->SetHeight( nRow, nRowHeight );
+ }
+ else
+ {// -------------------- BIFF5
+ sal_uInt16 nGrbit;
- sal_uInt8 nLevel = ::extract_value< sal_uInt8 >( nGrbit, 0, 3 );
- pRowOutlineBuff->SetLevel( nRow, nLevel, ::get_flag( nGrbit, EXC_ROW_COLLAPSED ) );
- pColRowBuff->SetRowSettings( nRow, nRowHeight, nGrbit );
- }
+ aIn.Ignore( 2 ); // reserved
+ nGrbit = aIn.ReaduInt16();
+
+ sal_uInt8 nLevel = ::extract_value< sal_uInt8 >( nGrbit, 0, 3 );
+ pRowOutlineBuff->SetLevel( nRow, nLevel, ::get_flag( nGrbit, EXC_ROW_COLLAPSED ) );
+ pColRowBuff->SetRowSettings( nRow, nRowHeight, nGrbit );
}
}
@@ -904,19 +904,19 @@ void ImportExcel::Rstring()
nXFIdx = aIn.ReaduInt16();
ScAddress aScPos( ScAddress::UNINITIALIZED );
- if( GetAddressConverter().ConvertAddress( aScPos, aXclPos, GetCurrScTab(), true ) )
- {
- // unformatted Unicode string with separate formatting information
- XclImpString aString;
- aString.Read( maStrm );
+ if( !GetAddressConverter().ConvertAddress( aScPos, aXclPos, GetCurrScTab(), true ) )
+ return;
- // character formatting runs
- if( !aString.IsRich() )
- aString.ReadFormats( maStrm );
+ // unformatted Unicode string with separate formatting information
+ XclImpString aString;
+ aString.Read( maStrm );
- GetXFRangeBuffer().SetXF( aScPos, nXFIdx );
- XclImpStringHelper::SetToDocument(GetDocImport(), aScPos, *this, aString, nXFIdx);
- }
+ // character formatting runs
+ if( !aString.IsRich() )
+ aString.ReadFormats( maStrm );
+
+ GetXFRangeBuffer().SetXF( aScPos, nXFIdx );
+ XclImpStringHelper::SetToDocument(GetDocImport(), aScPos, *this, aString, nXFIdx);
}
void ImportExcel::Cellmerging()
@@ -955,25 +955,25 @@ void ImportExcel::Row34()
SCROW nScRow = static_cast< SCROW >( nRow );
- if( GetRoot().GetDoc().ValidRow( nScRow ) )
- {
- nRowHeight = aIn.ReaduInt16(); // specify direct in Twips
- aIn.Ignore( 4 );
+ if( !GetRoot().GetDoc().ValidRow( nScRow ) )
+ return;
- nRowHeight = nRowHeight & 0x7FFF; // Bit 15: Row Height not changed manually
- if( !nRowHeight )
- nRowHeight = (GetBiff() == EXC_BIFF2) ? 0x25 : 0x225;
+ nRowHeight = aIn.ReaduInt16(); // specify direct in Twips
+ aIn.Ignore( 4 );
- nGrbit = aIn.ReaduInt16();
- nXF = aIn.ReaduInt16();
+ nRowHeight = nRowHeight & 0x7FFF; // Bit 15: Row Height not changed manually
+ if( !nRowHeight )
+ nRowHeight = (GetBiff() == EXC_BIFF2) ? 0x25 : 0x225;
- sal_uInt8 nLevel = ::extract_value< sal_uInt8 >( nGrbit, 0, 3 );
- pRowOutlineBuff->SetLevel( nScRow, nLevel, ::get_flag( nGrbit, EXC_ROW_COLLAPSED ) );
- pColRowBuff->SetRowSettings( nScRow, nRowHeight, nGrbit );
+ nGrbit = aIn.ReaduInt16();
+ nXF = aIn.ReaduInt16();
- if( nGrbit & EXC_ROW_USEDEFXF )
- GetXFRangeBuffer().SetRowDefXF( nScRow, nXF & EXC_ROW_XFMASK );
- }
+ sal_uInt8 nLevel = ::extract_value< sal_uInt8 >( nGrbit, 0, 3 );
+ pRowOutlineBuff->SetLevel( nScRow, nLevel, ::get_flag( nGrbit, EXC_ROW_COLLAPSED ) );
+ pColRowBuff->SetRowSettings( nScRow, nRowHeight, nGrbit );
+
+ if( nGrbit & EXC_ROW_USEDEFXF )
+ GetXFRangeBuffer().SetRowDefXF( nScRow, nXF & EXC_ROW_XFMASK );
}
void ImportExcel::Bof3()
@@ -1315,32 +1315,32 @@ void ImportExcel::PostDocLoad()
GetTracer().TracePrintRange();
}
- if( pExcRoot->pPrintTitles->HasRanges() )
+ if( !pExcRoot->pPrintTitles->HasRanges() )
+ return;
+
+ for( SCTAB n = 0 ; n < nLast ; n++ )
{
- for( SCTAB n = 0 ; n < nLast ; n++ )
+ p = pExcRoot->pPrintTitles->First(n);
+ if( p )
{
- p = pExcRoot->pPrintTitles->First(n);
- if( p )
+ bool bRowVirgin = true;
+ bool bColVirgin = true;
+
+ while( p )
{
- bool bRowVirgin = true;
- bool bColVirgin = true;
+ if( p->aStart.Col() == 0 && p->aEnd.Col() == pD->MaxCol() && bRowVirgin )
+ {
+ pD->SetRepeatRowRange( n, std::unique_ptr<ScRange>(new ScRange(*p)) );
+ bRowVirgin = false;
+ }
- while( p )
+ if( p->aStart.Row() == 0 && p->aEnd.Row() == pD->MaxRow() && bColVirgin )
{
- if( p->aStart.Col() == 0 && p->aEnd.Col() == pD->MaxCol() && bRowVirgin )
- {
- pD->SetRepeatRowRange( n, std::unique_ptr<ScRange>(new ScRange(*p)) );
- bRowVirgin = false;
- }
-
- if( p->aStart.Row() == 0 && p->aEnd.Row() == pD->MaxRow() && bColVirgin )
- {
- pD->SetRepeatColRange( n, std::unique_ptr<ScRange>(new ScRange(*p)) );
- bColVirgin = false;
- }
-
- p = pExcRoot->pPrintTitles->Next();
+ pD->SetRepeatColRange( n, std::unique_ptr<ScRange>(new ScRange(*p)) );
+ bColVirgin = false;
}
+
+ p = pExcRoot->pPrintTitles->Next();
}
}
}
diff --git a/sc/source/filter/excel/xechart.cxx b/sc/source/filter/excel/xechart.cxx
index dd3e81a8b97b..ff3f8c2ea30e 100644
--- a/sc/source/filter/excel/xechart.cxx
+++ b/sc/source/filter/excel/xechart.cxx
@@ -253,26 +253,26 @@ void XclExpChRootData::RegisterFutureRecBlock( const XclChFrBlock& rFrBlock )
void XclExpChRootData::InitializeFutureRecBlock( XclExpStream& rStrm )
{
// first call from a future record writes all missing CHFRBLOCKBEGIN records
- if( !maUnwrittenFrBlocks.empty() )
+ if( maUnwrittenFrBlocks.empty() )
+ return;
+
+ // write the leading CHFRINFO record
+ if( maWrittenFrBlocks.empty() )
{
- // write the leading CHFRINFO record
- if( maWrittenFrBlocks.empty() )
- {
- rStrm.StartRecord( EXC_ID_CHFRINFO, 20 );
- rStrm << EXC_ID_CHFRINFO << EXC_FUTUREREC_EMPTYFLAGS << EXC_CHFRINFO_EXCELXP2003 << EXC_CHFRINFO_EXCELXP2003 << sal_uInt16( 3 );
- rStrm << sal_uInt16( 0x0850 ) << sal_uInt16( 0x085A ) << sal_uInt16( 0x0861 ) << sal_uInt16( 0x0861 ) << sal_uInt16( 0x086A ) << sal_uInt16( 0x086B );
- rStrm.EndRecord();
- }
- // write all unwritten CHFRBLOCKBEGIN records
- for( const auto& rUnwrittenFrBlock : maUnwrittenFrBlocks )
- {
- OSL_ENSURE( rUnwrittenFrBlock.mnType != EXC_CHFRBLOCK_TYPE_UNKNOWN, "XclExpChRootData::InitializeFutureRecBlock - unknown future record block type" );
- lclWriteChFrBlockRecord( rStrm, rUnwrittenFrBlock, true );
- }
- // move all record infos to vector of written blocks
- maWrittenFrBlocks.insert( maWrittenFrBlocks.end(), maUnwrittenFrBlocks.begin(), maUnwrittenFrBlocks.end() );
- maUnwrittenFrBlocks.clear();
+ rStrm.StartRecord( EXC_ID_CHFRINFO, 20 );
+ rStrm << EXC_ID_CHFRINFO << EXC_FUTUREREC_EMPTYFLAGS << EXC_CHFRINFO_EXCELXP2003 << EXC_CHFRINFO_EXCELXP2003 << sal_uInt16( 3 );
+ rStrm << sal_uInt16( 0x0850 ) << sal_uInt16( 0x085A ) << sal_uInt16( 0x0861 ) << sal_uInt16( 0x0861 ) << sal_uInt16( 0x086A ) << sal_uInt16( 0x086B );
+ rStrm.EndRecord();
+ }
+ // write all unwritten CHFRBLOCKBEGIN records
+ for( const auto& rUnwrittenFrBlock : maUnwrittenFrBlocks )
+ {
+ OSL_ENSURE( rUnwrittenFrBlock.mnType != EXC_CHFRBLOCK_TYPE_UNKNOWN, "XclExpChRootData::InitializeFutureRecBlock - unknown future record block type" );
+ lclWriteChFrBlockRecord( rStrm, rUnwrittenFrBlock, true );
}
+ // move all record infos to vector of written blocks
+ maWrittenFrBlocks.insert( maWrittenFrBlocks.end(), maUnwrittenFrBlocks.begin(), maUnwrittenFrBlocks.end() );
+ maUnwrittenFrBlocks.clear();
}
void XclExpChRootData::FinalizeFutureRecBlock( XclExpStream& rStrm )
@@ -436,19 +436,19 @@ void XclExpChGroupBase::Save( XclExpStream& rStrm )
// header record
XclExpRecord::Save( rStrm );
// group records
- if( HasSubRecords() )
- {
- // register the future record context corresponding to this record group
- RegisterFutureRecBlock( maFrBlock );
- // CHBEGIN record
- XclExpEmptyRecord( EXC_ID_CHBEGIN ).Save( rStrm );
- // embedded records
- WriteSubRecords( rStrm );
- // finalize the future records, must be done before the closing CHEND
- FinalizeFutureRecBlock( rStrm );
- // CHEND record
- XclExpEmptyRecord( EXC_ID_CHEND ).Save( rStrm );
- }
+ if( !HasSubRecords() )
+ return;
+
+ // register the future record context corresponding to this record group
+ RegisterFutureRecBlock( maFrBlock );
+ // CHBEGIN record
+ XclExpEmptyRecord( EXC_ID_CHBEGIN ).Save( rStrm );
+ // embedded records
+ WriteSubRecords( rStrm );
+ // finalize the future records, must be done before the closing CHEND
+ FinalizeFutureRecBlock( rStrm );
+ // CHEND record
+ XclExpEmptyRecord( EXC_ID_CHEND ).Save( rStrm );
}
bool XclExpChGroupBase::HasSubRecords() const
@@ -734,19 +734,19 @@ void XclExpChFrameBase::ConvertFrameBase( const XclExpChRoot& rRoot,
mxLineFmt = new XclExpChLineFormat( rRoot );
mxLineFmt->Convert( rRoot, rPropSet, eObjType );
// area format (only for frame objects)
- if( rRoot.GetFormatInfo( eObjType ).mbIsFrame )
+ if( !rRoot.GetFormatInfo( eObjType ).mbIsFrame )
+ return;
+
+ mxAreaFmt = new XclExpChAreaFormat( rRoot );
+ bool bComplexFill = mxAreaFmt->Convert( rRoot, rPropSet, eObjType );
+ if( (rRoot.GetBiff() == EXC_BIFF8) && bComplexFill )
{
- mxAreaFmt = new XclExpChAreaFormat( rRoot );
- bool bComplexFill = mxAreaFmt->Convert( rRoot, rPropSet, eObjType );
- if( (rRoot.GetBiff() == EXC_BIFF8) && bComplexFill )
- {
- mxEscherFmt = new XclExpChEscherFormat( rRoot );
- mxEscherFmt->Convert( rPropSet, eObjType );
- if( mxEscherFmt->IsValid() )
- mxAreaFmt->SetAuto( false );
- else
- mxEscherFmt.clear();
- }
+ mxEscherFmt = new XclExpChEscherFormat( rRoot );
+ mxEscherFmt->Convert( rPropSet, eObjType );
+ if( mxEscherFmt->IsValid() )
+ mxAreaFmt->SetAuto( false );
+ else
+ mxEscherFmt.clear();
}
}
@@ -1511,30 +1511,30 @@ XclExpCh3dDataFormat::XclExpCh3dDataFormat() :
void XclExpCh3dDataFormat::Convert( const ScfPropertySet& rPropSet )
{
sal_Int32 nApiType(0);
- if( rPropSet.GetProperty( nApiType, EXC_CHPROP_GEOMETRY3D ) )
+ if( !rPropSet.GetProperty( nApiType, EXC_CHPROP_GEOMETRY3D ) )
+ return;
+
+ using namespace cssc2::DataPointGeometry3D;
+ switch( nApiType )
{
- using namespace cssc2::DataPointGeometry3D;
- switch( nApiType )
- {
- case CUBOID:
- maData.mnBase = EXC_CH3DDATAFORMAT_RECT;
- maData.mnTop = EXC_CH3DDATAFORMAT_STRAIGHT;
- break;
- case PYRAMID:
- maData.mnBase = EXC_CH3DDATAFORMAT_RECT;
- maData.mnTop = EXC_CH3DDATAFORMAT_SHARP;
- break;
- case CYLINDER:
- maData.mnBase = EXC_CH3DDATAFORMAT_CIRC;
- maData.mnTop = EXC_CH3DDATAFORMAT_STRAIGHT;
- break;
- case CONE:
- maData.mnBase = EXC_CH3DDATAFORMAT_CIRC;
- maData.mnTop = EXC_CH3DDATAFORMAT_SHARP;
- break;
- default:
- OSL_FAIL( "XclExpCh3dDataFormat::Convert - unknown 3D bar format" );
- }
+ case CUBOID:
+ maData.mnBase = EXC_CH3DDATAFORMAT_RECT;
+ maData.mnTop = EXC_CH3DDATAFORMAT_STRAIGHT;
+ break;
+ case PYRAMID:
+ maData.mnBase = EXC_CH3DDATAFORMAT_RECT;
+ maData.mnTop = EXC_CH3DDATAFORMAT_SHARP;
+ break;
+ case CYLINDER:
+ maData.mnBase = EXC_CH3DDATAFORMAT_CIRC;
+ maData.mnTop = EXC_CH3DDATAFORMAT_STRAIGHT;
+ break;
+ case CONE:
+ maData.mnBase = EXC_CH3DDATAFORMAT_CIRC;
+ maData.mnTop = EXC_CH3DDATAFORMAT_SHARP;
+ break;
+ default:
+ OSL_FAIL( "XclExpCh3dDataFormat::Convert - unknown 3D bar format" );
}
}
@@ -2116,48 +2116,48 @@ XclExpChType::XclExpChType( const XclExpChRoot& rRoot ) :
void XclExpChType::Convert( Reference< XDiagram > const & xDiagram, Reference< XChartType > const & xChartType,
sal_Int32 nApiAxesSetIdx, bool bSwappedAxesSet, bool bHasXLabels )
{
- if( xChartType.is() )
+ if( !xChartType.is() )
+ return;
+
+ maTypeInfo = GetChartTypeInfo( xChartType->getChartType() );
+ // special handling for some chart types
+ switch( maTypeInfo.meTypeCateg )
{
- maTypeInfo = GetChartTypeInfo( xChartType->getChartType() );
- // special handling for some chart types
- switch( maTypeInfo.meTypeCateg )
+ case EXC_CHTYPECATEG_BAR:
{
- case EXC_CHTYPECATEG_BAR:
- {
- maTypeInfo = GetChartTypeInfo( bSwappedAxesSet ? EXC_CHTYPEID_HORBAR : EXC_CHTYPEID_BAR );
- ::set_flag( maData.mnFlags, EXC_CHBAR_HORIZONTAL, bSwappedAxesSet );
- ScfPropertySet aTypeProp( xChartType );
- Sequence< sal_Int32 > aInt32Seq;
- maData.mnOverlap = 0;
- if( aTypeProp.GetProperty( aInt32Seq, EXC_CHPROP_OVERLAPSEQ ) && (nApiAxesSetIdx < aInt32Seq.getLength()) )
- maData.mnOverlap = limit_cast< sal_Int16 >( -aInt32Seq[ nApiAxesSetIdx ], -100, 100 );
- maData.mnGap = 150;
- if( aTypeProp.GetProperty( aInt32Seq, EXC_CHPROP_GAPWIDTHSEQ ) && (nApiAxesSetIdx < aInt32Seq.getLength()) )
- maData.mnGap = limit_cast< sal_uInt16 >( aInt32Seq[ nApiAxesSetIdx ], 0, 500 );
- }
- break;
- case EXC_CHTYPECATEG_RADAR:
- ::set_flag( maData.mnFlags, EXC_CHRADAR_AXISLABELS, bHasXLabels );
- break;
- case EXC_CHTYPECATEG_PIE:
- {
- ScfPropertySet aTypeProp( xChartType );
- bool bDonut = aTypeProp.GetBoolProperty( EXC_CHPROP_USERINGS );
- maTypeInfo = GetChartTypeInfo( bDonut ? EXC_CHTYPEID_DONUT : EXC_CHTYPEID_PIE );
- maData.mnPieHole = bDonut ? 50 : 0;
- // #i85166# starting angle of first pie slice
- ScfPropertySet aDiaProp( xDiagram );
- maData.mnRotation = XclExpChRoot::ConvertPieRotation( aDiaProp );
- }
- break;
- case EXC_CHTYPECATEG_SCATTER:
- if( GetBiff() == EXC_BIFF8 )
- ::set_flag( maData.mnFlags, EXC_CHSCATTER_BUBBLES, maTypeInfo.meTypeId == EXC_CHTYPEID_BUBBLES );
- break;
- default:;
+ maTypeInfo = GetChartTypeInfo( bSwappedAxesSet ? EXC_CHTYPEID_HORBAR : EXC_CHTYPEID_BAR );
+ ::set_flag( maData.mnFlags, EXC_CHBAR_HORIZONTAL, bSwappedAxesSet );
+ ScfPropertySet aTypeProp( xChartType );
+ Sequence< sal_Int32 > aInt32Seq;
+ maData.mnOverlap = 0;
+ if( aTypeProp.GetProperty( aInt32Seq, EXC_CHPROP_OVERLAPSEQ ) && (nApiAxesSetIdx < aInt32Seq.getLength()) )
+ maData.mnOverlap = limit_cast< sal_Int16 >( -aInt32Seq[ nApiAxesSetIdx ], -100, 100 );
+ maData.mnGap = 150;
+ if( aTypeProp.GetProperty( aInt32Seq, EXC_CHPROP_GAPWIDTHSEQ ) && (nApiAxesSetIdx < aInt32Seq.getLength()) )
+ maData.mnGap = limit_cast< sal_uInt16 >( aInt32Seq[ nApiAxesSetIdx ], 0, 500 );
}
- SetRecId( maTypeInfo.mnRecId );
+ break;
+ case EXC_CHTYPECATEG_RADAR:
+ ::set_flag( maData.mnFlags, EXC_CHRADAR_AXISLABELS, bHasXLabels );
+ break;
+ case EXC_CHTYPECATEG_PIE:
+ {
+ ScfPropertySet aTypeProp( xChartType );
+ bool bDonut = aTypeProp.GetBoolProperty( EXC_CHPROP_USERINGS );
+ maTypeInfo = GetChartTypeInfo( bDonut ? EXC_CHTYPEID_DONUT : EXC_CHTYPEID_PIE );
+ maData.mnPieHole = bDonut ? 50 : 0;
+ // #i85166# starting angle of first pie slice
+ ScfPropertySet aDiaProp( xDiagram );
+ maData.mnRotation = XclExpChRoot::ConvertPieRotation( aDiaProp );
+ }
+ break;
+ case EXC_CHTYPECATEG_SCATTER:
+ if( GetBiff() == EXC_BIFF8 )
+ ::set_flag( maData.mnFlags, EXC_CHSCATTER_BUBBLES, maTypeInfo.meTypeId == EXC_CHTYPEID_BUBBLES );
+ break;
+ default:;
}
+ SetRecId( maTypeInfo.mnRecId );
}
void XclExpChType::SetStacked( bool bPercent )
@@ -2420,67 +2420,67 @@ void XclExpChTypeGroup::ConvertSeries(
sal_Int32 nGroupAxesSetIdx, bool bPercent, bool bConnectBars )
{
Reference< XDataSeriesContainer > xSeriesCont( xChartType, UNO_QUERY );
- if( xSeriesCont.is() )
- {
- std::vector< Reference< XDataSeries > > aSeriesVec;
+ if( !xSeriesCont.is() )
+ return;
- // copy data series attached to the current axes set to the vector
- const Sequence< Reference< XDataSeries > > aSeriesSeq = xSeriesCont->getDataSeries();
- for( const Reference< XDataSeries >& rSeries : aSeriesSeq )
- {
- ScfPropertySet aSeriesProp( rSeries );
- sal_Int32 nSeriesAxesSetIdx(0);
- if( aSeriesProp.GetProperty( nSeriesAxesSetIdx, EXC_CHPROP_ATTAXISINDEX ) && (nSeriesAxesSetIdx == nGroupAxesSetIdx) )
- aSeriesVec.push_back( rSeries );
- }
+ std::vector< Reference< XDataSeries > > aSeriesVec;
- // Are there any series in the current axes set?
- if( !aSeriesVec.empty() )
- {
- // stacking direction (stacked/percent/deep 3d) from first series
- ScfPropertySet aSeriesProp( aSeriesVec.front() );
- cssc2::StackingDirection eStacking;
- if( !aSeriesProp.GetProperty( eStacking, EXC_CHPROP_STACKINGDIR ) )
- eStacking = cssc2::StackingDirection_NO_STACKING;
-
- // stacked or percent chart
- if( maTypeInfo.mbSupportsStacking && (eStacking == cssc2::StackingDirection_Y_STACKING) )
- {
- // percent overrides simple stacking
- maType.SetStacked( bPercent );
+ // copy data series attached to the current axes set to the vector
+ const Sequence< Reference< XDataSeries > > aSeriesSeq = xSeriesCont->getDataSeries();
+ for( const Reference< XDataSeries >& rSeries : aSeriesSeq )
+ {
+ ScfPropertySet aSeriesProp( rSeries );
+ sal_Int32 nSeriesAxesSetIdx(0);
+ if( aSeriesProp.GetProperty( nSeriesAxesSetIdx, EXC_CHPROP_ATTAXISINDEX ) && (nSeriesAxesSetIdx == nGroupAxesSetIdx) )
+ aSeriesVec.push_back( rSeries );
+ }
- // connected data points (only in stacked bar charts)
- if (bConnectBars && (maTypeInfo.meTypeCateg == EXC_CHTYPECATEG_BAR))
- {
- sal_uInt16 nKey = EXC_CHCHARTLINE_CONNECT;
- m_ChartLines.insert(std::make_pair(nKey, std::make_unique<XclExpChLineFormat>(GetChRoot())));
- }
- }
- else
- {
- // reverse series order for some unstacked 2D chart types
- if( maTypeInfo.mbReverseSeries && !Is3dChart() )
- ::std::reverse( aSeriesVec.begin(), aSeriesVec.end() );
- }
+ // Are there any series in the current axes set?
+ if( aSeriesVec.empty() )
+ return;
- // deep 3d chart or clustered 3d chart (stacked is not clustered)
- if( (eStacking == cssc2::StackingDirection_NO_STACKING) && Is3dWallChart() )
- mxChart3d->SetClustered();
+ // stacking direction (stacked/percent/deep 3d) from first series
+ ScfPropertySet aSeriesProp( aSeriesVec.front() );
+ cssc2::StackingDirection eStacking;
+ if( !aSeriesProp.GetProperty( eStacking, EXC_CHPROP_STACKINGDIR ) )
+ eStacking = cssc2::StackingDirection_NO_STACKING;
- // varied point colors
- ::set_flag( maData.mnFlags, EXC_CHTYPEGROUP_VARIEDCOLORS, aSeriesProp.GetBoolProperty( EXC_CHPROP_VARYCOLORSBY ) );
+ // stacked or percent chart
+ if( maTypeInfo.mbSupportsStacking && (eStacking == cssc2::StackingDirection_Y_STACKING) )
+ {
+ // percent overrides simple stacking
+ maType.SetStacked( bPercent );
- // process all series
- for( const auto& rxSeries : aSeriesVec )
- {
- // create Excel series object, stock charts need special processing
- if( maTypeInfo.meTypeId == EXC_CHTYPEID_STOCK )
- CreateAllStockSeries( xChartType, rxSeries );
- else
- CreateDataSeries( xDiagram, rxSeries );
- }
+ // connected data points (only in stacked bar charts)
+ if (bConnectBars && (maTypeInfo.meTypeCateg == EXC_CHTYPECATEG_BAR))
+ {
+ sal_uInt16 nKey = EXC_CHCHARTLINE_CONNECT;
+ m_ChartLines.insert(std::make_pair(nKey, std::make_unique<XclExpChLineFormat>(GetChRoot())));
}
}
+ else
+ {
+ // reverse series order for some unstacked 2D chart types
+ if( maTypeInfo.mbReverseSeries && !Is3dChart() )
+ ::std::reverse( aSeriesVec.begin(), aSeriesVec.end() );
+ }
+
+ // deep 3d chart or clustered 3d chart (stacked is not clustered)
+ if( (eStacking == cssc2::StackingDirection_NO_STACKING) && Is3dWallChart() )
+ mxChart3d->SetClustered();
+
+ // varied point colors
+ ::set_flag( maData.mnFlags, EXC_CHTYPEGROUP_VARIEDCOLORS, aSeriesProp.GetBoolProperty( EXC_CHPROP_VARYCOLORSBY ) );
+
+ // process all series
+ for( const auto& rxSeries : aSeriesVec )
+ {
+ // create Excel series object, stock charts need special processing
+ if( maTypeInfo.meTypeId == EXC_CHTYPEID_STOCK )
+ CreateAllStockSeries( xChartType, rxSeries );
+ else
+ CreateDataSeries( xDiagram, rxSeries );
+ }
}
void XclExpChTypeGroup::ConvertCategSequence( Reference< XLabeledDataSequence > const & xCategSeq )
@@ -2551,21 +2551,21 @@ void XclExpChTypeGroup::CreateAllStockSeries(
m_ChartLines.insert(std::make_pair(nKey, std::make_unique<XclExpChLineFormat>(GetChRoot())));
}
// dropbars
- if( bHasOpen && bHasClose )
- {
- // dropbar type is dependent on position in the file - always create both
- Reference< XPropertySet > xWhitePropSet, xBlackPropSet;
- // white dropbar format
- aTypeProp.GetProperty( xWhitePropSet, EXC_CHPROP_WHITEDAY );
- ScfPropertySet aWhiteProp( xWhitePropSet );
- mxUpBar = new XclExpChDropBar( GetChRoot(), EXC_CHOBJTYPE_WHITEDROPBAR );
- mxUpBar->Convert( aWhiteProp );
- // black dropbar format
- aTypeProp.GetProperty( xBlackPropSet, EXC_CHPROP_BLACKDAY );
- ScfPropertySet aBlackProp( xBlackPropSet );
- mxDownBar = new XclExpChDropBar( GetChRoot(), EXC_CHOBJTYPE_BLACKDROPBAR );
- mxDownBar->Convert( aBlackProp );
- }
+ if( !(bHasOpen && bHasClose) )
+ return;
+
+ // dropbar type is dependent on position in the file - always create both
+ Reference< XPropertySet > xWhitePropSet, xBlackPropSet;
+ // white dropbar format
+ aTypeProp.GetProperty( xWhitePropSet, EXC_CHPROP_WHITEDAY );
+ ScfPropertySet aWhiteProp( xWhitePropSet );
+ mxUpBar = new XclExpChDropBar( GetChRoot(), EXC_CHOBJTYPE_WHITEDROPBAR );
+ mxUpBar->Convert( aWhiteProp );
+ // black dropbar format
+ aTypeProp.GetProperty( xBlackPropSet, EXC_CHPROP_BLACKDAY );
+ ScfPropertySet aBlackProp( xBlackPropSet );
+ mxDownBar = new XclExpChDropBar( GetChRoot(), EXC_CHOBJTYPE_BLACKDROPBAR );
+ mxDownBar->Convert( aBlackProp );
}
bool XclExpChTypeGroup::CreateStockSeries( Reference< XDataSeries > const & xDataSeries,
@@ -2685,20 +2685,20 @@ void XclExpChLabelRange::Save( XclExpStream& rStrm )
XclExpRecord::Save( rStrm );
// the CHDATERANGE record with date axis settings (BIFF8 only)
- if( GetBiff() == EXC_BIFF8 )
- {
- rStrm.StartRecord( EXC_ID_CHDATERANGE, 18 );
- rStrm << maDateData.mnMinDate
- << maDateData.mnMaxDate
- << maDateData.mnMajorStep
- << maDateData.mnMajorUnit
- << maDateData.mnMinorStep
- << maDateData.mnMinorUnit
- << maDateData.mnBaseUnit
- << maDateData.mnCross
- << maDateData.mnFlags;
- rStrm.EndRecord();
- }
+ if( GetBiff() != EXC_BIFF8 )
+ return;
+
+ rStrm.StartRecord( EXC_ID_CHDATERANGE, 18 );
+ rStrm << maDateData.mnMinDate
+ << maDateData.mnMaxDate
+ << maDateData.mnMajorStep
+ << maDateData.mnMajorUnit
+ << maDateData.mnMinorStep
+ << maDateData.mnMinorUnit
+ << maDateData.mnBaseUnit
+ << maDateData.mnCross
+ << maDateData.mnFlags;
+ rStrm.EndRecord();
}
void XclExpChLabelRange::WriteBody( XclExpStream& rStrm )
@@ -2754,24 +2754,24 @@ void XclExpChValueRange::ConvertAxisPosition( const ScfPropertySet& rPropSet )
{
cssc::ChartAxisPosition eAxisPos = cssc::ChartAxisPosition_VALUE;
double fCrossingPos = 0.0;
- if( rPropSet.GetProperty( eAxisPos, EXC_CHPROP_CROSSOVERPOSITION ) && rPropSet.GetProperty( fCrossingPos, EXC_CHPROP_CROSSOVERVALUE ) )
+ if( !(rPropSet.GetProperty( eAxisPos, EXC_CHPROP_CROSSOVERPOSITION ) && rPropSet.GetProperty( fCrossingPos, EXC_CHPROP_CROSSOVERVALUE )) )
+ return;
+
+ switch( eAxisPos )
{
- switch( eAxisPos )
- {
- case cssc::ChartAxisPosition_ZERO:
- case cssc::ChartAxisPosition_START:
- ::set_flag( maData.mnFlags, EXC_CHVALUERANGE_AUTOCROSS );
- break;
- case cssc::ChartAxisPosition_END:
- ::set_flag( maData.mnFlags, EXC_CHVALUERANGE_MAXCROSS );
- break;
- case cssc::ChartAxisPosition_VALUE:
- ::set_flag( maData.mnFlags, EXC_CHVALUERANGE_AUTOCROSS, false );
- maData.mfCross = ::get_flagvalue< double >( maData.mnFlags, EXC_CHVALUERANGE_LOGSCALE, log( fCrossingPos ) / log( 10.0 ), fCrossingPos );
- break;
- default:
- ::set_flag( maData.mnFlags, EXC_CHVALUERANGE_AUTOCROSS );
- }
+ case cssc::ChartAxisPosition_ZERO:
+ case cssc::ChartAxisPosition_START:
+ ::set_flag( maData.mnFlags, EXC_CHVALUERANGE_AUTOCROSS );
+ break;
+ case cssc::ChartAxisPosition_END:
+ ::set_flag( maData.mnFlags, EXC_CHVALUERANGE_MAXCROSS );
+ break;
+ case cssc::ChartAxisPosition_VALUE:
+ ::set_flag( maData.mnFlags, EXC_CHVALUERANGE_AUTOCROSS, false );
+ maData.mfCross = ::get_flagvalue< double >( maData.mnFlags, EXC_CHVALUERANGE_LOGSCALE, log( fCrossingPos ) / log( 10.0 ), fCrossingPos );
+ break;
+ default:
+ ::set_flag( maData.mnFlags, EXC_CHVALUERANGE_AUTOCROSS );
}
}
@@ -2997,41 +2997,44 @@ void XclExpChAxis::Convert( Reference< XAxis > const & xAxis, Reference< XAxis >
// grid -------------------------------------------------------------------
- if( xAxis.is() )
+ if( !xAxis.is() )
+ return;
+
+ // main grid
+ ScfPropertySet aGridProp( xAxis->getGridProperties() );
+ if( aGridProp.GetBoolProperty( EXC_CHPROP_SHOW ) )
+ mxMajorGrid = lclCreateLineFormat( GetChRoot(), aGridProp, EXC_CHOBJTYPE_GRIDLINE );
+ // sub grid
+ Sequence< Reference< XPropertySet > > aSubGridPropSeq = xAxis->getSubGridProperties();
+ if( aSubGridPropSeq.hasElements() )
{
- // main grid
- ScfPropertySet aGridProp( xAxis->getGridProperties() );
- if( aGridProp.GetBoolProperty( EXC_CHPROP_SHOW ) )
- mxMajorGrid = lclCreateLineFormat( GetChRoot(), aGridProp, EXC_CHOBJTYPE_GRIDLINE );
- // sub grid
- Sequence< Reference< XPropertySet > > aSubGridPropSeq = xAxis->getSubGridProperties();
- if( aSubGridPropSeq.hasElements() )
- {
- ScfPropertySet aSubGridProp( aSubGridPropSeq[ 0 ] );
- if( aSubGridProp.GetBoolProperty( EXC_CHPROP_SHOW ) )
- mxMinorGrid = lclCreateLineFormat( GetChRoot(), aSubGridProp, EXC_CHOBJTYPE_GRIDLINE );
- }
+ ScfPropertySet aSubGridProp( aSubGridPropSeq[ 0 ] );
+ if( aSubGridProp.GetBoolProperty( EXC_CHPROP_SHOW ) )
+ mxMinorGrid = lclCreateLineFormat( GetChRoot(), aSubGridProp, EXC_CHOBJTYPE_GRIDLINE );
}
}
void XclExpChAxis::ConvertWall( css::uno::Reference< css::chart2::XDiagram > const & xDiagram )
{
- if( xDiagram.is() ) switch( GetAxisType() )
+ if( !xDiagram.is() )
+ return;
+
+ switch( GetAxisType() )
{
- case EXC_CHAXIS_X:
- {
- ScfPropertySet aWallProp( xDiagram->getWall() );
- mxWallFrame = lclCreateFrame( GetChRoot(), aWallProp, EXC_CHOBJTYPE_WALL3D );
- }
- break;
- case EXC_CHAXIS_Y:
- {
- ScfPropertySet aFloorProp( xDiagram->getFloor() );
- mxWallFrame = lclCreateFrame( GetChRoot(), aFloorProp, EXC_CHOBJTYPE_FLOOR3D );
- }
- break;
- default:
- mxWallFrame.clear();
+ case EXC_CHAXIS_X:
+ {
+ ScfPropertySet aWallProp( xDiagram->getWall() );
+ mxWallFrame = lclCreateFrame( GetChRoot(), aWallProp, EXC_CHOBJTYPE_WALL3D );
+ }
+ break;
+ case EXC_CHAXIS_Y:
+ {
+ ScfPropertySet aFloorProp( xDiagram->getFloor() );
+ mxWallFrame = lclCreateFrame( GetChRoot(), aFloorProp, EXC_CHOBJTYPE_FLOOR3D );
+ }
+ break;
+ default:
+ mxWallFrame.clear();
}
}
@@ -3315,51 +3318,51 @@ XclExpChChart::XclExpChChart( const XclExpRoot& rRoot,
mxPrimAxesSet = std::make_shared<XclExpChAxesSet>( GetChRoot(), EXC_CHAXESSET_PRIMARY );
mxSecnAxesSet = std::make_shared<XclExpChAxesSet>( GetChRoot(), EXC_CHAXESSET_SECONDARY );
- if( xChartDoc.is() )
- {
- Reference< XDiagram > xDiagram = xChartDoc->getFirstDiagram();
+ if( !xChartDoc.is() )
+ return;
- // global chart properties (only 'include hidden cells' attribute for now)
- ScfPropertySet aDiagramProp( xDiagram );
- bool bIncludeHidden = aDiagramProp.GetBoolProperty( EXC_CHPROP_INCLUDEHIDDENCELLS );
- ::set_flag( maProps.mnFlags, EXC_CHPROPS_SHOWVISIBLEONLY, !bIncludeHidden );
+ Reference< XDiagram > xDiagram = xChartDoc->getFirstDiagram();
- // initialize API conversion (remembers xChartDoc and rChartRect internally)
- InitConversion( xChartDoc, rChartRect );
+ // global chart properties (only 'include hidden cells' attribute for now)
+ ScfPropertySet aDiagramProp( xDiagram );
+ bool bIncludeHidden = aDiagramProp.GetBoolProperty( EXC_CHPROP_INCLUDEHIDDENCELLS );
+ ::set_flag( maProps.mnFlags, EXC_CHPROPS_SHOWVISIBLEONLY, !bIncludeHidden );
- // chart frame
- ScfPropertySet aFrameProp( xChartDoc->getPageBackground() );
- mxFrame = lclCreateFrame( GetChRoot(), aFrameProp, EXC_CHOBJTYPE_BACKGROUND );
+ // initialize API conversion (remembers xChartDoc and rChartRect internally)
+ InitConversion( xChartDoc, rChartRect );
- // chart title
- Reference< XTitled > xTitled( xChartDoc, UNO_QUERY );
- OUString aSubTitle;
- lcl_getChartSubTitle(xChartDoc, aSubTitle);
- mxTitle = lclCreateTitle( GetChRoot(), xTitled, EXC_CHOBJLINK_TITLE,
- !aSubTitle.isEmpty() ? &aSubTitle : nullptr );
+ // chart frame
+ ScfPropertySet aFrameProp( xChartDoc->getPageBackground() );
+ mxFrame = lclCreateFrame( GetChRoot(), aFrameProp, EXC_CHOBJTYPE_BACKGROUND );
- // diagrams (axes sets)
- sal_uInt16 nFreeGroupIdx = mxPrimAxesSet->Convert( xDiagram, 0 );
- if( !mxPrimAxesSet->Is3dChart() )
- mxSecnAxesSet->Convert( xDiagram, nFreeGroupIdx );
+ // chart title
+ Reference< XTitled > xTitled( xChartDoc, UNO_QUERY );
+ OUString aSubTitle;
+ lcl_getChartSubTitle(xChartDoc, aSubTitle);
+ mxTitle = lclCreateTitle( GetChRoot(), xTitled, EXC_CHOBJLINK_TITLE,
+ !aSubTitle.isEmpty() ? &aSubTitle : nullptr );
- // treatment of missing values
- ScfPropertySet aDiaProp( xDiagram );
- sal_Int32 nMissingValues = 0;
- if( aDiaProp.GetProperty( nMissingValues, EXC_CHPROP_MISSINGVALUETREATMENT ) )
+ // diagrams (axes sets)
+ sal_uInt16 nFreeGroupIdx = mxPrimAxesSet->Convert( xDiagram, 0 );
+ if( !mxPrimAxesSet->Is3dChart() )
+ mxSecnAxesSet->Convert( xDiagram, nFreeGroupIdx );
+
+ // treatment of missing values
+ ScfPropertySet aDiaProp( xDiagram );
+ sal_Int32 nMissingValues = 0;
+ if( aDiaProp.GetProperty( nMissingValues, EXC_CHPROP_MISSINGVALUETREATMENT ) )
+ {
+ using namespace cssc::MissingValueTreatment;
+ switch( nMissingValues )
{
- using namespace cssc::MissingValueTreatment;
- switch( nMissingValues )
- {
- case LEAVE_GAP: maProps.mnEmptyMode = EXC_CHPROPS_EMPTY_SKIP; break;
- case USE_ZERO: maProps.mnEmptyMode = EXC_CHPROPS_EMPTY_ZERO; break;
- case CONTINUE: maProps.mnEmptyMode = EXC_CHPROPS_EMPTY_INTERPOLATE; break;
- }
+ case LEAVE_GAP: maProps.mnEmptyMode = EXC_CHPROPS_EMPTY_SKIP; break;
+ case USE_ZERO: maProps.mnEmptyMode = EXC_CHPROPS_EMPTY_ZERO; break;
+ case CONTINUE: maProps.mnEmptyMode = EXC_CHPROPS_EMPTY_INTERPOLATE; break;
}
-
- // finish API conversion
- FinishConversion();
}
+
+ // finish API conversion
+ FinishConversion();
}
XclExpChSeriesRef XclExpChChart::CreateSeries()
@@ -3427,24 +3430,24 @@ XclExpChartDrawing::XclExpChartDrawing( const XclExpRoot& rRoot,
const Reference< XModel >& rxModel, const Size& rChartSize ) :
XclExpRoot( rRoot )
{
- if( !rChartSize.IsEmpty() )
- {
- ScfPropertySet aPropSet( rxModel );
- Reference< XShapes > xShapes;
- if( aPropSet.GetProperty( xShapes, EXC_CHPROP_ADDITIONALSHAPES ) && xShapes.is() && (xShapes->getCount() > 0) )
- {
- /* Create a new independent object manager with own DFF stream for the
- DGCONTAINER, pass global manager as parent for shared usage of
- global DFF data (picture container etc.). */
- mxObjMgr = std::make_shared<XclExpEmbeddedObjectManager>( GetObjectManager(), rChartSize, EXC_CHART_TOTALUNITS, EXC_CHART_TOTALUNITS );
- // initialize the drawing object list
- mxObjMgr->StartSheet();
- // process the draw page (convert all shapes)
- mxObjRecs = mxObjMgr->ProcessDrawing( xShapes );
- // finalize the DFF stream
- mxObjMgr->EndDocument();
- }
- }
+ if( rChartSize.IsEmpty() )
+ return;
+
+ ScfPropertySet aPropSet( rxModel );
+ Reference< XShapes > xShapes;
+ if( !(aPropSet.GetProperty( xShapes, EXC_CHPROP_ADDITIONALSHAPES ) && xShapes.is() && (xShapes->getCount() > 0)) )
+ return;
+
+ /* Create a new independent object manager with own DFF stream for the
+ DGCONTAINER, pass global manager as parent for shared usage of
+ global DFF data (picture container etc.). */
+ mxObjMgr = std::make_shared<XclExpEmbeddedObjectManager>( GetObjectManager(), rChartSize, EXC_CHART_TOTALUNITS, EXC_CHART_TOTALUNITS );
+ // initialize the drawing object list
+ mxObjMgr->StartSheet();
+ // process the draw page (convert all shapes)
+ mxObjRecs = mxObjMgr->ProcessDrawing( xShapes );
+ // finalize the DFF stream
+ mxObjMgr->EndDocument();
}
XclExpChartDrawing::~XclExpChartDrawing()
diff --git a/sc/source/filter/excel/xecontent.cxx b/sc/source/filter/excel/xecontent.cxx
index 88e2018b16ab..3fdd33784ede 100644
--- a/sc/source/filter/excel/xecontent.cxx
+++ b/sc/source/filter/excel/xecontent.cxx
@@ -285,21 +285,21 @@ sal_uInt32 XclExpMergedcells::GetBaseXFId( const ScAddress& rPos ) const
void XclExpMergedcells::Save( XclExpStream& rStrm )
{
- if( GetBiff() == EXC_BIFF8 )
+ if( GetBiff() != EXC_BIFF8 )
+ return;
+
+ XclRangeList aXclRanges;
+ GetAddressConverter().ConvertRangeList( aXclRanges, maMergedRanges, true );
+ size_t nFirstRange = 0;
+ size_t nRemainingRanges = aXclRanges.size();
+ while( nRemainingRanges > 0 )
{
- XclRangeList aXclRanges;
- GetAddressConverter().ConvertRangeList( aXclRanges, maMergedRanges, true );
- size_t nFirstRange = 0;
- size_t nRemainingRanges = aXclRanges.size();
- while( nRemainingRanges > 0 )
- {
- size_t nRangeCount = ::std::min< size_t >( nRemainingRanges, EXC_MERGEDCELLS_MAXCOUNT );
- rStrm.StartRecord( EXC_ID_MERGEDCELLS, 2 + 8 * nRangeCount );
- aXclRanges.WriteSubList( rStrm, nFirstRange, nRangeCount );
- rStrm.EndRecord();
- nFirstRange += nRangeCount;
- nRemainingRanges -= nRangeCount;
- }
+ size_t nRangeCount = ::std::min< size_t >( nRemainingRanges, EXC_MERGEDCELLS_MAXCOUNT );
+ rStrm.StartRecord( EXC_ID_MERGEDCELLS, 2 + 8 * nRangeCount );
+ aXclRanges.WriteSubList( rStrm, nFirstRange, nRangeCount );
+ rStrm.EndRecord();
+ nFirstRange += nRangeCount;
+ nRemainingRanges -= nRangeCount;
}
}
@@ -1293,86 +1293,86 @@ XclExpCondfmt::XclExpCondfmt( const XclExpRoot& rRoot, const ScConditionalFormat
{
const ScRangeList& aScRanges = rCondFormat.GetRange();
GetAddressConverter().ConvertRangeList( maXclRanges, aScRanges, true );
- if( !maXclRanges.empty() )
- {
- std::vector<XclExpExtCondFormatData> aExtEntries;
- ScAddress aOrigin = aScRanges.Combine().aStart;
- for( size_t nIndex = 0, nCount = rCondFormat.size(); nIndex < nCount; ++nIndex )
- if( const ScFormatEntry* pFormatEntry = rCondFormat.GetEntry( nIndex ) )
+ if( maXclRanges.empty() )
+ return;
+
+ std::vector<XclExpExtCondFormatData> aExtEntries;
+ ScAddress aOrigin = aScRanges.Combine().aStart;
+ for( size_t nIndex = 0, nCount = rCondFormat.size(); nIndex < nCount; ++nIndex )
+ if( const ScFormatEntry* pFormatEntry = rCondFormat.GetEntry( nIndex ) )
+ {
+ if(pFormatEntry->GetType() == ScFormatEntry::Type::Condition)
+ maCFList.AppendNewRecord( new XclExpCF( GetRoot(), static_cast<const ScCondFormatEntry&>(*pFormatEntry), ++rIndex, aOrigin ) );
+ else if(pFormatEntry->GetType() == ScFormatEntry::Type::ExtCondition)
{
- if(pFormatEntry->GetType() == ScFormatEntry::Type::Condition)
- maCFList.AppendNewRecord( new XclExpCF( GetRoot(), static_cast<const ScCondFormatEntry&>(*pFormatEntry), ++rIndex, aOrigin ) );
- else if(pFormatEntry->GetType() == ScFormatEntry::Type::ExtCondition)
+ const ScCondFormatEntry& rFormat = static_cast<const ScCondFormatEntry&>(*pFormatEntry);
+ XclExpExtCondFormatData aExtEntry;
+ aExtEntry.nPriority = ++rIndex;
+ aExtEntry.aGUID = generateGUIDString();
+ aExtEntry.pEntry = &rFormat;
+ aExtEntries.push_back(aExtEntry);
+ }
+ else if(pFormatEntry->GetType() == ScFormatEntry::Type::Colorscale)
+ maCFList.AppendNewRecord( new XclExpColorScale( GetRoot(), static_cast<const ScColorScaleFormat&>(*pFormatEntry), ++rIndex ) );
+ else if(pFormatEntry->GetType() == ScFormatEntry::Type::Databar)
+ {
+ const ScDataBarFormat& rFormat = static_cast<const ScDataBarFormat&>(*pFormatEntry);
+ XclExpExtCondFormatData aExtEntry;
+ aExtEntry.nPriority = -1;
+ aExtEntry.aGUID = generateGUIDString();
+ aExtEntry.pEntry = &rFormat;
+ aExtEntries.push_back(aExtEntry);
+
+ maCFList.AppendNewRecord( new XclExpDataBar( GetRoot(), rFormat, ++rIndex, aExtEntry.aGUID));
+ }
+ else if(pFormatEntry->GetType() == ScFormatEntry::Type::Iconset)
+ {
+ // don't export iconSet entries that are not in OOXML
+ const ScIconSetFormat& rIconSet = static_cast<const ScIconSetFormat&>(*pFormatEntry);
+ bool bNeedsExt = false;
+ switch (rIconSet.GetIconSetData()->eIconSetType)
{
- const ScCondFormatEntry& rFormat = static_cast<const ScCondFormatEntry&>(*pFormatEntry);
- XclExpExtCondFormatData aExtEntry;
- aExtEntry.nPriority = ++rIndex;
- aExtEntry.aGUID = generateGUIDString();
- aExtEntry.pEntry = &rFormat;
- aExtEntries.push_back(aExtEntry);
+ case IconSet_3Smilies:
+ case IconSet_3ColorSmilies:
+ case IconSet_3Stars:
+ case IconSet_3Triangles:
+ case IconSet_5Boxes:
+ {
+ bNeedsExt = true;
+ }
+ break;
+ default:
+ break;
}
- else if(pFormatEntry->GetType() == ScFormatEntry::Type::Colorscale)
- maCFList.AppendNewRecord( new XclExpColorScale( GetRoot(), static_cast<const ScColorScaleFormat&>(*pFormatEntry), ++rIndex ) );
- else if(pFormatEntry->GetType() == ScFormatEntry::Type::Databar)
+
+ bNeedsExt |= rIconSet.GetIconSetData()->mbCustom;
+
+ if (bNeedsExt)
{
- const ScDataBarFormat& rFormat = static_cast<const ScDataBarFormat&>(*pFormatEntry);
XclExpExtCondFormatData aExtEntry;
- aExtEntry.nPriority = -1;
+ aExtEntry.nPriority = ++rIndex;
aExtEntry.aGUID = generateGUIDString();
- aExtEntry.pEntry = &rFormat;
+ aExtEntry.pEntry = &rIconSet;
aExtEntries.push_back(aExtEntry);
-
- maCFList.AppendNewRecord( new XclExpDataBar( GetRoot(), rFormat, ++rIndex, aExtEntry.aGUID));
}
- else if(pFormatEntry->GetType() == ScFormatEntry::Type::Iconset)
- {
- // don't export iconSet entries that are not in OOXML
- const ScIconSetFormat& rIconSet = static_cast<const ScIconSetFormat&>(*pFormatEntry);
- bool bNeedsExt = false;
- switch (rIconSet.GetIconSetData()->eIconSetType)
- {
- case IconSet_3Smilies:
- case IconSet_3ColorSmilies:
- case IconSet_3Stars:
- case IconSet_3Triangles:
- case IconSet_5Boxes:
- {
- bNeedsExt = true;
- }
- break;
- default:
- break;
- }
-
- bNeedsExt |= rIconSet.GetIconSetData()->mbCustom;
-
- if (bNeedsExt)
- {
- XclExpExtCondFormatData aExtEntry;
- aExtEntry.nPriority = ++rIndex;
- aExtEntry.aGUID = generateGUIDString();
- aExtEntry.pEntry = &rIconSet;
- aExtEntries.push_back(aExtEntry);
- }
- else
- maCFList.AppendNewRecord( new XclExpIconSet( GetRoot(), rIconSet, ++rIndex ) );
- }
- else if(pFormatEntry->GetType() == ScFormatEntry::Type::Date)
- maCFList.AppendNewRecord( new XclExpDateFormat( GetRoot(), static_cast<const ScCondDateFormatEntry&>(*pFormatEntry), ++rIndex ) );
+ else
+ maCFList.AppendNewRecord( new XclExpIconSet( GetRoot(), rIconSet, ++rIndex ) );
}
- aScRanges.Format( msSeqRef, ScRefFlags::VALID, GetDoc(), formula::FormulaGrammar::CONV_XL_OOX, ' ', true );
+ else if(pFormatEntry->GetType() == ScFormatEntry::Type::Date)
+ maCFList.AppendNewRecord( new XclExpDateFormat( GetRoot(), static_cast<const ScCondDateFormatEntry&>(*pFormatEntry), ++rIndex ) );
+ }
+ aScRanges.Format( msSeqRef, ScRefFlags::VALID, GetDoc(), formula::FormulaGrammar::CONV_XL_OOX, ' ', true );
- if(!aExtEntries.empty() && xExtLst)
+ if(!aExtEntries.empty() && xExtLst)
+ {
+ XclExpExt* pParent = xExtLst->GetItem( XclExpExtDataBarType );
+ if( !pParent )
{
- XclExpExt* pParent = xExtLst->GetItem( XclExpExtDataBarType );
- if( !pParent )
- {
- xExtLst->AddRecord( new XclExpExtCondFormat( *xExtLst ) );
- pParent = xExtLst->GetItem( XclExpExtDataBarType );
- }
- static_cast<XclExpExtCondFormat*>(xExtLst->GetItem( XclExpExtDataBarType ))->AddRecord(
- new XclExpExtConditionalFormatting( *pParent, aExtEntries, aScRanges));
+ xExtLst->AddRecord( new XclExpExtCondFormat( *xExtLst ) );
+ pParent = xExtLst->GetItem( XclExpExtDataBarType );
}
+ static_cast<XclExpExtCondFormat*>(xExtLst->GetItem( XclExpExtDataBarType ))->AddRecord(
+ new XclExpExtConditionalFormatting( *pParent, aExtEntries, aScRanges));
}
}
diff --git a/sc/source/filter/excel/xeescher.cxx b/sc/source/filter/excel/xeescher.cxx
index 0e78fbf251da..a2a69aea4e48 100644
--- a/sc/source/filter/excel/xeescher.cxx
+++ b/sc/source/filter/excel/xeescher.cxx
@@ -406,40 +406,40 @@ void XclExpImgData::Save( XclExpStream& rStrm )
aBmp.Convert( BmpConversion::N24Bit );
Bitmap::ScopedReadAccess pAccess(aBmp);
- if( pAccess )
- {
- sal_Int32 nWidth = ::std::min< sal_Int32 >( pAccess->Width(), 0xFFFF );
- sal_Int32 nHeight = ::std::min< sal_Int32 >( pAccess->Height(), 0xFFFF );
- if( (nWidth > 0) && (nHeight > 0) )
- {
- sal_uInt8 nPadding = static_cast< sal_uInt8 >( nWidth & 0x03 );
- sal_uInt32 nTmpSize = static_cast< sal_uInt32 >( (nWidth * 3 + nPadding) * nHeight + 12 );
+ if( !pAccess )
+ return;
- rStrm.StartRecord( mnRecId, nTmpSize + 4 );
+ sal_Int32 nWidth = ::std::min< sal_Int32 >( pAccess->Width(), 0xFFFF );
+ sal_Int32 nHeight = ::std::min< sal_Int32 >( pAccess->Height(), 0xFFFF );
+ if( (nWidth <= 0) || (nHeight <= 0) )
+ return;
- rStrm << EXC_IMGDATA_BMP // BMP format
- << EXC_IMGDATA_WIN // Windows
- << nTmpSize // size after _this_ field
- << sal_uInt32( 12 ) // BITMAPCOREHEADER size
- << static_cast< sal_uInt16 >( nWidth ) // width
- << static_cast< sal_uInt16 >( nHeight ) // height
- << sal_uInt16( 1 ) // planes
- << sal_uInt16( 24 ); // bits per pixel
+ sal_uInt8 nPadding = static_cast< sal_uInt8 >( nWidth & 0x03 );
+ sal_uInt32 nTmpSize = static_cast< sal_uInt32 >( (nWidth * 3 + nPadding) * nHeight + 12 );
- for( sal_Int32 nY = nHeight - 1; nY >= 0; --nY )
- {
- Scanline pScanline = pAccess->GetScanline( nY );
- for( sal_Int32 nX = 0; nX < nWidth; ++nX )
- {
- const BitmapColor& rBmpColor = pAccess->GetPixelFromData( pScanline, nX );
- rStrm << rBmpColor.GetBlue() << rBmpColor.GetGreen() << rBmpColor.GetRed();
- }
- rStrm.WriteZeroBytes( nPadding );
- }
+ rStrm.StartRecord( mnRecId, nTmpSize + 4 );
- rStrm.EndRecord();
+ rStrm << EXC_IMGDATA_BMP // BMP format
+ << EXC_IMGDATA_WIN // Windows
+ << nTmpSize // size after _this_ field
+ << sal_uInt32( 12 ) // BITMAPCOREHEADER size
+ << static_cast< sal_uInt16 >( nWidth ) // width
+ << static_cast< sal_uInt16 >( nHeight ) // height
+ << sal_uInt16( 1 ) // planes
+ << sal_uInt16( 24 ); // bits per pixel
+
+ for( sal_Int32 nY = nHeight - 1; nY >= 0; --nY )
+ {
+ Scanline pScanline = pAccess->GetScanline( nY );
+ for( sal_Int32 nX = 0; nX < nWidth; ++nX )
+ {
+ const BitmapColor& rBmpColor = pAccess->GetPixelFromData( pScanline, nX );
+ rStrm << rBmpColor.GetBlue() << rBmpColor.GetGreen() << rBmpColor.GetRed();
}
+ rStrm.WriteZeroBytes( nPadding );
}
+
+ rStrm.EndRecord();
}
void XclExpImgData::SaveXml( XclExpXmlStream& rStrm )
@@ -495,22 +495,22 @@ void XclExpControlHelper::ConvertSheetLinks( Reference< XShape > const & xShape
// *** source range *** ---------------------------------------------------
Reference< XListEntrySink > xEntrySink( xCtrlModel, UNO_QUERY );
- if( xEntrySink.is() )
+ if( !xEntrySink.is() )
+ return;
+
+ Reference< XServiceInfo > xServInfo( xEntrySink->getListEntrySource(), UNO_QUERY );
+ if( !(xServInfo.is() && xServInfo->supportsService( SC_SERVICENAME_LISTSOURCE )) )
+ return;
+
+ ScfPropertySet aSinkProp( xServInfo );
+ CellRangeAddress aApiRange;
+ if( aSinkProp.GetProperty( aApiRange, SC_UNONAME_CELLRANGE ) )
{
- Reference< XServiceInfo > xServInfo( xEntrySink->getListEntrySource(), UNO_QUERY );
- if( xServInfo.is() && xServInfo->supportsService( SC_SERVICENAME_LISTSOURCE ) )
- {
- ScfPropertySet aSinkProp( xServInfo );
- CellRangeAddress aApiRange;
- if( aSinkProp.GetProperty( aApiRange, SC_UNONAME_CELLRANGE ) )
- {
- ScRange aSrcRange;
- ScUnoConversion::FillScRange( aSrcRange, aApiRange );
- if( (aSrcRange.aStart.Tab() == aSrcRange.aEnd.Tab()) && GetTabInfo().IsExportTab( aSrcRange.aStart.Tab() ) )
- mxSrcRange = GetFormulaCompiler().CreateFormula( EXC_FMLATYPE_CONTROL, aSrcRange );
- mnEntryCount = static_cast< sal_uInt16 >( aSrcRange.aEnd.Col() - aSrcRange.aStart.Col() + 1 );
- }
- }
+ ScRange aSrcRange;
+ ScUnoConversion::FillScRange( aSrcRange, aApiRange );
+ if( (aSrcRange.aStart.Tab() == aSrcRange.aEnd.Tab()) && GetTabInfo().IsExportTab( aSrcRange.aStart.Tab() ) )
+ mxSrcRange = GetFormulaCompiler().CreateFormula( EXC_FMLATYPE_CONTROL, aSrcRange );
+ mnEntryCount = static_cast< sal_uInt16 >( aSrcRange.aEnd.Col() - aSrcRange.aStart.Col() + 1 );
}
}
diff --git a/sc/source/filter/excel/xeformula.cxx b/sc/source/filter/excel/xeformula.cxx
index addce9cefd95..ab942848c013 100644
--- a/sc/source/filter/excel/xeformula.cxx
+++ b/sc/source/filter/excel/xeformula.cxx
@@ -194,19 +194,19 @@ bool XclExpFuncData::IsExcelOnlyParam() const
void XclExpFuncData::IncParamInfoIdx()
{
- if( mpParamInfo )
- {
- // move pointer to next entry, if something explicit follows
- if( (o3tl::make_unsigned( mpParamInfo - mrFuncInfo.mpParamInfos + 1 ) < EXC_FUNCINFO_PARAMINFO_COUNT) && (mpParamInfo[ 1 ].meValid != EXC_PARAM_NONE) )
- ++mpParamInfo;
- // if last parameter type is 'Excel-only' or 'Calc-only', do not repeat it
- else if( IsExcelOnlyParam() || IsCalcOnlyParam() )
- mpParamInfo = nullptr;
- // points to last info, but parameter pairs expected, move to previous info
- else if( mrFuncInfo.IsParamPairs() )
- --mpParamInfo;
- // otherwise: repeat last parameter class
- }
+ if( !mpParamInfo )
+ return;
+
+ // move pointer to next entry, if something explicit follows
+ if( (o3tl::make_unsigned( mpParamInfo - mrFuncInfo.mpParamInfos + 1 ) < EXC_FUNCINFO_PARAMINFO_COUNT) && (mpParamInfo[ 1 ].meValid != EXC_PARAM_NONE) )
+ ++mpParamInfo;
+ // if last parameter type is 'Excel-only' or 'Calc-only', do not repeat it
+ else if( IsExcelOnlyParam() || IsCalcOnlyParam() )
+ mpParamInfo = nullptr;
+ // points to last info, but parameter pairs expected, move to previous info
+ else if( mrFuncInfo.IsParamPairs() )
+ --mpParamInfo;
+ // otherwise: repeat last parameter class
}
void XclExpFuncData::FinishParam( sal_uInt16 nTokPos )
@@ -617,26 +617,26 @@ void XclExpFmlaCompImpl::Init( XclFormulaType eType, const ScTokenArray& rScTokA
void XclExpFmlaCompImpl::RecalcTokenClasses()
{
+ if( !mxData->mbOk )
+ return;
+
+ mxData->mbOk = mxData->maOpPosStack.size() == 1;
+ OSL_ENSURE( mxData->mbOk, "XclExpFmlaCompImpl::RecalcTokenClasses - position of root token expected on stack" );
if( mxData->mbOk )
{
- mxData->mbOk = mxData->maOpPosStack.size() == 1;
- OSL_ENSURE( mxData->mbOk, "XclExpFmlaCompImpl::RecalcTokenClasses - position of root token expected on stack" );
- if( mxData->mbOk )
- {
- /* Cell and array formulas start with VAL conversion and VALTYPE
- parameter type, defined names start with ARR conversion and
- REFTYPE parameter type for the root token. */
- bool bNameFmla = mxData->mrCfg.meClassType == EXC_CLASSTYPE_NAME;
- XclFuncParamConv eParamConv = bNameFmla ? EXC_PARAMCONV_ARR : EXC_PARAMCONV_VAL;
- XclExpClassConv eClassConv = bNameFmla ? EXC_CLASSCONV_ARR : EXC_CLASSCONV_VAL;
- XclExpTokenConvInfo aConvInfo = { PopOperandPos(), eParamConv, !bNameFmla };
- RecalcTokenClass( aConvInfo, eParamConv, eClassConv, bNameFmla );
- }
-
- // clear operand vectors (calls to the expensive InsertZeros() may follow)
- mxData->maOpListVec.clear();
- mxData->maOpPosStack.clear();
+ /* Cell and array formulas start with VAL conversion and VALTYPE
+ parameter type, defined names start with ARR conversion and
+ REFTYPE parameter type for the root token. */
+ bool bNameFmla = mxData->mrCfg.meClassType == EXC_CLASSTYPE_NAME;
+ XclFuncParamConv eParamConv = bNameFmla ? EXC_PARAMCONV_ARR : EXC_PARAMCONV_VAL;
+ XclExpClassConv eClassConv = bNameFmla ? EXC_CLASSCONV_ARR : EXC_CLASSCONV_VAL;
+ XclExpTokenConvInfo aConvInfo = { PopOperandPos(), eParamConv, !bNameFmla };
+ RecalcTokenClass( aConvInfo, eParamConv, eClassConv, bNameFmla );
}
+
+ // clear operand vectors (calls to the expensive InsertZeros() may follow)
+ mxData->maOpListVec.clear();
+ mxData->maOpPosStack.clear();
}
void XclExpFmlaCompImpl::RecalcTokenClass( const XclExpTokenConvInfo& rConvInfo,
@@ -1434,23 +1434,23 @@ void XclExpFmlaCompImpl::ProcessFunction( const XclExpScToken& rTokData )
void XclExpFmlaCompImpl::PrepareFunction( const XclExpFuncData& rFuncData )
{
// For OOXML these are not rewritten anymore.
- if (GetOutput() != EXC_OUTPUT_XML_2007)
+ if (GetOutput() == EXC_OUTPUT_XML_2007)
+ return;
+
+ switch( rFuncData.GetOpCode() )
{
- switch( rFuncData.GetOpCode() )
- {
- case ocCosecant: // simulate CSC(x) by (1/SIN(x))
- case ocSecant: // simulate SEC(x) by (1/COS(x))
- case ocCot: // simulate COT(x) by (1/TAN(x))
- case ocCosecantHyp: // simulate CSCH(x) by (1/SINH(x))
- case ocSecantHyp: // simulate SECH(x) by (1/COSH(x))
- case ocCotHyp: // simulate COTH(x) by (1/TANH(x))
- AppendIntToken( 1 );
- break;
- case ocArcCot: // simulate ACOT(x) by (PI/2-ATAN(x))
- AppendNumToken( F_PI2 );
- break;
- default:;
- }
+ case ocCosecant: // simulate CSC(x) by (1/SIN(x))
+ case ocSecant: // simulate SEC(x) by (1/COS(x))
+ case ocCot: // simulate COT(x) by (1/TAN(x))
+ case ocCosecantHyp: // simulate CSCH(x) by (1/SINH(x))
+ case ocSecantHyp: // simulate SECH(x) by (1/COSH(x))
+ case ocCotHyp: // simulate COTH(x) by (1/TANH(x))
+ AppendIntToken( 1 );
+ break;
+ case ocArcCot: // simulate ACOT(x) by (PI/2-ATAN(x))
+ AppendNumToken( F_PI2 );
+ break;
+ default:;
}
}
diff --git a/sc/source/filter/excel/xelink.cxx b/sc/source/filter/excel/xelink.cxx
index 519ceec9a8ff..52ca00f0f465 100644
--- a/sc/source/filter/excel/xelink.cxx
+++ b/sc/source/filter/excel/xelink.cxx
@@ -2290,21 +2290,21 @@ sal_uInt16 XclExpLinkManagerImpl5::AppendInternal( XclExpExtSheetRef const & xEx
void XclExpLinkManagerImpl5::CreateInternal()
{
- if( maIntTabMap.empty() )
+ if( !maIntTabMap.empty() )
+ return;
+
+ // create EXTERNSHEET records for all internal exported sheets
+ XclExpTabInfo& rTabInfo = GetTabInfo();
+ for( SCTAB nScTab = 0, nScCnt = rTabInfo.GetScTabCount(); nScTab < nScCnt; ++nScTab )
{
- // create EXTERNSHEET records for all internal exported sheets
- XclExpTabInfo& rTabInfo = GetTabInfo();
- for( SCTAB nScTab = 0, nScCnt = rTabInfo.GetScTabCount(); nScTab < nScCnt; ++nScTab )
+ if( rTabInfo.IsExportTab( nScTab ) )
{
- if( rTabInfo.IsExportTab( nScTab ) )
- {
- XclExpExtSheetRef xRec;
- if( nScTab == GetCurrScTab() )
- xRec = new XclExpExternSheet( GetRoot(), EXC_EXTSH_OWNTAB );
- else
- xRec = new XclExpExternSheet( GetRoot(), rTabInfo.GetScTabName( nScTab ) );
- maIntTabMap[ nScTab ] = AppendInternal( xRec );
- }
+ XclExpExtSheetRef xRec;
+ if( nScTab == GetCurrScTab() )
+ xRec = new XclExpExternSheet( GetRoot(), EXC_EXTSH_OWNTAB );
+ else
+ xRec = new XclExpExternSheet( GetRoot(), rTabInfo.GetScTabName( nScTab ) );
+ maIntTabMap[ nScTab ] = AppendInternal( xRec );
}
}
}
@@ -2393,20 +2393,20 @@ void XclExpLinkManagerImpl8::StoreCellRange( const ScSingleRefData& rRef1, const
{
ScAddress aAbs1 = rRef1.toAbs(&GetRoot().GetDoc(), rPos);
ScAddress aAbs2 = rRef2.toAbs(&GetRoot().GetDoc(), rPos);
- if (!rRef1.IsDeleted() && !rRef2.IsDeleted() && (aAbs1.Tab() >= 0) && (aAbs2.Tab() >= 0))
+ if (!(!rRef1.IsDeleted() && !rRef2.IsDeleted() && (aAbs1.Tab() >= 0) && (aAbs2.Tab() >= 0)))
+ return;
+
+ const XclExpTabInfo& rTabInfo = GetTabInfo();
+ SCTAB nFirstScTab = aAbs1.Tab();
+ SCTAB nLastScTab = aAbs2.Tab();
+ ScRange aRange(aAbs1.Col(), aAbs1.Row(), 0, aAbs2.Col(), aAbs2.Row(), 0);
+ for (SCTAB nScTab = nFirstScTab; nScTab <= nLastScTab; ++nScTab)
{
- const XclExpTabInfo& rTabInfo = GetTabInfo();
- SCTAB nFirstScTab = aAbs1.Tab();
- SCTAB nLastScTab = aAbs2.Tab();
- ScRange aRange(aAbs1.Col(), aAbs1.Row(), 0, aAbs2.Col(), aAbs2.Row(), 0);
- for (SCTAB nScTab = nFirstScTab; nScTab <= nLastScTab; ++nScTab)
+ if( rTabInfo.IsExternalTab( nScTab ) )
{
- if( rTabInfo.IsExternalTab( nScTab ) )
- {
- aRange.aStart.SetTab( nScTab );
- aRange.aEnd.SetTab( nScTab );
- maSBBuffer.StoreCellRange( aRange );
- }
+ aRange.aStart.SetTab( nScTab );
+ aRange.aEnd.SetTab( nScTab );
+ maSBBuffer.StoreCellRange( aRange );
}
}
}
@@ -2472,20 +2472,20 @@ bool XclExpLinkManagerImpl8::InsertExtName( sal_uInt16& rnExtSheet, sal_uInt16&
void XclExpLinkManagerImpl8::Save( XclExpStream& rStrm )
{
- if( !maXtiVec.empty() )
- {
- // SUPBOOKs, XCTs, CRNs, EXTERNNAMEs
- maSBBuffer.Save( rStrm );
+ if( maXtiVec.empty() )
+ return;
- // EXTERNSHEET
- sal_uInt16 nCount = ulimit_cast< sal_uInt16 >( maXtiVec.size() );
- rStrm.StartRecord( EXC_ID_EXTERNSHEET, 2 + 6 * nCount );
- rStrm << nCount;
- rStrm.SetSliceSize( 6 );
- for( const auto& rXti : maXtiVec )
- rXti.Save( rStrm );
- rStrm.EndRecord();
- }
+ // SUPBOOKs, XCTs, CRNs, EXTERNNAMEs
+ maSBBuffer.Save( rStrm );
+
+ // EXTERNSHEET
+ sal_uInt16 nCount = ulimit_cast< sal_uInt16 >( maXtiVec.size() );
+ rStrm.StartRecord( EXC_ID_EXTERNSHEET, 2 + 6 * nCount );
+ rStrm << nCount;
+ rStrm.SetSliceSize( 6 );
+ for( const auto& rXti : maXtiVec )
+ rXti.Save( rStrm );
+ rStrm.EndRecord();
}
void XclExpLinkManagerImpl8::SaveXml( XclExpXmlStream& rStrm )
diff --git a/sc/source/filter/excel/xename.cxx b/sc/source/filter/excel/xename.cxx
index 155968d4bac0..5d32147ecb23 100644
--- a/sc/source/filter/excel/xename.cxx
+++ b/sc/source/filter/excel/xename.cxx
@@ -242,26 +242,26 @@ void XclExpName::SetTokenArray( const XclTokenArrayRef& xTokArr )
void XclExpName::SetLocalTab( SCTAB nScTab )
{
OSL_ENSURE( GetTabInfo().IsExportTab( nScTab ), "XclExpName::SetLocalTab - invalid sheet index" );
- if( GetTabInfo().IsExportTab( nScTab ) )
- {
- mnScTab = nScTab;
- GetGlobalLinkManager().FindExtSheet( mnExtSheet, mnXclTab, nScTab );
+ if( !GetTabInfo().IsExportTab( nScTab ) )
+ return;
- // special handling for NAME record
- switch( GetBiff() )
- {
- case EXC_BIFF5: // EXTERNSHEET index is positive in NAME record
- mnExtSheet = ~mnExtSheet + 1;
- break;
- case EXC_BIFF8: // EXTERNSHEET index not used, but must be created in link table
- mnExtSheet = 0;
- break;
- default: DBG_ERROR_BIFF();
- }
+ mnScTab = nScTab;
+ GetGlobalLinkManager().FindExtSheet( mnExtSheet, mnXclTab, nScTab );
- // Excel sheet index is 1-based
- ++mnXclTab;
+ // special handling for NAME record
+ switch( GetBiff() )
+ {
+ case EXC_BIFF5: // EXTERNSHEET index is positive in NAME record
+ mnExtSheet = ~mnExtSheet + 1;
+ break;
+ case EXC_BIFF8: // EXTERNSHEET index not used, but must be created in link table
+ mnExtSheet = 0;
+ break;
+ default: DBG_ERROR_BIFF();
}
+
+ // Excel sheet index is 1-based
+ ++mnXclTab;
}
void XclExpName::SetHidden( bool bHidden )
diff --git a/sc/source/filter/excel/xepivot.cxx b/sc/source/filter/excel/xepivot.cxx
index f9bd6c09b511..8200d281e501 100644
--- a/sc/source/filter/excel/xepivot.cxx
+++ b/sc/source/filter/excel/xepivot.cxx
@@ -508,34 +508,35 @@ sal_uInt16 XclExpPCField::InsertGroupItem( XclExpPCItem* pNewItem )
void XclExpPCField::InsertNumDateGroupItems( const ScDPObject& rDPObj, const ScDPNumGroupInfo& rNumInfo, sal_Int32 nDatePart )
{
OSL_ENSURE( rDPObj.GetSheetDesc(), "XclExpPCField::InsertNumDateGroupItems - cannot generate element list" );
- if( const ScSheetSourceDesc* pSrcDesc = rDPObj.GetSheetDesc() )
+ const ScSheetSourceDesc* pSrcDesc = rDPObj.GetSheetDesc();
+ if(!pSrcDesc)
+ return;
+
+ // get the string collection with original source elements
+ const ScDPSaveData* pSaveData = rDPObj.GetSaveData();
+ const ScDPDimensionSaveData* pDimData = nullptr;
+ if (pSaveData)
+ pDimData = pSaveData->GetExistingDimensionData();
+
+ const ScDPCache* pCache = pSrcDesc->CreateCache(pDimData);
+ if (!pCache)
+ return;
+
+ ScSheetDPData aDPData(&GetDoc(), *pSrcDesc, *pCache);
+ long nDim = GetFieldIndex();
+ // get the string collection with generated grouping elements
+ ScDPNumGroupDimension aTmpDim( rNumInfo );
+ if( nDatePart != 0 )
+ aTmpDim.SetDateDimension();
+ const std::vector<SCROW>& aMemberIds = aTmpDim.GetNumEntries(
+ static_cast<SCCOL>(nDim), pCache);
+ for (SCROW nMemberId : aMemberIds)
{
- // get the string collection with original source elements
- const ScDPSaveData* pSaveData = rDPObj.GetSaveData();
- const ScDPDimensionSaveData* pDimData = nullptr;
- if (pSaveData)
- pDimData = pSaveData->GetExistingDimensionData();
-
- const ScDPCache* pCache = pSrcDesc->CreateCache(pDimData);
- if (!pCache)
- return;
-
- ScSheetDPData aDPData(&GetDoc(), *pSrcDesc, *pCache);
- long nDim = GetFieldIndex();
- // get the string collection with generated grouping elements
- ScDPNumGroupDimension aTmpDim( rNumInfo );
- if( nDatePart != 0 )
- aTmpDim.SetDateDimension();
- const std::vector<SCROW>& aMemberIds = aTmpDim.GetNumEntries(
- static_cast<SCCOL>(nDim), pCache);
- for (SCROW nMemberId : aMemberIds)
+ const ScDPItemData* pData = aDPData.GetMemberById(nDim, nMemberId);
+ if ( pData )
{
- const ScDPItemData* pData = aDPData.GetMemberById(nDim, nMemberId);
- if ( pData )
- {
- OUString aStr = pCache->GetFormattedString(nDim, *pData, false);
- InsertGroupItem(new XclExpPCItem(aStr));
- }
+ OUString aStr = pCache->GetFormattedString(nDim, *pData, false);
+ InsertGroupItem(new XclExpPCItem(aStr));
}
}
}
@@ -617,59 +618,60 @@ XclExpPivotCache::XclExpPivotCache( const XclExpRoot& rRoot, const ScDPObject& r
mbValid( false )
{
// source from sheet only
- if( const ScSheetSourceDesc* pSrcDesc = rDPObj.GetSheetDesc() )
- {
- /* maOrigSrcRange: Range received from the DataPilot object.
- maExpSrcRange: Range written to the DCONREF record.
- maDocSrcRange: Range used to get source data from Calc document.
- This range may be shorter than maExpSrcRange to improve export
- performance (#i22541#). */
- maOrigSrcRange = maExpSrcRange = maDocSrcRange = pSrcDesc->GetSourceRange();
- maSrcRangeName = pSrcDesc->GetRangeName();
-
- // internal sheet data only
- SCTAB nScTab = maExpSrcRange.aStart.Tab();
- if( (nScTab == maExpSrcRange.aEnd.Tab()) && GetTabInfo().IsExportTab( nScTab ) )
- {
- // ValidateRange() restricts source range to valid Excel limits
- if( GetAddressConverter().ValidateRange( maExpSrcRange, true ) )
- {
- // #i22541# skip empty cell areas (performance)
- SCCOL nDocCol1, nDocCol2;
- SCROW nDocRow1, nDocRow2;
- GetDoc().GetDataStart( nScTab, nDocCol1, nDocRow1 );
- GetDoc().GetPrintArea( nScTab, nDocCol2, nDocRow2, false );
- SCCOL nSrcCol1 = maExpSrcRange.aStart.Col();
- SCROW nSrcRow1 = maExpSrcRange.aStart.Row();
- SCCOL nSrcCol2 = maExpSrcRange.aEnd.Col();
- SCROW nSrcRow2 = maExpSrcRange.aEnd.Row();
-
- // #i22541# do not store index list for too big ranges
- if( 2 * (nDocRow2 - nDocRow1) < (nSrcRow2 - nSrcRow1) )
- ::set_flag( maPCInfo.mnFlags, EXC_SXDB_SAVEDATA, false );
-
- // adjust row indexes, keep one row of empty area to surely have the empty cache item
- if( nSrcRow1 < nDocRow1 )
- nSrcRow1 = nDocRow1 - 1;
- if( nSrcRow2 > nDocRow2 )
- nSrcRow2 = nDocRow2 + 1;
-
- maDocSrcRange.aStart.SetCol( ::std::max( nDocCol1, nSrcCol1 ) );
- maDocSrcRange.aStart.SetRow( nSrcRow1 );
- maDocSrcRange.aEnd.SetCol( ::std::min( nDocCol2, nSrcCol2 ) );
- maDocSrcRange.aEnd.SetRow( nSrcRow2 );
-
- GetDoc().GetName( nScTab, maTabName );
- maPCInfo.mnSrcRecs = static_cast< sal_uInt32 >( maExpSrcRange.aEnd.Row() - maExpSrcRange.aStart.Row() );
- maPCInfo.mnStrmId = nListIdx + 1;
- maPCInfo.mnSrcType = EXC_SXDB_SRC_SHEET;
-
- AddFields( rDPObj );
-
- mbValid = true;
- }
- }
- }
+ const ScSheetSourceDesc* pSrcDesc = rDPObj.GetSheetDesc();
+ if(!pSrcDesc)
+ return;
+
+ /* maOrigSrcRange: Range received from the DataPilot object.
+ maExpSrcRange: Range written to the DCONREF record.
+ maDocSrcRange: Range used to get source data from Calc document.
+ This range may be shorter than maExpSrcRange to improve export
+ performance (#i22541#). */
+ maOrigSrcRange = maExpSrcRange = maDocSrcRange = pSrcDesc->GetSourceRange();
+ maSrcRangeName = pSrcDesc->GetRangeName();
+
+ // internal sheet data only
+ SCTAB nScTab = maExpSrcRange.aStart.Tab();
+ if( !((nScTab == maExpSrcRange.aEnd.Tab()) && GetTabInfo().IsExportTab( nScTab )) )
+ return;
+
+ // ValidateRange() restricts source range to valid Excel limits
+ if( !GetAddressConverter().ValidateRange( maExpSrcRange, true ) )
+ return;
+
+ // #i22541# skip empty cell areas (performance)
+ SCCOL nDocCol1, nDocCol2;
+ SCROW nDocRow1, nDocRow2;
+ GetDoc().GetDataStart( nScTab, nDocCol1, nDocRow1 );
+ GetDoc().GetPrintArea( nScTab, nDocCol2, nDocRow2, false );
+ SCCOL nSrcCol1 = maExpSrcRange.aStart.Col();
+ SCROW nSrcRow1 = maExpSrcRange.aStart.Row();
+ SCCOL nSrcCol2 = maExpSrcRange.aEnd.Col();
+ SCROW nSrcRow2 = maExpSrcRange.aEnd.Row();
+
+ // #i22541# do not store index list for too big ranges
+ if( 2 * (nDocRow2 - nDocRow1) < (nSrcRow2 - nSrcRow1) )
+ ::set_flag( maPCInfo.mnFlags, EXC_SXDB_SAVEDATA, false );
+
+ // adjust row indexes, keep one row of empty area to surely have the empty cache item
+ if( nSrcRow1 < nDocRow1 )
+ nSrcRow1 = nDocRow1 - 1;
+ if( nSrcRow2 > nDocRow2 )
+ nSrcRow2 = nDocRow2 + 1;
+
+ maDocSrcRange.aStart.SetCol( ::std::max( nDocCol1, nSrcCol1 ) );
+ maDocSrcRange.aStart.SetRow( nSrcRow1 );
+ maDocSrcRange.aEnd.SetCol( ::std::min( nDocCol2, nSrcCol2 ) );
+ maDocSrcRange.aEnd.SetRow( nSrcRow2 );
+
+ GetDoc().GetName( nScTab, maTabName );
+ maPCInfo.mnSrcRecs = static_cast< sal_uInt32 >( maExpSrcRange.aEnd.Row() - maExpSrcRange.aStart.Row() );
+ maPCInfo.mnStrmId = nListIdx + 1;
+ maPCInfo.mnSrcType = EXC_SXDB_SRC_SHEET;
+
+ AddFields( rDPObj );
+
+ mbValid = true;
}
bool XclExpPivotCache::HasItemIndexList() const
@@ -751,32 +753,33 @@ void XclExpPivotCache::AddStdFields( const ScDPObject& rDPObj )
void XclExpPivotCache::AddGroupFields( const ScDPObject& rDPObj )
{
- if( const ScDPSaveData* pSaveData = rDPObj.GetSaveData() )
+ const ScDPSaveData* pSaveData = rDPObj.GetSaveData();
+ if(!pSaveData)
+ return;
+ const ScDPDimensionSaveData* pSaveDimData = pSaveData->GetExistingDimensionData();
+ if( !pSaveDimData )
+ return;
+
+ // loop over all existing standard fields to find their group fields
+ for( sal_uInt16 nFieldIdx = 0; nFieldIdx < maPCInfo.mnStdFields; ++nFieldIdx )
{
- if( const ScDPDimensionSaveData* pSaveDimData = pSaveData->GetExistingDimensionData() )
+ if( XclExpPCField* pCurrStdField = maFieldList.GetRecord( nFieldIdx ) )
{
- // loop over all existing standard fields to find their group fields
- for( sal_uInt16 nFieldIdx = 0; nFieldIdx < maPCInfo.mnStdFields; ++nFieldIdx )
+ const ScDPSaveGroupDimension* pGroupDim = pSaveDimData->GetGroupDimForBase( pCurrStdField->GetFieldName() );
+ XclExpPCField* pLastGroupField = pCurrStdField;
+ while( pGroupDim )
{
- if( XclExpPCField* pCurrStdField = maFieldList.GetRecord( nFieldIdx ) )
- {
- const ScDPSaveGroupDimension* pGroupDim = pSaveDimData->GetGroupDimForBase( pCurrStdField->GetFieldName() );
- XclExpPCField* pLastGroupField = pCurrStdField;
- while( pGroupDim )
- {
- // insert the new grouping field
- XclExpPCFieldRef xNewGroupField = new XclExpPCField(
- GetRoot(), GetFieldCount(), rDPObj, *pGroupDim, *pCurrStdField );
- maFieldList.AppendRecord( xNewGroupField );
-
- // register new grouping field at current grouping field, building a chain
- pLastGroupField->SetGroupChildField( *xNewGroupField );
-
- // next grouping dimension
- pGroupDim = pSaveDimData->GetGroupDimForBase( pGroupDim->GetGroupDimName() );
- pLastGroupField = xNewGroupField.get();
- }
- }
+ // insert the new grouping field
+ XclExpPCFieldRef xNewGroupField = new XclExpPCField(
+ GetRoot(), GetFieldCount(), rDPObj, *pGroupDim, *pCurrStdField );
+ maFieldList.AppendRecord( xNewGroupField );
+
+ // register new grouping field at current grouping field, building a chain
+ pLastGroupField->SetGroupChildField( *xNewGroupField );
+
+ // next grouping dimension
+ pGroupDim = pSaveDimData->GetGroupDimForBase( pGroupDim->GetGroupDimName() );
+ pLastGroupField = xNewGroupField.get();
}
}
}
@@ -807,20 +810,20 @@ void XclExpPivotCache::WriteCacheStream()
{
tools::SvRef<SotStorage> xSvStrg = OpenStorage( EXC_STORAGE_PTCACHE );
tools::SvRef<SotStorageStream> xSvStrm = OpenStream( xSvStrg, ScfTools::GetHexStr( maPCInfo.mnStrmId ) );
- if( xSvStrm.is() )
- {
- XclExpStream aStrm( *xSvStrm, GetRoot() );
- // SXDB
- WriteSxdb( aStrm );
- // SXDBEX
- WriteSxdbex( aStrm );
- // field list (SXFIELD and items)
- maFieldList.Save( aStrm );
- // index table (list of SXINDEXLIST)
- WriteSxindexlistList( aStrm );
- // EOF
- XclExpEmptyRecord( EXC_ID_EOF ).Save( aStrm );
- }
+ if( !xSvStrm.is() )
+ return;
+
+ XclExpStream aStrm( *xSvStrm, GetRoot() );
+ // SXDB
+ WriteSxdb( aStrm );
+ // SXDBEX
+ WriteSxdbex( aStrm );
+ // field list (SXFIELD and items)
+ maFieldList.Save( aStrm );
+ // index table (list of SXINDEXLIST)
+ WriteSxindexlistList( aStrm );
+ // EOF
+ XclExpEmptyRecord( EXC_ID_EOF ).Save( aStrm );
}
void XclExpPivotCache::WriteSxdb( XclExpStream& rStrm ) const
@@ -840,20 +843,20 @@ void XclExpPivotCache::WriteSxdbex( XclExpStream& rStrm )
void XclExpPivotCache::WriteSxindexlistList( XclExpStream& rStrm ) const
{
- if( HasItemIndexList() )
+ if( !HasItemIndexList() )
+ return;
+
+ std::size_t nRecSize = 0;
+ size_t nPos, nSize = maFieldList.GetSize();
+ for( nPos = 0; nPos < nSize; ++nPos )
+ nRecSize += maFieldList.GetRecord( nPos )->GetIndexSize();
+
+ for( sal_uInt32 nSrcRow = 0; nSrcRow < maPCInfo.mnSrcRecs; ++nSrcRow )
{
- std::size_t nRecSize = 0;
- size_t nPos, nSize = maFieldList.GetSize();
+ rStrm.StartRecord( EXC_ID_SXINDEXLIST, nRecSize );
for( nPos = 0; nPos < nSize; ++nPos )
- nRecSize += maFieldList.GetRecord( nPos )->GetIndexSize();
-
- for( sal_uInt32 nSrcRow = 0; nSrcRow < maPCInfo.mnSrcRecs; ++nSrcRow )
- {
- rStrm.StartRecord( EXC_ID_SXINDEXLIST, nRecSize );
- for( nPos = 0; nPos < nSize; ++nPos )
- maFieldList.GetRecord( nPos )->WriteIndex( rStrm, nSrcRow );
- rStrm.EndRecord();
- }
+ maFieldList.GetRecord( nPos )->WriteIndex( rStrm, nSrcRow );
+ rStrm.EndRecord();
}
}
@@ -1179,51 +1182,52 @@ XclExpPivotTable::XclExpPivotTable( const XclExpRoot& rRoot, const ScDPObject& r
mbFilterBtn( false )
{
const ScRange& rOutScRange = rDPObj.GetOutRange();
- if( GetAddressConverter().ConvertRange( maPTInfo.maOutXclRange, rOutScRange, true ) )
- {
- // DataPilot properties -----------------------------------------------
+ if( !GetAddressConverter().ConvertRange( maPTInfo.maOutXclRange, rOutScRange, true ) )
+ return;
- // pivot table properties from DP object
- mnOutScTab = rOutScRange.aStart.Tab();
- maPTInfo.maTableName = rDPObj.GetName();
- maPTInfo.mnCacheIdx = mrPCache.GetCacheIndex();
+ // DataPilot properties -----------------------------------------------
- maPTViewEx9Info.Init( rDPObj );
+ // pivot table properties from DP object
+ mnOutScTab = rOutScRange.aStart.Tab();
+ maPTInfo.maTableName = rDPObj.GetName();
+ maPTInfo.mnCacheIdx = mrPCache.GetCacheIndex();
- if( const ScDPSaveData* pSaveData = rDPObj.GetSaveData() )
- {
- // additional properties from ScDPSaveData
- SetPropertiesFromDP( *pSaveData );
+ maPTViewEx9Info.Init( rDPObj );
- // loop over all dimensions ---------------------------------------
+ const ScDPSaveData* pSaveData = rDPObj.GetSaveData();
+ if( !pSaveData )
+ return;
- /* 1) Default-construct all pivot table fields for all pivot cache fields. */
- for( sal_uInt16 nFieldIdx = 0, nFieldCount = mrPCache.GetFieldCount(); nFieldIdx < nFieldCount; ++nFieldIdx )
- maFieldList.AppendNewRecord( new XclExpPTField( *this, nFieldIdx ) );
+ // additional properties from ScDPSaveData
+ SetPropertiesFromDP( *pSaveData );
- const ScDPSaveData::DimsType& rDimList = pSaveData->GetDimensions();
+ // loop over all dimensions ---------------------------------------
- /* 2) First process all data dimensions, they are needed for extended
- settings of row/column/page fields (sorting/auto show). */
- for (auto const& iter : rDimList)
- {
- if (iter->GetOrientation() == DataPilotFieldOrientation_DATA)
- SetDataFieldPropertiesFromDim(*iter);
- }
+ /* 1) Default-construct all pivot table fields for all pivot cache fields. */
+ for( sal_uInt16 nFieldIdx = 0, nFieldCount = mrPCache.GetFieldCount(); nFieldIdx < nFieldCount; ++nFieldIdx )
+ maFieldList.AppendNewRecord( new XclExpPTField( *this, nFieldIdx ) );
- /* 3) Row/column/page/hidden fields. */
- for (auto const& iter : rDimList)
- {
- if (iter->GetOrientation() != DataPilotFieldOrientation_DATA)
- SetFieldPropertiesFromDim(*iter);
- }
+ const ScDPSaveData::DimsType& rDimList = pSaveData->GetDimensions();
- // Finalize -------------------------------------------------------
+ /* 2) First process all data dimensions, they are needed for extended
+ settings of row/column/page fields (sorting/auto show). */
+ for (auto const& iter : rDimList)
+ {
+ if (iter->GetOrientation() == DataPilotFieldOrientation_DATA)
+ SetDataFieldPropertiesFromDim(*iter);
+ }
- Finalize();
- mbValid = true;
- }
+ /* 3) Row/column/page/hidden fields. */
+ for (auto const& iter : rDimList)
+ {
+ if (iter->GetOrientation() != DataPilotFieldOrientation_DATA)
+ SetFieldPropertiesFromDim(*iter);
}
+
+ // Finalize -------------------------------------------------------
+
+ Finalize();
+ mbValid = true;
}
const XclExpPCField* XclExpPivotTable::GetCacheField( sal_uInt16 nCacheIdx ) const
@@ -1255,29 +1259,29 @@ sal_uInt16 XclExpPivotTable::GetDataFieldIndex( const OUString& rName, sal_uInt1
void XclExpPivotTable::Save( XclExpStream& rStrm )
{
- if( mbValid )
- {
- // SXVIEW
- WriteSxview( rStrm );
- // pivot table fields (SXVD, SXVDEX, and item records)
- maFieldList.Save( rStrm );
- // SXIVD records for row and column fields
- WriteSxivd( rStrm, maRowFields );
- WriteSxivd( rStrm, maColFields );
- // SXPI
- WriteSxpi( rStrm );
- // list of SXDI records containing data field info
- WriteSxdiList( rStrm );
- // SXLI records
- WriteSxli( rStrm, maPTInfo.mnDataRows, maPTInfo.mnRowFields );
- WriteSxli( rStrm, maPTInfo.mnDataCols, maPTInfo.mnColFields );
- // SXEX
- WriteSxex( rStrm );
- // QSISXTAG
- WriteQsiSxTag( rStrm );
- // SXVIEWEX9
- WriteSxViewEx9( rStrm );
- }
+ if( !mbValid )
+ return;
+
+ // SXVIEW
+ WriteSxview( rStrm );
+ // pivot table fields (SXVD, SXVDEX, and item records)
+ maFieldList.Save( rStrm );
+ // SXIVD records for row and column fields
+ WriteSxivd( rStrm, maRowFields );
+ WriteSxivd( rStrm, maColFields );
+ // SXPI
+ WriteSxpi( rStrm );
+ // list of SXDI records containing data field info
+ WriteSxdiList( rStrm );
+ // SXLI records
+ WriteSxli( rStrm, maPTInfo.mnDataRows, maPTInfo.mnRowFields );
+ WriteSxli( rStrm, maPTInfo.mnDataCols, maPTInfo.mnColFields );
+ // SXEX
+ WriteSxex( rStrm );
+ // QSISXTAG
+ WriteQsiSxTag( rStrm );
+ // SXVIEWEX9
+ WriteSxViewEx9( rStrm );
}
XclExpPTField* XclExpPivotTable::GetFieldAcc( const OUString& rName )
@@ -1318,38 +1322,42 @@ void XclExpPivotTable::SetPropertiesFromDP( const ScDPSaveData& rSaveData )
void XclExpPivotTable::SetFieldPropertiesFromDim( const ScDPSaveDimension& rSaveDim )
{
- if( XclExpPTField* pField = GetFieldAcc( rSaveDim ) )
- {
- // field properties
- pField->SetPropertiesFromDim( rSaveDim );
+ XclExpPTField* pField = GetFieldAcc( rSaveDim );
+ if(!pField)
+ return;
- // update the corresponding field position list
- DataPilotFieldOrientation eOrient = rSaveDim.GetOrientation();
- sal_uInt16 nFieldIdx = pField->GetFieldIndex();
- bool bDataLayout = nFieldIdx == EXC_SXIVD_DATA;
- bool bMultiData = maDataFields.size() > 1;
+ // field properties
+ pField->SetPropertiesFromDim( rSaveDim );
- if( !bDataLayout || bMultiData ) switch( eOrient )
- {
- case DataPilotFieldOrientation_ROW:
- maRowFields.push_back( nFieldIdx );
- if( bDataLayout )
- maPTInfo.mnDataAxis = EXC_SXVD_AXIS_ROW;
- break;
- case DataPilotFieldOrientation_COLUMN:
- maColFields.push_back( nFieldIdx );
- if( bDataLayout )
- maPTInfo.mnDataAxis = EXC_SXVD_AXIS_COL;
- break;
- case DataPilotFieldOrientation_PAGE:
- maPageFields.push_back( nFieldIdx );
- OSL_ENSURE( !bDataLayout, "XclExpPivotTable::SetFieldPropertiesFromDim - wrong orientation for data fields" );
- break;
- case DataPilotFieldOrientation_DATA:
- OSL_FAIL( "XclExpPivotTable::SetFieldPropertiesFromDim - called for data field" );
- break;
- default:;
- }
+ // update the corresponding field position list
+ DataPilotFieldOrientation eOrient = rSaveDim.GetOrientation();
+ sal_uInt16 nFieldIdx = pField->GetFieldIndex();
+ bool bDataLayout = nFieldIdx == EXC_SXIVD_DATA;
+ bool bMultiData = maDataFields.size() > 1;
+
+ if( !(!bDataLayout || bMultiData) )
+ return;
+
+ switch( eOrient )
+ {
+ case DataPilotFieldOrientation_ROW:
+ maRowFields.push_back( nFieldIdx );
+ if( bDataLayout )
+ maPTInfo.mnDataAxis = EXC_SXVD_AXIS_ROW;
+ break;
+ case DataPilotFieldOrientation_COLUMN:
+ maColFields.push_back( nFieldIdx );
+ if( bDataLayout )
+ maPTInfo.mnDataAxis = EXC_SXVD_AXIS_COL;
+ break;
+ case DataPilotFieldOrientation_PAGE:
+ maPageFields.push_back( nFieldIdx );
+ OSL_ENSURE( !bDataLayout, "XclExpPivotTable::SetFieldPropertiesFromDim - wrong orientation for data fields" );
+ break;
+ case DataPilotFieldOrientation_DATA:
+ OSL_FAIL( "XclExpPivotTable::SetFieldPropertiesFromDim - called for data field" );
+ break;
+ default:;
}
}
@@ -1486,26 +1494,26 @@ void XclExpPivotTable::WriteSxdiList( XclExpStream& rStrm ) const
void XclExpPivotTable::WriteSxli( XclExpStream& rStrm, sal_uInt16 nLineCount, sal_uInt16 nIndexCount )
{
- if( nLineCount > 0 )
- {
- std::size_t nLineSize = 8 + 2 * nIndexCount;
- rStrm.StartRecord( EXC_ID_SXLI, nLineSize * nLineCount );
+ if( nLineCount <= 0 )
+ return;
+
+ std::size_t nLineSize = 8 + 2 * nIndexCount;
+ rStrm.StartRecord( EXC_ID_SXLI, nLineSize * nLineCount );
- /* Excel expects the records to be filled completely, do not
- set a segment size... */
+ /* Excel expects the records to be filled completely, do not
+ set a segment size... */
// rStrm.SetSliceSize( nLineSize );
- for( sal_uInt16 nLine = 0; nLine < nLineCount; ++nLine )
- {
- // Excel XP needs a partly initialized SXLI record
- rStrm << sal_uInt16( 0 ) // number of equal index entries
- << EXC_SXVI_TYPE_DATA
- << nIndexCount
- << EXC_SXLI_DEFAULTFLAGS;
- rStrm.WriteZeroBytes( 2 * nIndexCount );
- }
- rStrm.EndRecord();
+ for( sal_uInt16 nLine = 0; nLine < nLineCount; ++nLine )
+ {
+ // Excel XP needs a partly initialized SXLI record
+ rStrm << sal_uInt16( 0 ) // number of equal index entries
+ << EXC_SXVI_TYPE_DATA
+ << nIndexCount
+ << EXC_SXLI_DEFAULTFLAGS;
+ rStrm.WriteZeroBytes( 2 * nIndexCount );
}
+ rStrm.EndRecord();
}
void XclExpPivotTable::WriteSxex( XclExpStream& rStrm ) const
diff --git a/sc/source/filter/excel/xepivotxml.cxx b/sc/source/filter/excel/xepivotxml.cxx
index 3942a519eb97..c0e840cb9877 100644
--- a/sc/source/filter/excel/xepivotxml.cxx
+++ b/sc/source/filter/excel/xepivotxml.cxx
@@ -712,33 +712,34 @@ sal_Int32 GetSubtotalAttrToken(ScGeneralFunction eFunc)
// An item is expected to contain sequences of css::xml::FastAttribute and css::xml::Attribute
void WriteGrabBagItemToStream(XclExpXmlStream& rStrm, sal_Int32 tokenId, const css::uno::Any& rItem)
{
- if (css::uno::Sequence<css::uno::Any> aSeqs; rItem >>= aSeqs)
- {
- auto& pStrm = rStrm.GetCurrentStream();
- pStrm->write("<")->writeId(tokenId);
+ css::uno::Sequence<css::uno::Any> aSeqs;
+ if(!(rItem >>= aSeqs))
+ return;
+
+ auto& pStrm = rStrm.GetCurrentStream();
+ pStrm->write("<")->writeId(tokenId);
- css::uno::Sequence<css::xml::FastAttribute> aFastSeq;
- css::uno::Sequence<css::xml::Attribute> aUnkSeq;
- for (const auto& a : std::as_const(aSeqs))
+ css::uno::Sequence<css::xml::FastAttribute> aFastSeq;
+ css::uno::Sequence<css::xml::Attribute> aUnkSeq;
+ for (const auto& a : std::as_const(aSeqs))
+ {
+ if (a >>= aFastSeq)
{
- if (a >>= aFastSeq)
- {
- for (const auto& rAttr : std::as_const(aFastSeq))
- rStrm.WriteAttributes(rAttr.Token, rAttr.Value);
- }
- else if (a >>= aUnkSeq)
- {
- for (const auto& rAttr : std::as_const(aUnkSeq))
- pStrm->write(" ")
- ->write(rAttr.Name)
- ->write("=\"")
- ->writeEscaped(rAttr.Value)
- ->write("\"");
- }
+ for (const auto& rAttr : std::as_const(aFastSeq))
+ rStrm.WriteAttributes(rAttr.Token, rAttr.Value);
+ }
+ else if (a >>= aUnkSeq)
+ {
+ for (const auto& rAttr : std::as_const(aUnkSeq))
+ pStrm->write(" ")
+ ->write(rAttr.Name)
+ ->write("=\"")
+ ->writeEscaped(rAttr.Value)
+ ->write("\"");
}
-
- pStrm->write("/>");
}
+
+ pStrm->write("/>");
}
}
diff --git a/sc/source/filter/excel/xestream.cxx b/sc/source/filter/excel/xestream.cxx
index b3f96aa46b5c..5d636767de1d 100644
--- a/sc/source/filter/excel/xestream.cxx
+++ b/sc/source/filter/excel/xestream.cxx
@@ -284,21 +284,21 @@ void XclExpStream::CopyFromStream(SvStream& rInStrm, sal_uInt64 const nBytes)
{
sal_uInt64 const nRemaining(rInStrm.remainingSize());
sal_uInt64 nBytesLeft = ::std::min(nBytes, nRemaining);
- if( nBytesLeft > 0 )
- {
- const std::size_t nMaxBuffer = 4096;
- std::unique_ptr<sal_uInt8[]> pBuffer(
- new sal_uInt8[ ::std::min<std::size_t>(nBytesLeft, nMaxBuffer) ]);
- bool bValid = true;
+ if( nBytesLeft <= 0 )
+ return;
- while( bValid && (nBytesLeft > 0) )
- {
- std::size_t nWriteLen = ::std::min<std::size_t>(nBytesLeft, nMaxBuffer);
- rInStrm.ReadBytes(pBuffer.get(), nWriteLen);
- std::size_t nWriteRet = Write( pBuffer.get(), nWriteLen );
- bValid = (nWriteLen == nWriteRet);
- nBytesLeft -= nWriteRet;
- }
+ const std::size_t nMaxBuffer = 4096;
+ std::unique_ptr<sal_uInt8[]> pBuffer(
+ new sal_uInt8[ ::std::min<std::size_t>(nBytesLeft, nMaxBuffer) ]);
+ bool bValid = true;
+
+ while( bValid && (nBytesLeft > 0) )
+ {
+ std::size_t nWriteLen = ::std::min<std::size_t>(nBytesLeft, nMaxBuffer);
+ rInStrm.ReadBytes(pBuffer.get(), nWriteLen);
+ std::size_t nWriteRet = Write( pBuffer.get(), nWriteLen );
+ bValid = (nWriteLen == nWriteRet);
+ nBytesLeft -= nWriteRet;
}
}
@@ -545,25 +545,25 @@ void XclExpBiff8Encrypter::Init( const Sequence< NamedValue >& rEncryptionData )
{
mbValid = false;
- if( maCodec.InitCodec( rEncryptionData ) )
- {
- maCodec.GetDocId( mpnDocId );
+ if( !maCodec.InitCodec( rEncryptionData ) )
+ return;
- // generate the salt here
- rtlRandomPool aRandomPool = rtl_random_createPool ();
- rtl_random_getBytes( aRandomPool, mpnSalt, 16 );
- rtl_random_destroyPool( aRandomPool );
+ maCodec.GetDocId( mpnDocId );
- memset( mpnSaltDigest, 0, sizeof( mpnSaltDigest ) );
+ // generate the salt here
+ rtlRandomPool aRandomPool = rtl_random_createPool ();
+ rtl_random_getBytes( aRandomPool, mpnSalt, 16 );
+ rtl_random_destroyPool( aRandomPool );
- // generate salt hash.
- ::msfilter::MSCodec_Std97 aCodec;
- aCodec.InitCodec( rEncryptionData );
- aCodec.CreateSaltDigest( mpnSalt, mpnSaltDigest );
+ memset( mpnSaltDigest, 0, sizeof( mpnSaltDigest ) );
- // verify to make sure it's in good shape.
- mbValid = maCodec.VerifyKey( mpnSalt, mpnSaltDigest );
- }
+ // generate salt hash.
+ ::msfilter::MSCodec_Std97 aCodec;
+ aCodec.InitCodec( rEncryptionData );
+ aCodec.CreateSaltDigest( mpnSalt, mpnSaltDigest );
+
+ // verify to make sure it's in good shape.
+ mbValid = maCodec.VerifyKey( mpnSalt, mpnSaltDigest );
}
sal_uInt32 XclExpBiff8Encrypter::GetBlockPos( std::size_t nStrmPos )
diff --git a/sc/source/filter/excel/xestring.cxx b/sc/source/filter/excel/xestring.cxx
index 45be12cbbcbf..ff5abf3c6a51 100644
--- a/sc/source/filter/excel/xestring.cxx
+++ b/sc/source/filter/excel/xestring.cxx
@@ -311,26 +311,26 @@ void XclExpString::WriteBuffer( XclExpStream& rStrm ) const
void XclExpString::WriteFormats( XclExpStream& rStrm, bool bWriteSize ) const
{
- if( IsRich() )
+ if( !IsRich() )
+ return;
+
+ if( mbIsBiff8 )
{
- if( mbIsBiff8 )
- {
- if( bWriteSize )
- rStrm << GetFormatsCount();
- rStrm.SetSliceSize( 4 );
- for( const auto& rFormat : maFormats )
- rStrm << rFormat.mnChar << rFormat.mnFontIdx;
- }
- else
- {
- if( bWriteSize )
- rStrm << static_cast< sal_uInt8 >( GetFormatsCount() );
- rStrm.SetSliceSize( 2 );
- for( const auto& rFormat : maFormats )
- rStrm << static_cast< sal_uInt8 >( rFormat.mnChar ) << static_cast< sal_uInt8 >( rFormat.mnFontIdx );
- }
- rStrm.SetSliceSize( 0 );
+ if( bWriteSize )
+ rStrm << GetFormatsCount();
+ rStrm.SetSliceSize( 4 );
+ for( const auto& rFormat : maFormats )
+ rStrm << rFormat.mnChar << rFormat.mnFontIdx;
}
+ else
+ {
+ if( bWriteSize )
+ rStrm << static_cast< sal_uInt8 >( GetFormatsCount() );
+ rStrm.SetSliceSize( 2 );
+ for( const auto& rFormat : maFormats )
+ rStrm << static_cast< sal_uInt8 >( rFormat.mnChar ) << static_cast< sal_uInt8 >( rFormat.mnFontIdx );
+ }
+ rStrm.SetSliceSize( 0 );
}
void XclExpString::Write( XclExpStream& rStrm ) const
@@ -366,24 +366,24 @@ void XclExpString::WriteHeaderToMem( sal_uInt8* pnMem ) const
void XclExpString::WriteBufferToMem( sal_uInt8* pnMem ) const
{
assert(pnMem);
- if( !IsEmpty() )
+ if( IsEmpty() )
+ return;
+
+ if( mbIsBiff8 )
{
- if( mbIsBiff8 )
+ for( const sal_uInt16 nChar : maUniBuffer )
{
- for( const sal_uInt16 nChar : maUniBuffer )
+ *pnMem = static_cast< sal_uInt8 >( nChar );
+ ++pnMem;
+ if( mbIsUnicode )
{
- *pnMem = static_cast< sal_uInt8 >( nChar );
+ *pnMem = static_cast< sal_uInt8 >( nChar >> 8 );
++pnMem;
- if( mbIsUnicode )
- {
- *pnMem = static_cast< sal_uInt8 >( nChar >> 8 );
- ++pnMem;
- }
}
}
- else
- memcpy( pnMem, maCharBuffer.data(), mnLen );
}
+ else
+ memcpy( pnMem, maCharBuffer.data(), mnLen );
}
void XclExpString::WriteToMem( sal_uInt8* pnMem ) const
diff --git a/sc/source/filter/excel/xestyle.cxx b/sc/source/filter/excel/xestyle.cxx
index 76d9c2fb572f..3118834a2a76 100644
--- a/sc/source/filter/excel/xestyle.cxx
+++ b/sc/source/filter/excel/xestyle.cxx
@@ -627,24 +627,24 @@ void XclExpPaletteImpl::ReduceLeastUsedColor()
// merge both colors to one color, remove one color from list
XclListColor* pKeepEntry = mxColorList->at(nKeep).get();
XclListColor* pRemoveEntry = mxColorList->at(nRemove).get();
- if( pKeepEntry && pRemoveEntry )
- {
- // merge both colors (if pKeepEntry is a base color, it will not change)
- pKeepEntry->Merge( *pRemoveEntry );
- // remove the less used color, adjust nKeep index if kept color follows removed color
- XclListColorList::iterator itr = mxColorList->begin();
- ::std::advance(itr, nRemove);
- mxColorList->erase(itr);
- if( nKeep > nRemove ) --nKeep;
-
- // recalculate color ID data map (maps color IDs to color list indexes)
- for( auto& rColorIdData : maColorIdDataVec )
- {
- if( rColorIdData.mnIndex > nRemove )
- --rColorIdData.mnIndex;
- else if( rColorIdData.mnIndex == nRemove )
- rColorIdData.mnIndex = nKeep;
- }
+ if( !(pKeepEntry && pRemoveEntry) )
+ return;
+
+ // merge both colors (if pKeepEntry is a base color, it will not change)
+ pKeepEntry->Merge( *pRemoveEntry );
+ // remove the less used color, adjust nKeep index if kept color follows removed color
+ XclListColorList::iterator itr = mxColorList->begin();
+ ::std::advance(itr, nRemove);
+ mxColorList->erase(itr);
+ if( nKeep > nRemove ) --nKeep;
+
+ // recalculate color ID data map (maps color IDs to color list indexes)
+ for( auto& rColorIdData : maColorIdDataVec )
+ {
+ if( rColorIdData.mnIndex > nRemove )
+ --rColorIdData.mnIndex;
+ else if( rColorIdData.mnIndex == nRemove )
+ rColorIdData.mnIndex = nKeep;
}
}
diff --git a/sc/source/filter/excel/xetable.cxx b/sc/source/filter/excel/xetable.cxx
index 6ab727e8993b..3891e80601c8 100644
--- a/sc/source/filter/excel/xetable.cxx
+++ b/sc/source/filter/excel/xetable.cxx
@@ -381,22 +381,25 @@ void XclExpTableop::Finalize()
}
// check if referred cells are outside of own range
- if( mbValid ) switch( mnScMode )
+ if( !mbValid )
+ return;
+
+ switch( mnScMode )
{
- case 0:
- mbValid = (mnColInpXclCol + 1 < maXclRange.maFirst.mnCol) || (mnColInpXclCol > maXclRange.maLast.mnCol) ||
- (mnColInpXclRow < maXclRange.maFirst.mnRow) || (mnColInpXclRow > maXclRange.maLast.mnRow);
- break;
- case 1:
- mbValid = (mnColInpXclCol < maXclRange.maFirst.mnCol) || (mnColInpXclCol > maXclRange.maLast.mnCol) ||
- (mnColInpXclRow + 1 < maXclRange.maFirst.mnRow) || (mnColInpXclRow > maXclRange.maLast.mnRow);
- break;
- case 2:
- mbValid = ((mnColInpXclCol + 1 < maXclRange.maFirst.mnCol) || (mnColInpXclCol > maXclRange.maLast.mnCol) ||
- (mnColInpXclRow + 1 < maXclRange.maFirst.mnRow) || (mnColInpXclRow > maXclRange.maLast.mnRow)) &&
- ((mnRowInpXclCol + 1 < maXclRange.maFirst.mnCol) || (mnRowInpXclCol > maXclRange.maLast.mnCol) ||
- (mnRowInpXclRow + 1 < maXclRange.maFirst.mnRow) || (mnRowInpXclRow > maXclRange.maLast.mnRow));
- break;
+ case 0:
+ mbValid = (mnColInpXclCol + 1 < maXclRange.maFirst.mnCol) || (mnColInpXclCol > maXclRange.maLast.mnCol) ||
+ (mnColInpXclRow < maXclRange.maFirst.mnRow) || (mnColInpXclRow > maXclRange.maLast.mnRow);
+ break;
+ case 1:
+ mbValid = (mnColInpXclCol < maXclRange.maFirst.mnCol) || (mnColInpXclCol > maXclRange.maLast.mnCol) ||
+ (mnColInpXclRow + 1 < maXclRange.maFirst.mnRow) || (mnColInpXclRow > maXclRange.maLast.mnRow);
+ break;
+ case 2:
+ mbValid = ((mnColInpXclCol + 1 < maXclRange.maFirst.mnCol) || (mnColInpXclCol > maXclRange.maLast.mnCol) ||
+ (mnColInpXclRow + 1 < maXclRange.maFirst.mnRow) || (mnColInpXclRow > maXclRange.maLast.mnRow)) &&
+ ((mnRowInpXclCol + 1 < maXclRange.maFirst.mnCol) || (mnRowInpXclCol > maXclRange.maLast.mnCol) ||
+ (mnRowInpXclRow + 1 < maXclRange.maFirst.mnRow) || (mnRowInpXclRow > maXclRange.maLast.mnRow));
+ break;
}
}
@@ -1406,46 +1409,46 @@ XclExpOutlineBuffer::XclExpOutlineBuffer( const XclExpRoot& rRoot, bool bRows )
void XclExpOutlineBuffer::UpdateColRow( SCCOLROW nScPos )
{
- if( mpScOLArray )
- {
- // find open level index for passed position
- size_t nNewOpenScLevel = 0; // new open level (0-based Calc index)
- sal_uInt8 nNewLevel = 0; // new open level (1-based Excel index)
+ if( !mpScOLArray )
+ return;
+
+ // find open level index for passed position
+ size_t nNewOpenScLevel = 0; // new open level (0-based Calc index)
+ sal_uInt8 nNewLevel = 0; // new open level (1-based Excel index)
- if( mpScOLArray->FindTouchedLevel( nScPos, nScPos, nNewOpenScLevel ) )
- nNewLevel = static_cast< sal_uInt8 >( nNewOpenScLevel + 1 );
- // else nNewLevel keeps 0 to show that there are no groups
+ if( mpScOLArray->FindTouchedLevel( nScPos, nScPos, nNewOpenScLevel ) )
+ nNewLevel = static_cast< sal_uInt8 >( nNewOpenScLevel + 1 );
+ // else nNewLevel keeps 0 to show that there are no groups
- mbCurrCollapse = false;
- if( nNewLevel >= mnCurrLevel )
+ mbCurrCollapse = false;
+ if( nNewLevel >= mnCurrLevel )
+ {
+ // new level(s) opened, or no level closed - update all level infos
+ for( size_t nScLevel = 0; nScLevel <= nNewOpenScLevel; ++nScLevel )
{
- // new level(s) opened, or no level closed - update all level infos
- for( size_t nScLevel = 0; nScLevel <= nNewOpenScLevel; ++nScLevel )
+ /* In each level: check if a new group is started (there may be
+ neighbored groups without gap - therefore check ALL levels). */
+ if( maLevelInfos[ nScLevel ].mnScEndPos < nScPos )
{
- /* In each level: check if a new group is started (there may be
- neighbored groups without gap - therefore check ALL levels). */
- if( maLevelInfos[ nScLevel ].mnScEndPos < nScPos )
+ if( const ScOutlineEntry* pEntry = mpScOLArray->GetEntryByPos( nScLevel, nScPos ) )
{
- if( const ScOutlineEntry* pEntry = mpScOLArray->GetEntryByPos( nScLevel, nScPos ) )
- {
- maLevelInfos[ nScLevel ].mnScEndPos = pEntry->GetEnd();
- maLevelInfos[ nScLevel ].mbHidden = pEntry->IsHidden();
- }
+ maLevelInfos[ nScLevel ].mnScEndPos = pEntry->GetEnd();
+ maLevelInfos[ nScLevel ].mbHidden = pEntry->IsHidden();
}
}
}
- else
- {
- // level(s) closed - check if any of the closed levels are collapsed
- // Calc uses 0-based level indexes
- sal_uInt16 nOldOpenScLevel = mnCurrLevel - 1;
- for( sal_uInt16 nScLevel = nNewOpenScLevel + 1; !mbCurrCollapse && (nScLevel <= nOldOpenScLevel); ++nScLevel )
- mbCurrCollapse = maLevelInfos[ nScLevel ].mbHidden;
- }
-
- // cache new opened level
- mnCurrLevel = nNewLevel;
}
+ else
+ {
+ // level(s) closed - check if any of the closed levels are collapsed
+ // Calc uses 0-based level indexes
+ sal_uInt16 nOldOpenScLevel = mnCurrLevel - 1;
+ for( sal_uInt16 nScLevel = nNewOpenScLevel + 1; !mbCurrCollapse && (nScLevel <= nOldOpenScLevel); ++nScLevel )
+ mbCurrCollapse = maLevelInfos[ nScLevel ].mbHidden;
+ }
+
+ // cache new opened level
+ mnCurrLevel = nNewLevel;
}
XclExpGuts::XclExpGuts( const XclExpRoot& rRoot ) :
@@ -1455,25 +1458,26 @@ XclExpGuts::XclExpGuts( const XclExpRoot& rRoot ) :
mnRowLevels( 0 ),
mnRowWidth( 0 )
{
- if( const ScOutlineTable* pOutlineTable = rRoot.GetDoc().GetOutlineTable( rRoot.GetCurrScTab() ) )
+ const ScOutlineTable* pOutlineTable = rRoot.GetDoc().GetOutlineTable( rRoot.GetCurrScTab() );
+ if(!pOutlineTable)
+ return;
+
+ // column outline groups
+ const ScOutlineArray& rColArray = pOutlineTable->GetColArray();
+ mnColLevels = ulimit_cast< sal_uInt16 >( rColArray.GetDepth(), EXC_OUTLINE_MAX );
+ if( mnColLevels )
{
- // column outline groups
- const ScOutlineArray& rColArray = pOutlineTable->GetColArray();
- mnColLevels = ulimit_cast< sal_uInt16 >( rColArray.GetDepth(), EXC_OUTLINE_MAX );
- if( mnColLevels )
- {
- ++mnColLevels;
- mnColWidth = 12 * mnColLevels + 5;
- }
+ ++mnColLevels;
+ mnColWidth = 12 * mnColLevels + 5;
+ }
- // row outline groups
- const ScOutlineArray& rRowArray = pOutlineTable->GetRowArray();
- mnRowLevels = ulimit_cast< sal_uInt16 >( rRowArray.GetDepth(), EXC_OUTLINE_MAX );
- if( mnRowLevels )
- {
- ++mnRowLevels;
- mnRowWidth = 12 * mnRowLevels + 5;
- }
+ // row outline groups
+ const ScOutlineArray& rRowArray = pOutlineTable->GetRowArray();
+ mnRowLevels = ulimit_cast< sal_uInt16 >( rRowArray.GetDepth(), EXC_OUTLINE_MAX );
+ if( mnRowLevels )
+ {
+ ++mnRowLevels;
+ mnRowWidth = 12 * mnRowLevels + 5;
}
}
diff --git a/sc/source/filter/excel/xeview.cxx b/sc/source/filter/excel/xeview.cxx
index 7fadf895eda5..5d4acc7c35d1 100644
--- a/sc/source/filter/excel/xeview.cxx
+++ b/sc/source/filter/excel/xeview.cxx
@@ -474,26 +474,26 @@ void XclExpTabViewSettings::SaveXml( XclExpXmlStream& rStrm )
void XclExpTabViewSettings::CreateSelectionData( sal_uInt8 nPane,
const ScAddress& rCursor, const ScRangeList& rSelection )
{
- if( maData.HasPane( nPane ) )
- {
- XclSelectionData& rSelData = maData.CreateSelectionData( nPane );
+ if( !maData.HasPane( nPane ) )
+ return;
- // first step: use top-left visible cell as cursor
- rSelData.maXclCursor.mnCol = ((nPane == EXC_PANE_TOPLEFT) || (nPane == EXC_PANE_BOTTOMLEFT)) ?
- maData.maFirstXclPos.mnCol : maData.maSecondXclPos.mnCol;
- rSelData.maXclCursor.mnRow = ((nPane == EXC_PANE_TOPLEFT) || (nPane == EXC_PANE_TOPRIGHT)) ?
- maData.maFirstXclPos.mnRow : maData.maSecondXclPos.mnRow;
+ XclSelectionData& rSelData = maData.CreateSelectionData( nPane );
- // second step, active pane: create actual selection data with current cursor position
- if( nPane == maData.mnActivePane )
- {
- XclExpAddressConverter& rAddrConv = GetAddressConverter();
- // cursor position (keep top-left pane position from above, if rCursor is invalid)
- if( (rCursor.Col() >= 0) && (rCursor.Row() >= 0) )
- rSelData.maXclCursor = rAddrConv.CreateValidAddress( rCursor, false );
- // selection
- rAddrConv.ConvertRangeList( rSelData.maXclSelection, rSelection, false );
- }
+ // first step: use top-left visible cell as cursor
+ rSelData.maXclCursor.mnCol = ((nPane == EXC_PANE_TOPLEFT) || (nPane == EXC_PANE_BOTTOMLEFT)) ?
+ maData.maFirstXclPos.mnCol : maData.maSecondXclPos.mnCol;
+ rSelData.maXclCursor.mnRow = ((nPane == EXC_PANE_TOPLEFT) || (nPane == EXC_PANE_TOPRIGHT)) ?
+ maData.maFirstXclPos.mnRow : maData.maSecondXclPos.mnRow;
+
+ // second step, active pane: create actual selection data with current cursor position
+ if( nPane == maData.mnActivePane )
+ {
+ XclExpAddressConverter& rAddrConv = GetAddressConverter();
+ // cursor position (keep top-left pane position from above, if rCursor is invalid)
+ if( (rCursor.Col() >= 0) && (rCursor.Row() >= 0) )
+ rSelData.maXclCursor = rAddrConv.CreateValidAddress( rCursor, false );
+ // selection
+ rAddrConv.ConvertRangeList( rSelData.maXclSelection, rSelection, false );
}
}
diff --git a/sc/source/filter/excel/xichart.cxx b/sc/source/filter/excel/xichart.cxx
index 38a1f84d173b..4683fec797b9 100644
--- a/sc/source/filter/excel/xichart.cxx
+++ b/sc/source/filter/excel/xichart.cxx
@@ -396,24 +396,24 @@ void XclImpChGroupBase::ReadRecordGroup( XclImpStream& rStrm )
ReadHeaderRecord( rStrm );
// only read sub records, if the next record is a CHBEGIN
- if( rStrm.GetNextRecId() == EXC_ID_CHBEGIN )
- {
- // read the CHBEGIN record, may be used for special initial processing
- rStrm.StartNextRecord();
- ReadSubRecord( rStrm );
+ if( rStrm.GetNextRecId() != EXC_ID_CHBEGIN )
+ return;
- // read the nested records
- bool bLoop = true;
- while( bLoop && rStrm.StartNextRecord() )
- {
- sal_uInt16 nRecId = rStrm.GetRecId();
- bLoop = nRecId != EXC_ID_CHEND;
- // skip unsupported nested blocks
- if( nRecId == EXC_ID_CHBEGIN )
- SkipBlock( rStrm );
- else
- ReadSubRecord( rStrm );
- }
+ // read the CHBEGIN record, may be used for special initial processing
+ rStrm.StartNextRecord();
+ ReadSubRecord( rStrm );
+
+ // read the nested records
+ bool bLoop = true;
+ while( bLoop && rStrm.StartNextRecord() )
+ {
+ sal_uInt16 nRecId = rStrm.GetRecId();
+ bLoop = nRecId != EXC_ID_CHEND;
+ // skip unsupported nested blocks
+ if( nRecId == EXC_ID_CHBEGIN )
+ SkipBlock( rStrm );
+ else
+ ReadSubRecord( rStrm );
}
/* Returns with current CHEND record or unchanged stream, if no record
group present. In every case another call to StartNextRecord() will go
@@ -558,30 +558,33 @@ void XclImpChEscherFormat::Convert( const XclImpChRoot& rRoot,
XclImpChFrameBase::XclImpChFrameBase( const XclChFormatInfo& rFmtInfo )
{
- if( rFmtInfo.mbCreateDefFrame ) switch( rFmtInfo.meDefFrameType )
+ if( !rFmtInfo.mbCreateDefFrame )
+ return;
+
+ switch( rFmtInfo.meDefFrameType )
{
- case EXC_CHFRAMETYPE_AUTO:
- mxLineFmt = new XclImpChLineFormat();
- if( rFmtInfo.mbIsFrame )
- mxAreaFmt = std::make_shared<XclImpChAreaFormat>();
- break;
- case EXC_CHFRAMETYPE_INVISIBLE:
+ case EXC_CHFRAMETYPE_AUTO:
+ mxLineFmt = new XclImpChLineFormat();
+ if( rFmtInfo.mbIsFrame )
+ mxAreaFmt = std::make_shared<XclImpChAreaFormat>();
+ break;
+ case EXC_CHFRAMETYPE_INVISIBLE:
+ {
+ XclChLineFormat aLineFmt;
+ ::set_flag( aLineFmt.mnFlags, EXC_CHLINEFORMAT_AUTO, false );
+ aLineFmt.mnPattern = EXC_CHLINEFORMAT_NONE;
+ mxLineFmt = new XclImpChLineFormat( aLineFmt );
+ if( rFmtInfo.mbIsFrame )
{
- XclChLineFormat aLineFmt;
- ::set_flag( aLineFmt.mnFlags, EXC_CHLINEFORMAT_AUTO, false );
- aLineFmt.mnPattern = EXC_CHLINEFORMAT_NONE;
- mxLineFmt = new XclImpChLineFormat( aLineFmt );
- if( rFmtInfo.mbIsFrame )
- {
- XclChAreaFormat aAreaFmt;
- ::set_flag( aAreaFmt.mnFlags, EXC_CHAREAFORMAT_AUTO, false );
- aAreaFmt.mnPattern = EXC_PATT_NONE;
- mxAreaFmt = std::make_shared<XclImpChAreaFormat>( aAreaFmt );
- }
+ XclChAreaFormat aAreaFmt;
+ ::set_flag( aAreaFmt.mnFlags, EXC_CHAREAFORMAT_AUTO, false );
+ aAreaFmt.mnPattern = EXC_PATT_NONE;
+ mxAreaFmt = std::make_shared<XclImpChAreaFormat>( aAreaFmt );
}
- break;
- default:
- OSL_FAIL( "XclImpChFrameBase::XclImpChFrameBase - unknown frame type" );
+ }
+ break;
+ default:
+ OSL_FAIL( "XclImpChFrameBase::XclImpChFrameBase - unknown frame type" );
}
}
@@ -1028,18 +1031,18 @@ void XclImpChText::SetString( const OUString& rString )
void XclImpChText::UpdateText( const XclImpChText* pParentText )
{
- if( pParentText )
+ if( !pParentText )
+ return;
+
+ // update missing members
+ if( !mxFrame )
+ mxFrame = pParentText->mxFrame;
+ if( !mxFont )
{
- // update missing members
- if( !mxFrame )
- mxFrame = pParentText->mxFrame;
- if( !mxFont )
- {
- mxFont = pParentText->mxFont;
- // text color is taken from CHTEXT record, not from font in CHFONT
- ::set_flag( maData.mnFlags, EXC_CHTEXT_AUTOCOLOR, ::get_flag( pParentText->maData.mnFlags, EXC_CHTEXT_AUTOCOLOR ) );
- maData.maTextColor = pParentText->maData.maTextColor;
- }
+ mxFont = pParentText->mxFont;
+ // text color is taken from CHTEXT record, not from font in CHFONT
+ ::set_flag( maData.mnFlags, EXC_CHTEXT_AUTOCOLOR, ::get_flag( pParentText->maData.mnFlags, EXC_CHTEXT_AUTOCOLOR ) );
+ maData.maTextColor = pParentText->maData.maTextColor;
}
}
@@ -1107,36 +1110,36 @@ void XclImpChText::ConvertDataLabel( ScfPropertySet& rPropSet, const XclChTypeIn
rPropSet.SetStringProperty( EXC_CHPROP_LABELSEPARATOR, aSep );
// text properties of attached label
- if( bShowAny )
- {
- ConvertFont( rPropSet );
- ConvertRotation( rPropSet, false );
- // label placement
- using namespace cssc::DataLabelPlacement;
- sal_Int32 nPlacement = rTypeInfo.mnDefaultLabelPos;
- switch( ::extract_value< sal_uInt16 >( maData.mnFlags2, 0, 4 ) )
- {
- case EXC_CHTEXT_POS_DEFAULT: nPlacement = rTypeInfo.mnDefaultLabelPos; break;
- case EXC_CHTEXT_POS_OUTSIDE: nPlacement = OUTSIDE; break;
- case EXC_CHTEXT_POS_INSIDE: nPlacement = INSIDE; break;
- case EXC_CHTEXT_POS_CENTER: nPlacement = CENTER; break;
- case EXC_CHTEXT_POS_AXIS: nPlacement = NEAR_ORIGIN; break;
- case EXC_CHTEXT_POS_ABOVE: nPlacement = TOP; break;
- case EXC_CHTEXT_POS_BELOW: nPlacement = BOTTOM; break;
- case EXC_CHTEXT_POS_LEFT: nPlacement = LEFT; break;
- case EXC_CHTEXT_POS_RIGHT: nPlacement = RIGHT; break;
- case EXC_CHTEXT_POS_AUTO: nPlacement = AVOID_OVERLAP; break;
- }
- sal_Int32 nGlobalPlacement = 0;
- if ( ( nPlacement == rTypeInfo.mnDefaultLabelPos ) && pGlobalPropSet &&
- pGlobalPropSet->GetProperty( nGlobalPlacement, EXC_CHPROP_LABELPLACEMENT ) )
- nPlacement = nGlobalPlacement;
+ if( !bShowAny )
+ return;
- rPropSet.SetProperty( EXC_CHPROP_LABELPLACEMENT, nPlacement );
- // label number format (percentage format wins over value format)
- if( bShowPercent || bShowValue )
- ConvertNumFmt( rPropSet, bShowPercent );
- }
+ ConvertFont( rPropSet );
+ ConvertRotation( rPropSet, false );
+ // label placement
+ using namespace cssc::DataLabelPlacement;
+ sal_Int32 nPlacement = rTypeInfo.mnDefaultLabelPos;
+ switch( ::extract_value< sal_uInt16 >( maData.mnFlags2, 0, 4 ) )
+ {
+ case EXC_CHTEXT_POS_DEFAULT: nPlacement = rTypeInfo.mnDefaultLabelPos; break;
+ case EXC_CHTEXT_POS_OUTSIDE: nPlacement = OUTSIDE; break;
+ case EXC_CHTEXT_POS_INSIDE: nPlacement = INSIDE; break;
+ case EXC_CHTEXT_POS_CENTER: nPlacement = CENTER; break;
+ case EXC_CHTEXT_POS_AXIS: nPlacement = NEAR_ORIGIN; break;
+ case EXC_CHTEXT_POS_ABOVE: nPlacement = TOP; break;
+ case EXC_CHTEXT_POS_BELOW: nPlacement = BOTTOM; break;
+ case EXC_CHTEXT_POS_LEFT: nPlacement = LEFT; break;
+ case EXC_CHTEXT_POS_RIGHT: nPlacement = RIGHT; break;
+ case EXC_CHTEXT_POS_AUTO: nPlacement = AVOID_OVERLAP; break;
+ }
+ sal_Int32 nGlobalPlacement = 0;
+ if ( ( nPlacement == rTypeInfo.mnDefaultLabelPos ) && pGlobalPropSet &&
+ pGlobalPropSet->GetProperty( nGlobalPlacement, EXC_CHPROP_LABELPLACEMENT ) )
+ nPlacement = nGlobalPlacement;
+
+ rPropSet.SetProperty( EXC_CHPROP_LABELPLACEMENT, nPlacement );
+ // label number format (percentage format wins over value format)
+ if( bShowPercent || bShowValue )
+ ConvertNumFmt( rPropSet, bShowPercent );
}
Reference< XTitle > XclImpChText::CreateTitle() const
@@ -1188,9 +1191,12 @@ void XclImpChText::ConvertTitlePosition( const XclChTextKey& rTitleKey ) const
written out the correct absolute position and size of the title in the
CHTEXT record. This is assured by checking that the shape size stored
in the CHTEXT record is non-zero. */
- if( (rPosData.mnTLMode == EXC_CHFRAMEPOS_PARENT) &&
+ if( !((rPosData.mnTLMode == EXC_CHFRAMEPOS_PARENT) &&
((rPosData.maRect.mnX != 0) || (rPosData.maRect.mnY != 0)) &&
- (maData.maRect.mnWidth > 0) && (maData.maRect.mnHeight > 0) ) try
+ (maData.maRect.mnWidth > 0) && (maData.maRect.mnHeight > 0)) )
+ return;
+
+ try
{
Reference< XShape > xTitleShape( GetTitleShape( rTitleKey ), UNO_SET_THROW );
// the call to XShape.getSize() may recalc the chart view
@@ -2162,23 +2168,23 @@ XclImpChDataFormatRef XclImpChSeries::CreateDataFormat( sal_uInt16 nPointIdx, sa
void XclImpChSeries::ConvertTrendLines( Reference< XDataSeries > const & xDataSeries ) const
{
Reference< XRegressionCurveContainer > xRegCurveCont( xDataSeries, UNO_QUERY );
- if( xRegCurveCont.is() )
+ if( !xRegCurveCont.is() )
+ return;
+
+ for (auto const& trendLine : maTrendLines)
{
- for (auto const& trendLine : maTrendLines)
+ try
{
- try
+ Reference< XRegressionCurve > xRegCurve = trendLine->CreateRegressionCurve();
+ if( xRegCurve.is() )
{
- Reference< XRegressionCurve > xRegCurve = trendLine->CreateRegressionCurve();
- if( xRegCurve.is() )
- {
- xRegCurveCont->addRegressionCurve( xRegCurve );
- }
- }
- catch( Exception& )
- {
- OSL_FAIL( "XclImpChSeries::ConvertTrendLines - cannot add regression curve" );
+ xRegCurveCont->addRegressionCurve( xRegCurve );
}
}
+ catch( Exception& )
+ {
+ OSL_FAIL( "XclImpChSeries::ConvertTrendLines - cannot add regression curve" );
+ }
}
}
@@ -2860,30 +2866,30 @@ void XclImpChTypeGroup::InsertDataSeries( Reference< XChartType > const & xChart
Reference< XDataSeries > const & xSeries, sal_Int32 nApiAxesSetIdx ) const
{
Reference< XDataSeriesContainer > xSeriesCont( xChartType, UNO_QUERY );
- if( xSeriesCont.is() && xSeries.is() )
- {
- // series stacking mode
- cssc2::StackingDirection eStacking = cssc2::StackingDirection_NO_STACKING;
- // stacked overrides deep-3d
- if( maType.IsStacked() || maType.IsPercent() )
- eStacking = cssc2::StackingDirection_Y_STACKING;
- else if( Is3dDeepChart() )
- eStacking = cssc2::StackingDirection_Z_STACKING;
-
- // additional series properties
- ScfPropertySet aSeriesProp( xSeries );
- aSeriesProp.SetProperty( EXC_CHPROP_STACKINGDIR, eStacking );
- aSeriesProp.SetProperty( EXC_CHPROP_ATTAXISINDEX, nApiAxesSetIdx );
-
- // insert series into container
- try
- {
- xSeriesCont->addDataSeries( xSeries );
- }
- catch( Exception& )
- {
- OSL_FAIL( "XclImpChTypeGroup::InsertDataSeries - cannot add data series" );
- }
+ if( !(xSeriesCont.is() && xSeries.is()) )
+ return;
+
+ // series stacking mode
+ cssc2::StackingDirection eStacking = cssc2::StackingDirection_NO_STACKING;
+ // stacked overrides deep-3d
+ if( maType.IsStacked() || maType.IsPercent() )
+ eStacking = cssc2::StackingDirection_Y_STACKING;
+ else if( Is3dDeepChart() )
+ eStacking = cssc2::StackingDirection_Z_STACKING;
+
+ // additional series properties
+ ScfPropertySet aSeriesProp( xSeries );
+ aSeriesProp.SetProperty( EXC_CHPROP_STACKINGDIR, eStacking );
+ aSeriesProp.SetProperty( EXC_CHPROP_ATTAXISINDEX, nApiAxesSetIdx );
+
+ // insert series into container
+ try
+ {
+ xSeriesCont->addDataSeries( xSeries );
+ }
+ catch( Exception& )
+ {
+ OSL_FAIL( "XclImpChTypeGroup::InsertDataSeries - cannot add data series" );
}
}
@@ -2909,66 +2915,66 @@ void XclImpChTypeGroup::CreateStockSeries( Reference< XChartType > const & xChar
// create the data series object
Reference< XDataSeries > xDataSeries( ScfApiHelper::CreateInstance( SERVICE_CHART2_DATASERIES ), UNO_QUERY );
Reference< XDataSink > xDataSink( xDataSeries, UNO_QUERY );
- if( xDataSink.is() )
+ if( !xDataSink.is() )
+ return;
+
+ // create a list of data sequences from all series
+ ::std::vector< Reference< XLabeledDataSequence > > aLabeledSeqVec;
+ OSL_ENSURE( maSeries.size() >= 3, "XclImpChTypeGroup::CreateChartType - missing stock series" );
+ int nRoleIdx = (maSeries.size() == 3) ? 1 : 0;
+ for( const auto& rxSeries : maSeries )
{
- // create a list of data sequences from all series
- ::std::vector< Reference< XLabeledDataSequence > > aLabeledSeqVec;
- OSL_ENSURE( maSeries.size() >= 3, "XclImpChTypeGroup::CreateChartType - missing stock series" );
- int nRoleIdx = (maSeries.size() == 3) ? 1 : 0;
- for( const auto& rxSeries : maSeries )
+ // create a data sequence with a specific role
+ OUString aRole;
+ switch( nRoleIdx )
{
- // create a data sequence with a specific role
- OUString aRole;
- switch( nRoleIdx )
- {
- case 0: aRole = EXC_CHPROP_ROLE_OPENVALUES; break;
- case 1: aRole = EXC_CHPROP_ROLE_HIGHVALUES; break;
- case 2: aRole = EXC_CHPROP_ROLE_LOWVALUES; break;
- case 3: aRole = EXC_CHPROP_ROLE_CLOSEVALUES; break;
- }
- Reference< XLabeledDataSequence > xDataSeq = rxSeries->CreateValueSequence( aRole );
- if( xDataSeq.is() )
- aLabeledSeqVec.push_back( xDataSeq );
- ++nRoleIdx;
- if (nRoleIdx >= 4)
- break;
+ case 0: aRole = EXC_CHPROP_ROLE_OPENVALUES; break;
+ case 1: aRole = EXC_CHPROP_ROLE_HIGHVALUES; break;
+ case 2: aRole = EXC_CHPROP_ROLE_LOWVALUES; break;
+ case 3: aRole = EXC_CHPROP_ROLE_CLOSEVALUES; break;
}
+ Reference< XLabeledDataSequence > xDataSeq = rxSeries->CreateValueSequence( aRole );
+ if( xDataSeq.is() )
+ aLabeledSeqVec.push_back( xDataSeq );
+ ++nRoleIdx;
+ if (nRoleIdx >= 4)
+ break;
+ }
- // attach labeled data sequences to series and insert series into chart type
- xDataSink->setData( ScfApiHelper::VectorToSequence( aLabeledSeqVec ) );
+ // attach labeled data sequences to series and insert series into chart type
+ xDataSink->setData( ScfApiHelper::VectorToSequence( aLabeledSeqVec ) );
- // formatting of special stock chart elements
- ScfPropertySet aTypeProp( xChartType );
- aTypeProp.SetBoolProperty( EXC_CHPROP_JAPANESE, HasDropBars() );
- aTypeProp.SetBoolProperty( EXC_CHPROP_SHOWFIRST, HasDropBars() );
- aTypeProp.SetBoolProperty( EXC_CHPROP_SHOWHIGHLOW, true );
- // hi-lo line format
- XclImpChLineFormatMap::const_iterator aHiLoLine = m_ChartLines.find( EXC_CHCHARTLINE_HILO );
- if (aHiLoLine != m_ChartLines.end())
- {
- ScfPropertySet aSeriesProp( xDataSeries );
- aHiLoLine->second.Convert( GetChRoot(), aSeriesProp, EXC_CHOBJTYPE_HILOLINE );
- }
- // white dropbar format
- XclImpChDropBarMap::const_iterator itr = m_DropBars.find(EXC_CHDROPBAR_UP);
- Reference<XPropertySet> xWhitePropSet;
- if (itr != m_DropBars.end() && aTypeProp.GetProperty(xWhitePropSet, EXC_CHPROP_WHITEDAY))
- {
- ScfPropertySet aBarProp( xWhitePropSet );
- itr->second->Convert(GetChRoot(), aBarProp);
- }
- // black dropbar format
- itr = m_DropBars.find(EXC_CHDROPBAR_DOWN);
- Reference<XPropertySet> xBlackPropSet;
- if (itr != m_DropBars.end() && aTypeProp.GetProperty(xBlackPropSet, EXC_CHPROP_BLACKDAY))
- {
- ScfPropertySet aBarProp( xBlackPropSet );
- itr->second->Convert(GetChRoot(), aBarProp);
- }
-
- // insert the series into the chart type object
- InsertDataSeries( xChartType, xDataSeries, nApiAxesSetIdx );
+ // formatting of special stock chart elements
+ ScfPropertySet aTypeProp( xChartType );
+ aTypeProp.SetBoolProperty( EXC_CHPROP_JAPANESE, HasDropBars() );
+ aTypeProp.SetBoolProperty( EXC_CHPROP_SHOWFIRST, HasDropBars() );
+ aTypeProp.SetBoolProperty( EXC_CHPROP_SHOWHIGHLOW, true );
+ // hi-lo line format
+ XclImpChLineFormatMap::const_iterator aHiLoLine = m_ChartLines.find( EXC_CHCHARTLINE_HILO );
+ if (aHiLoLine != m_ChartLines.end())
+ {
+ ScfPropertySet aSeriesProp( xDataSeries );
+ aHiLoLine->second.Convert( GetChRoot(), aSeriesProp, EXC_CHOBJTYPE_HILOLINE );
}
+ // white dropbar format
+ XclImpChDropBarMap::const_iterator itr = m_DropBars.find(EXC_CHDROPBAR_UP);
+ Reference<XPropertySet> xWhitePropSet;
+ if (itr != m_DropBars.end() && aTypeProp.GetProperty(xWhitePropSet, EXC_CHPROP_WHITEDAY))
+ {
+ ScfPropertySet aBarProp( xWhitePropSet );
+ itr->second->Convert(GetChRoot(), aBarProp);
+ }
+ // black dropbar format
+ itr = m_DropBars.find(EXC_CHDROPBAR_DOWN);
+ Reference<XPropertySet> xBlackPropSet;
+ if (itr != m_DropBars.end() && aTypeProp.GetProperty(xBlackPropSet, EXC_CHPROP_BLACKDAY))
+ {
+ ScfPropertySet aBarProp( xBlackPropSet );
+ itr->second->Convert(GetChRoot(), aBarProp);
+ }
+
+ // insert the series into the chart type object
+ InsertDataSeries( xChartType, xDataSeries, nApiAxesSetIdx );
}
// Axes =======================================================================
@@ -3572,32 +3578,32 @@ void XclImpChAxesSet::Finalize()
}
// invalid chart type groups are deleted now, check again with IsValidAxesSet()
- if( IsValidAxesSet() )
- {
- // always create missing axis objects
- if( !mxXAxis )
- mxXAxis = std::make_shared<XclImpChAxis>( GetChRoot(), EXC_CHAXIS_X );
- if( !mxYAxis )
- mxYAxis = std::make_shared<XclImpChAxis>( GetChRoot(), EXC_CHAXIS_Y );
- if( !mxZAxis && GetFirstTypeGroup()->Is3dDeepChart() )
- mxZAxis = std::make_shared<XclImpChAxis>( GetChRoot(), EXC_CHAXIS_Z );
-
- // finalize axes
- if( mxXAxis ) mxXAxis->Finalize();
- if( mxYAxis ) mxYAxis->Finalize();
- if( mxZAxis ) mxZAxis->Finalize();
-
- // finalize axis titles
- const XclImpChText* pDefText = GetChartData().GetDefaultText( EXC_CHTEXTTYPE_AXISTITLE );
- OUString aAutoTitle(ScResId(STR_AXISTITLE));
- lclFinalizeTitle( mxXAxisTitle, pDefText, aAutoTitle );
- lclFinalizeTitle( mxYAxisTitle, pDefText, aAutoTitle );
- lclFinalizeTitle( mxZAxisTitle, pDefText, aAutoTitle );
+ if( !IsValidAxesSet() )
+ return;
- // #i47745# missing plot frame -> invisible border and area
- if( !mxPlotFrame )
- mxPlotFrame = std::make_shared<XclImpChFrame>( GetChRoot(), EXC_CHOBJTYPE_PLOTFRAME );
- }
+ // always create missing axis objects
+ if( !mxXAxis )
+ mxXAxis = std::make_shared<XclImpChAxis>( GetChRoot(), EXC_CHAXIS_X );
+ if( !mxYAxis )
+ mxYAxis = std::make_shared<XclImpChAxis>( GetChRoot(), EXC_CHAXIS_Y );
+ if( !mxZAxis && GetFirstTypeGroup()->Is3dDeepChart() )
+ mxZAxis = std::make_shared<XclImpChAxis>( GetChRoot(), EXC_CHAXIS_Z );
+
+ // finalize axes
+ if( mxXAxis ) mxXAxis->Finalize();
+ if( mxYAxis ) mxYAxis->Finalize();
+ if( mxZAxis ) mxZAxis->Finalize();
+
+ // finalize axis titles
+ const XclImpChText* pDefText = GetChartData().GetDefaultText( EXC_CHTEXTTYPE_AXISTITLE );
+ OUString aAutoTitle(ScResId(STR_AXISTITLE));
+ lclFinalizeTitle( mxXAxisTitle, pDefText, aAutoTitle );
+ lclFinalizeTitle( mxYAxisTitle, pDefText, aAutoTitle );
+ lclFinalizeTitle( mxZAxisTitle, pDefText, aAutoTitle );
+
+ // #i47745# missing plot frame -> invisible border and area
+ if( !mxPlotFrame )
+ mxPlotFrame = std::make_shared<XclImpChFrame>( GetChRoot(), EXC_CHOBJTYPE_PLOTFRAME );
}
XclImpChTypeGroupRef XclImpChAxesSet::GetTypeGroup( sal_uInt16 nGroupIdx ) const
@@ -3633,35 +3639,35 @@ OUString XclImpChAxesSet::GetSingleSeriesTitle() const
void XclImpChAxesSet::Convert( Reference< XDiagram > const & xDiagram ) const
{
- if( IsValidAxesSet() && xDiagram.is() )
- {
- // diagram background formatting
- if( GetAxesSetId() == EXC_CHAXESSET_PRIMARY )
- ConvertBackground( xDiagram );
+ if( !(IsValidAxesSet() && xDiagram.is()) )
+ return;
- // create the coordinate system, this inserts all chart types and series
- Reference< XCoordinateSystem > xCoordSystem = CreateCoordSystem( xDiagram );
- if( xCoordSystem.is() )
- {
- // insert coordinate system, if not already done
- try
- {
- Reference< XCoordinateSystemContainer > xCoordSystemCont( xDiagram, UNO_QUERY_THROW );
- Sequence< Reference< XCoordinateSystem > > aCoordSystems = xCoordSystemCont->getCoordinateSystems();
- if( !aCoordSystems.hasElements() )
- xCoordSystemCont->addCoordinateSystem( xCoordSystem );
- }
- catch( Exception& )
- {
- OSL_FAIL( "XclImpChAxesSet::Convert - cannot insert coordinate system" );
- }
+ // diagram background formatting
+ if( GetAxesSetId() == EXC_CHAXESSET_PRIMARY )
+ ConvertBackground( xDiagram );
- // create the axes with grids and axis titles and insert them into the diagram
- ConvertAxis( mxXAxis, mxXAxisTitle, xCoordSystem, mxYAxis.get() );
- ConvertAxis( mxYAxis, mxYAxisTitle, xCoordSystem, mxXAxis.get() );
- ConvertAxis( mxZAxis, mxZAxisTitle, xCoordSystem, nullptr );
- }
+ // create the coordinate system, this inserts all chart types and series
+ Reference< XCoordinateSystem > xCoordSystem = CreateCoordSystem( xDiagram );
+ if( !xCoordSystem.is() )
+ return;
+
+ // insert coordinate system, if not already done
+ try
+ {
+ Reference< XCoordinateSystemContainer > xCoordSystemCont( xDiagram, UNO_QUERY_THROW );
+ Sequence< Reference< XCoordinateSystem > > aCoordSystems = xCoordSystemCont->getCoordinateSystems();
+ if( !aCoordSystems.hasElements() )
+ xCoordSystemCont->addCoordinateSystem( xCoordSystem );
}
+ catch( Exception& )
+ {
+ OSL_FAIL( "XclImpChAxesSet::Convert - cannot insert coordinate system" );
+ }
+
+ // create the axes with grids and axis titles and insert them into the diagram
+ ConvertAxis( mxXAxis, mxXAxisTitle, xCoordSystem, mxYAxis.get() );
+ ConvertAxis( mxYAxis, mxYAxisTitle, xCoordSystem, mxXAxis.get() );
+ ConvertAxis( mxZAxis, mxZAxisTitle, xCoordSystem, nullptr );
}
void XclImpChAxesSet::ConvertTitlePositions() const
@@ -3780,36 +3786,36 @@ void XclImpChAxesSet::ConvertAxis(
XclImpChAxisRef const & xChAxis, XclImpChTextRef const & xChAxisTitle,
Reference< XCoordinateSystem > const & xCoordSystem, const XclImpChAxis* pCrossingAxis ) const
{
- if( xChAxis )
+ if( !xChAxis )
+ return;
+
+ // create and attach the axis object
+ Reference< XAxis > xAxis = CreateAxis( *xChAxis, pCrossingAxis );
+ if( !xAxis.is() )
+ return;
+
+ // create and attach the axis title
+ if( xChAxisTitle ) try
{
- // create and attach the axis object
- Reference< XAxis > xAxis = CreateAxis( *xChAxis, pCrossingAxis );
- if( xAxis.is() )
- {
- // create and attach the axis title
- if( xChAxisTitle ) try
- {
- Reference< XTitled > xTitled( xAxis, UNO_QUERY_THROW );
- Reference< XTitle > xTitle( xChAxisTitle->CreateTitle(), UNO_SET_THROW );
- xTitled->setTitleObject( xTitle );
- }
- catch( Exception& )
- {
- OSL_FAIL( "XclImpChAxesSet::ConvertAxis - cannot set axis title" );
- }
+ Reference< XTitled > xTitled( xAxis, UNO_QUERY_THROW );
+ Reference< XTitle > xTitle( xChAxisTitle->CreateTitle(), UNO_SET_THROW );
+ xTitled->setTitleObject( xTitle );
+ }
+ catch( Exception& )
+ {
+ OSL_FAIL( "XclImpChAxesSet::ConvertAxis - cannot set axis title" );
+ }
- // insert axis into coordinate system
- try
- {
- sal_Int32 nApiAxisDim = xChAxis->GetApiAxisDimension();
- sal_Int32 nApiAxesSetIdx = GetApiAxesSetIndex();
- xCoordSystem->setAxisByDimension( nApiAxisDim, xAxis, nApiAxesSetIdx );
- }
- catch( Exception& )
- {
- OSL_FAIL( "XclImpChAxesSet::ConvertAxis - cannot set axis" );
- }
- }
+ // insert axis into coordinate system
+ try
+ {
+ sal_Int32 nApiAxisDim = xChAxis->GetApiAxisDimension();
+ sal_Int32 nApiAxesSetIdx = GetApiAxesSetIndex();
+ xCoordSystem->setAxisByDimension( nApiAxisDim, xAxis, nApiAxesSetIdx );
+ }
+ catch( Exception& )
+ {
+ OSL_FAIL( "XclImpChAxesSet::ConvertAxis - cannot set axis" );
}
}
@@ -4047,18 +4053,19 @@ void XclImpChChart::Convert( const Reference<XChartDocument>& xChartDoc,
// start listening to this chart
ScDocument& rDoc = GetRoot().GetDoc();
- if( ScChartListenerCollection* pChartCollection = rDoc.GetChartListenerCollection() )
+ ScChartListenerCollection* pChartCollection = rDoc.GetChartListenerCollection();
+ if(!pChartCollection)
+ return;
+
+ ::std::unique_ptr< ::std::vector< ScTokenRef > > xRefTokens( new ::std::vector< ScTokenRef > );
+ for( const auto& rxSeries : maSeries )
+ rxSeries->FillAllSourceLinks( *xRefTokens );
+ if( !xRefTokens->empty() )
{
- ::std::unique_ptr< ::std::vector< ScTokenRef > > xRefTokens( new ::std::vector< ScTokenRef > );
- for( const auto& rxSeries : maSeries )
- rxSeries->FillAllSourceLinks( *xRefTokens );
- if( !xRefTokens->empty() )
- {
- ::std::unique_ptr< ScChartListener > xListener( new ScChartListener( rObjName, &rDoc, std::move(xRefTokens) ) );
- xListener->SetUsed( true );
- xListener->StartListeningTo();
- pChartCollection->insert( xListener.release() );
- }
+ ::std::unique_ptr< ScChartListener > xListener( new ScChartListener( rObjName, &rDoc, std::move(xRefTokens) ) );
+ xListener->SetUsed( true );
+ xListener->StartListeningTo();
+ pChartCollection->insert( xListener.release() );
}
}
diff --git a/sc/source/filter/excel/xicontent.cxx b/sc/source/filter/excel/xicontent.cxx
index 67ec6c1cf11e..034939e05abb 100644
--- a/sc/source/filter/excel/xicontent.cxx
+++ b/sc/source/filter/excel/xicontent.cxx
@@ -954,18 +954,18 @@ void XclImpWebQuery::ReadParamqry( XclImpStream& rStrm )
{
sal_uInt16 nFlags = rStrm.ReaduInt16();
sal_uInt16 nType = ::extract_value< sal_uInt16 >( nFlags, 0, 3 );
- if( (nType == EXC_PQRYTYPE_WEBQUERY) && ::get_flag( nFlags, EXC_PQRY_WEBQUERY ) )
+ if( !((nType == EXC_PQRYTYPE_WEBQUERY) && ::get_flag( nFlags, EXC_PQRY_WEBQUERY )) )
+ return;
+
+ if( ::get_flag( nFlags, EXC_PQRY_TABLES ) )
{
- if( ::get_flag( nFlags, EXC_PQRY_TABLES ) )
- {
- meMode = xlWQAllTables;
- maTables = ScfTools::GetHTMLTablesName();
- }
- else
- {
- meMode = xlWQDocument;
- maTables = ScfTools::GetHTMLDocName();
- }
+ meMode = xlWQAllTables;
+ maTables = ScfTools::GetHTMLTablesName();
+ }
+ else
+ {
+ meMode = xlWQDocument;
+ maTables = ScfTools::GetHTMLDocName();
}
}
@@ -987,26 +987,26 @@ void XclImpWebQuery::ReadWqsettings( XclImpStream& rStrm )
void XclImpWebQuery::ReadWqtables( XclImpStream& rStrm )
{
- if( meMode == xlWQSpecTables )
- {
- rStrm.Ignore( 4 );
- OUString aTables( rStrm.ReadUniString() );
+ if( meMode != xlWQSpecTables )
+ return;
- const sal_Unicode cSep = ';';
- const OUString aQuotedPairs( "\"\"" );
- maTables.clear();
- for ( sal_Int32 nStringIx {aTables.isEmpty() ? -1 : 0}; nStringIx>=0; )
+ rStrm.Ignore( 4 );
+ OUString aTables( rStrm.ReadUniString() );
+
+ const sal_Unicode cSep = ';';
+ const OUString aQuotedPairs( "\"\"" );
+ maTables.clear();
+ for ( sal_Int32 nStringIx {aTables.isEmpty() ? -1 : 0}; nStringIx>=0; )
+ {
+ OUString aToken( ScStringUtil::GetQuotedToken( aTables, 0, aQuotedPairs, ',', nStringIx ) );
+ sal_Int32 nTabNum = CharClass::isAsciiNumeric( aToken ) ? aToken.toInt32() : 0;
+ if( nTabNum > 0 )
+ maTables = ScGlobal::addToken( maTables, ScfTools::GetNameFromHTMLIndex( static_cast< sal_uInt32 >( nTabNum ) ), cSep );
+ else
{
- OUString aToken( ScStringUtil::GetQuotedToken( aTables, 0, aQuotedPairs, ',', nStringIx ) );
- sal_Int32 nTabNum = CharClass::isAsciiNumeric( aToken ) ? aToken.toInt32() : 0;
- if( nTabNum > 0 )
- maTables = ScGlobal::addToken( maTables, ScfTools::GetNameFromHTMLIndex( static_cast< sal_uInt32 >( nTabNum ) ), cSep );
- else
- {
- ScGlobal::EraseQuotes( aToken, '"', false );
- if( !aToken.isEmpty() )
- maTables = ScGlobal::addToken( maTables, ScfTools::GetNameFromHTMLName( aToken ), cSep );
- }
+ ScGlobal::EraseQuotes( aToken, '"', false );
+ if( !aToken.isEmpty() )
+ maTables = ScGlobal::addToken( maTables, ScfTools::GetNameFromHTMLName( aToken ), cSep );
}
}
}
diff --git a/sc/source/filter/excel/xiescher.cxx b/sc/source/filter/excel/xiescher.cxx
index fa7ea9c35a10..b3e1c10ac424 100644
--- a/sc/source/filter/excel/xiescher.cxx
+++ b/sc/source/filter/excel/xiescher.cxx
@@ -605,25 +605,25 @@ void XclImpDrawObjBase::ReadMacro5( XclImpStream& rStrm, sal_uInt16 nMacroSize )
void XclImpDrawObjBase::ReadMacro8( XclImpStream& rStrm )
{
maMacroName.clear();
- if( rStrm.GetRecLeft() > 6 )
+ if( rStrm.GetRecLeft() <= 6 )
+ return;
+
+ // macro is stored in a tNameXR token containing a link to a defined name
+ sal_uInt16 nFmlaSize;
+ nFmlaSize = rStrm.ReaduInt16();
+ rStrm.Ignore( 4 );
+ OSL_ENSURE( nFmlaSize == 7, "XclImpDrawObjBase::ReadMacro - unexpected formula size" );
+ if( nFmlaSize == 7 )
{
- // macro is stored in a tNameXR token containing a link to a defined name
- sal_uInt16 nFmlaSize;
- nFmlaSize = rStrm.ReaduInt16();
- rStrm.Ignore( 4 );
- OSL_ENSURE( nFmlaSize == 7, "XclImpDrawObjBase::ReadMacro - unexpected formula size" );
- if( nFmlaSize == 7 )
- {
- sal_uInt8 nTokenId;
- sal_uInt16 nExtSheet, nExtName;
- nTokenId = rStrm.ReaduInt8();
- nExtSheet = rStrm.ReaduInt16();
- nExtName = rStrm.ReaduInt16();
- OSL_ENSURE( nTokenId == XclTokenArrayHelper::GetTokenId( EXC_TOKID_NAMEX, EXC_TOKCLASS_REF ),
- "XclImpDrawObjBase::ReadMacro - tNameXR token expected" );
- if( nTokenId == XclTokenArrayHelper::GetTokenId( EXC_TOKID_NAMEX, EXC_TOKCLASS_REF ) )
- maMacroName = GetLinkManager().GetMacroName( nExtSheet, nExtName );
- }
+ sal_uInt8 nTokenId;
+ sal_uInt16 nExtSheet, nExtName;
+ nTokenId = rStrm.ReaduInt8();
+ nExtSheet = rStrm.ReaduInt16();
+ nExtName = rStrm.ReaduInt16();
+ OSL_ENSURE( nTokenId == XclTokenArrayHelper::GetTokenId( EXC_TOKID_NAMEX, EXC_TOKCLASS_REF ),
+ "XclImpDrawObjBase::ReadMacro - tNameXR token expected" );
+ if( nTokenId == XclTokenArrayHelper::GetTokenId( EXC_TOKID_NAMEX, EXC_TOKCLASS_REF ) )
+ maMacroName = GetLinkManager().GetMacroName( nExtSheet, nExtName );
}
}
@@ -954,21 +954,21 @@ void XclImpDrawObjBase::ImplReadObj8( XclImpStream& rStrm )
record that contains the DFF data of the next drawing object! So we
have to skip just enough CONTINUE records to look at the next
MSODRAWING/CONTINUE record. */
- if( (rStrm.GetNextRecId() == EXC_ID3_IMGDATA) && rStrm.StartNextRecord() )
+ if( !((rStrm.GetNextRecId() == EXC_ID3_IMGDATA) && rStrm.StartNextRecord()) )
+ return;
+
+ sal_uInt32 nDataSize;
+ rStrm.Ignore( 4 );
+ nDataSize = rStrm.ReaduInt32();
+ nDataSize -= rStrm.GetRecLeft();
+ // skip following CONTINUE records until IMGDATA ends
+ while( (nDataSize > 0) && (rStrm.GetNextRecId() == EXC_ID_CONT) && rStrm.StartNextRecord() )
{
- sal_uInt32 nDataSize;
- rStrm.Ignore( 4 );
- nDataSize = rStrm.ReaduInt32();
- nDataSize -= rStrm.GetRecLeft();
- // skip following CONTINUE records until IMGDATA ends
- while( (nDataSize > 0) && (rStrm.GetNextRecId() == EXC_ID_CONT) && rStrm.StartNextRecord() )
- {
- OSL_ENSURE( nDataSize >= rStrm.GetRecLeft(), "XclImpDrawObjBase::ImplReadObj8 - CONTINUE too long" );
- nDataSize -= ::std::min< sal_uInt32 >( rStrm.GetRecLeft(), nDataSize );
- }
- OSL_ENSURE( nDataSize == 0, "XclImpDrawObjBase::ImplReadObj8 - missing CONTINUE records" );
- // next record may be MSODRAWING or CONTINUE or anything else
+ OSL_ENSURE( nDataSize >= rStrm.GetRecLeft(), "XclImpDrawObjBase::ImplReadObj8 - CONTINUE too long" );
+ nDataSize -= ::std::min< sal_uInt32 >( rStrm.GetRecLeft(), nDataSize );
}
+ OSL_ENSURE( nDataSize == 0, "XclImpDrawObjBase::ImplReadObj8 - missing CONTINUE records" );
+ // next record may be MSODRAWING or CONTINUE or anything else
}
void XclImpDrawObjVector::InsertGrouped( XclImpDrawObjRef const & xDrawObj )
@@ -1775,18 +1775,18 @@ SdrObjectUniquePtr XclImpChartObj::DoCreateSdrObj( XclImpDffConverter& rDffConv,
void XclImpChartObj::DoPostProcessSdrObj( XclImpDffConverter& rDffConv, SdrObject& rSdrObj ) const
{
const SdrOle2Obj* pSdrOleObj = dynamic_cast< const SdrOle2Obj* >( &rSdrObj );
- if( mxChart && pSdrOleObj )
+ if( !(mxChart && pSdrOleObj) )
+ return;
+
+ const Reference< XEmbeddedObject >& xEmbObj = pSdrOleObj->GetObjRef();
+ if( xEmbObj.is() && ::svt::EmbeddedObjectRef::TryRunningState( xEmbObj ) ) try
+ {
+ Reference< XEmbedPersist > xPersist( xEmbObj, UNO_QUERY_THROW );
+ Reference< XModel > xModel( xEmbObj->getComponent(), UNO_QUERY_THROW );
+ mxChart->Convert( xModel, rDffConv, xPersist->getEntryName(), rSdrObj.GetLogicRect() );
+ }
+ catch( const Exception& )
{
- const Reference< XEmbeddedObject >& xEmbObj = pSdrOleObj->GetObjRef();
- if( xEmbObj.is() && ::svt::EmbeddedObjectRef::TryRunningState( xEmbObj ) ) try
- {
- Reference< XEmbedPersist > xPersist( xEmbObj, UNO_QUERY_THROW );
- Reference< XModel > xModel( xEmbObj->getComponent(), UNO_QUERY_THROW );
- mxChart->Convert( xModel, rDffConv, xPersist->getEntryName(), rSdrObj.GetLogicRect() );
- }
- catch( const Exception& )
- {
- }
}
}
@@ -1889,67 +1889,71 @@ void XclImpControlHelper::ApplySheetLinkProps() const
return;
// sheet links
- if( SfxObjectShell* pDocShell = mrRoot.GetDocShell() )
+ SfxObjectShell* pDocShell = mrRoot.GetDocShell();
+ if(!pDocShell)
+ return;
+
+ Reference< XMultiServiceFactory > xFactory( pDocShell->GetModel(), UNO_QUERY );
+ if( !xFactory.is() )
+ return;
+
+ // cell link
+ if( mxCellLink ) try
{
- Reference< XMultiServiceFactory > xFactory( pDocShell->GetModel(), UNO_QUERY );
- if( xFactory.is() )
- {
- // cell link
- if( mxCellLink ) try
- {
- Reference< XBindableValue > xBindable( xCtrlModel, UNO_QUERY_THROW );
+ Reference< XBindableValue > xBindable( xCtrlModel, UNO_QUERY_THROW );
- // create argument sequence for createInstanceWithArguments()
- CellAddress aApiAddress;
- ScUnoConversion::FillApiAddress( aApiAddress, *mxCellLink );
+ // create argument sequence for createInstanceWithArguments()
+ CellAddress aApiAddress;
+ ScUnoConversion::FillApiAddress( aApiAddress, *mxCellLink );
- NamedValue aValue;
- aValue.Name = SC_UNONAME_BOUNDCELL;
- aValue.Value <<= aApiAddress;
+ NamedValue aValue;
+ aValue.Name = SC_UNONAME_BOUNDCELL;
+ aValue.Value <<= aApiAddress;
- Sequence< Any > aArgs( 1 );
- aArgs[ 0 ] <<= aValue;
+ Sequence< Any > aArgs( 1 );
+ aArgs[ 0 ] <<= aValue;
- // create the CellValueBinding instance and set at the control model
- OUString aServiceName;
- switch( meBindMode )
- {
- case EXC_CTRL_BINDCONTENT: aServiceName = SC_SERVICENAME_VALBIND; break;
- case EXC_CTRL_BINDPOSITION: aServiceName = SC_SERVICENAME_LISTCELLBIND; break;
- }
- Reference< XValueBinding > xBinding(
- xFactory->createInstanceWithArguments( aServiceName, aArgs ), UNO_QUERY_THROW );
- xBindable->setValueBinding( xBinding );
- }
- catch( const Exception& )
- {
- }
+ // create the CellValueBinding instance and set at the control model
+ OUString aServiceName;
+ switch( meBindMode )
+ {
+ case EXC_CTRL_BINDCONTENT: aServiceName = SC_SERVICENAME_VALBIND; break;
+ case EXC_CTRL_BINDPOSITION: aServiceName = SC_SERVICENAME_LISTCELLBIND; break;
+ }
+ Reference< XValueBinding > xBinding(
+ xFactory->createInstanceWithArguments( aServiceName, aArgs ), UNO_QUERY_THROW );
+ xBindable->setValueBinding( xBinding );
+ }
+ catch( const Exception& )
+ {
+ }
- // source range
- if( mxSrcRange ) try
- {
- Reference< XListEntrySink > xEntrySink( xCtrlModel, UNO_QUERY_THROW );
+ // source range
+ if( !mxSrcRange )
+ return;
- // create argument sequence for createInstanceWithArguments()
- CellRangeAddress aApiRange;
- ScUnoConversion::FillApiRange( aApiRange, *mxSrcRange );
+ try
+ {
+ Reference< XListEntrySink > xEntrySink( xCtrlModel, UNO_QUERY_THROW );
- NamedValue aValue;
- aValue.Name = SC_UNONAME_CELLRANGE;
- aValue.Value <<= aApiRange;
+ // create argument sequence for createInstanceWithArguments()
+ CellRangeAddress aApiRange;
+ ScUnoConversion::FillApiRange( aApiRange, *mxSrcRange );
- Sequence< Any > aArgs( 1 );
- aArgs[ 0 ] <<= aValue;
+ NamedValue aValue;
+ aValue.Name = SC_UNONAME_CELLRANGE;
+ aValue.Value <<= aApiRange;
- // create the EntrySource instance and set at the control model
- Reference< XListEntrySource > xEntrySource( xFactory->createInstanceWithArguments(
- SC_SERVICENAME_LISTSOURCE, aArgs ), UNO_QUERY_THROW );
- xEntrySink->setListEntrySource( xEntrySource );
- }
- catch( const Exception& )
- {
- }
- }
+ Sequence< Any > aArgs( 1 );
+ aArgs[ 0 ] <<= aValue;
+
+ // create the EntrySource instance and set at the control model
+ Reference< XListEntrySource > xEntrySource( xFactory->createInstanceWithArguments(
+ SC_SERVICENAME_LISTSOURCE, aArgs ), UNO_QUERY_THROW );
+ xEntrySink->setListEntrySource( xEntrySource );
+ }
+ catch( const Exception& )
+ {
}
}
@@ -2755,31 +2759,31 @@ void XclImpListBoxObj::DoProcessControl( ScfPropertySet& rPropSet ) const
rPropSet.SetBoolProperty( "MultiSelection", bMultiSel );
// selection (do not set, if listbox is linked to a cell)
- if( !HasCellLink() )
- {
- ScfInt16Vec aSelVec;
+ if( HasCellLink() )
+ return;
- // multi selection: API expects sequence of list entry indexes
- if( bMultiSel )
- {
- sal_Int16 nIndex = 0;
- for( const auto& rItem : maSelection )
- {
- if( rItem != 0 )
- aSelVec.push_back( nIndex );
- ++nIndex;
- }
- }
- // single selection: mnSelEntry is one-based, API expects zero-based
- else if( mnSelEntry > 0 )
- aSelVec.push_back( static_cast< sal_Int16 >( mnSelEntry - 1 ) );
+ ScfInt16Vec aSelVec;
- if( !aSelVec.empty() )
+ // multi selection: API expects sequence of list entry indexes
+ if( bMultiSel )
+ {
+ sal_Int16 nIndex = 0;
+ for( const auto& rItem : maSelection )
{
- Sequence<sal_Int16> aSelSeq(aSelVec.data(), static_cast<sal_Int32>(aSelVec.size()));
- rPropSet.SetProperty( "DefaultSelection", aSelSeq );
+ if( rItem != 0 )
+ aSelVec.push_back( nIndex );
+ ++nIndex;
}
}
+ // single selection: mnSelEntry is one-based, API expects zero-based
+ else if( mnSelEntry > 0 )
+ aSelVec.push_back( static_cast< sal_Int16 >( mnSelEntry - 1 ) );
+
+ if( !aSelVec.empty() )
+ {
+ Sequence<sal_Int16> aSelSeq(aSelVec.data(), static_cast<sal_Int32>(aSelVec.size()));
+ rPropSet.SetProperty( "DefaultSelection", aSelSeq );
+ }
}
OUString XclImpListBoxObj::DoGetServiceName() const
@@ -3360,21 +3364,22 @@ void XclImpDffConverter::InitializeDrawing( XclImpDrawing& rDrawing, SdrModel& r
void XclImpDffConverter::ProcessObject( SdrObjList& rObjList, XclImpDrawObjBase& rDrawObj )
{
- if( rDrawObj.IsProcessSdrObj() )
+ if( !rDrawObj.IsProcessSdrObj() )
+ return;
+
+ const XclObjAnchor* pAnchor = rDrawObj.GetAnchor();
+ if(!pAnchor)
+ return;
+
+ tools::Rectangle aAnchorRect = GetConvData().mrDrawing.CalcAnchorRect( *pAnchor, false );
+ if( rDrawObj.IsValidSize( aAnchorRect ) )
{
- if( const XclObjAnchor* pAnchor = rDrawObj.GetAnchor() )
- {
- tools::Rectangle aAnchorRect = GetConvData().mrDrawing.CalcAnchorRect( *pAnchor, false );
- if( rDrawObj.IsValidSize( aAnchorRect ) )
- {
- // CreateSdrObject() recursively creates embedded child objects
- SdrObjectUniquePtr xSdrObj( rDrawObj.CreateSdrObject( *this, aAnchorRect, false ) );
- if( xSdrObj )
- rDrawObj.PreProcessSdrObject( *this, *xSdrObj );
- // call InsertSdrObject() also, if SdrObject is missing
- InsertSdrObject( rObjList, rDrawObj, xSdrObj.release() );
- }
- }
+ // CreateSdrObject() recursively creates embedded child objects
+ SdrObjectUniquePtr xSdrObj( rDrawObj.CreateSdrObject( *this, aAnchorRect, false ) );
+ if( xSdrObj )
+ rDrawObj.PreProcessSdrObject( *this, *xSdrObj );
+ // call InsertSdrObject() also, if SdrObject is missing
+ InsertSdrObject( rObjList, rDrawObj, xSdrObj.release() );
}
}
@@ -3539,23 +3544,24 @@ void XclImpDffConverter::ProcessClientAnchor2( SvStream& rDffStrm,
{
// find the OBJ record data related to the processed shape
XclImpDffConvData& rConvData = GetConvData();
- if( XclImpDrawObjBase* pDrawObj = rConvData.mrDrawing.FindDrawObj( rObjData.rSpHd ).get() )
- {
- OSL_ENSURE( rHeader.nRecType == DFF_msofbtClientAnchor, "XclImpDffConverter::ProcessClientAnchor2 - no client anchor record" );
- XclObjAnchor aAnchor;
- rHeader.SeekToContent( rDffStrm );
- sal_uInt8 nFlags(0);
- rDffStrm.ReadUChar( nFlags );
- rDffStrm.SeekRel( 1 ); // flags
- rDffStrm >> aAnchor; // anchor format equal to BIFF5 OBJ records
-
- pDrawObj->SetAnchor( aAnchor );
- rObjData.aChildAnchor = rConvData.mrDrawing.CalcAnchorRect( aAnchor, true );
- rObjData.bChildAnchor = true;
- // page anchoring is the best approximation we have if mbMove
- // is set
- rObjData.bPageAnchor = ( nFlags & 0x1 );
- }
+ XclImpDrawObjBase* pDrawObj = rConvData.mrDrawing.FindDrawObj( rObjData.rSpHd ).get();
+ if(!pDrawObj)
+ return;
+
+ OSL_ENSURE( rHeader.nRecType == DFF_msofbtClientAnchor, "XclImpDffConverter::ProcessClientAnchor2 - no client anchor record" );
+ XclObjAnchor aAnchor;
+ rHeader.SeekToContent( rDffStrm );
+ sal_uInt8 nFlags(0);
+ rDffStrm.ReadUChar( nFlags );
+ rDffStrm.SeekRel( 1 ); // flags
+ rDffStrm >> aAnchor; // anchor format equal to BIFF5 OBJ records
+
+ pDrawObj->SetAnchor( aAnchor );
+ rObjData.aChildAnchor = rConvData.mrDrawing.CalcAnchorRect( aAnchor, true );
+ rObjData.bChildAnchor = true;
+ // page anchoring is the best approximation we have if mbMove
+ // is set
+ rObjData.bPageAnchor = ( nFlags & 0x1 );
}
namespace {
@@ -3880,7 +3886,10 @@ void XclImpDffConverter::InitControlForm()
return;
rConvData.mbHasCtrlForm = true;
- if( SupportsOleObjects() ) try
+ if( !SupportsOleObjects() )
+ return;
+
+ try
{
Reference< XFormsSupplier > xFormsSupplier( rConvData.mrSdrPage.getUnoPage(), UNO_QUERY_THROW );
Reference< XNameContainer > xFormsNC( xFormsSupplier->getForms(), UNO_SET_THROW );
@@ -4238,32 +4247,32 @@ void XclImpSheetDrawing::ReadNote3( XclImpStream& rStrm )
nTotalLen = rStrm.ReaduInt16();
ScAddress aScNotePos( ScAddress::UNINITIALIZED );
- if( GetAddressConverter().ConvertAddress( aScNotePos, aXclPos, maScUsedArea.aStart.Tab(), true ) )
+ if( !GetAddressConverter().ConvertAddress( aScNotePos, aXclPos, maScUsedArea.aStart.Tab(), true ) )
+ return;
+
+ sal_uInt16 nPartLen = ::std::min( nTotalLen, static_cast< sal_uInt16 >( rStrm.GetRecLeft() ) );
+ OUStringBuffer aNoteText = rStrm.ReadRawByteString( nPartLen );
+ nTotalLen = nTotalLen - nPartLen;
+ while( (nTotalLen > 0) && (rStrm.GetNextRecId() == EXC_ID_NOTE) && rStrm.StartNextRecord() )
{
- sal_uInt16 nPartLen = ::std::min( nTotalLen, static_cast< sal_uInt16 >( rStrm.GetRecLeft() ) );
- OUStringBuffer aNoteText = rStrm.ReadRawByteString( nPartLen );
- nTotalLen = nTotalLen - nPartLen;
- while( (nTotalLen > 0) && (rStrm.GetNextRecId() == EXC_ID_NOTE) && rStrm.StartNextRecord() )
+ rStrm >> aXclPos;
+ nPartLen = rStrm.ReaduInt16();
+ OSL_ENSURE( aXclPos.mnRow == 0xFFFF, "XclImpObjectManager::ReadNote3 - missing continuation NOTE record" );
+ if( aXclPos.mnRow == 0xFFFF )
{
- rStrm >> aXclPos;
- nPartLen = rStrm.ReaduInt16();
- OSL_ENSURE( aXclPos.mnRow == 0xFFFF, "XclImpObjectManager::ReadNote3 - missing continuation NOTE record" );
- if( aXclPos.mnRow == 0xFFFF )
- {
- OSL_ENSURE( nPartLen <= nTotalLen, "XclImpObjectManager::ReadNote3 - string too long" );
- aNoteText.append(rStrm.ReadRawByteString( nPartLen ));
- nTotalLen = nTotalLen - ::std::min( nTotalLen, nPartLen );
- }
- else
- {
- // seems to be a new note, record already started -> load the note
- rStrm.Seek( EXC_REC_SEEK_TO_BEGIN );
- ReadNote( rStrm );
- nTotalLen = 0;
- }
+ OSL_ENSURE( nPartLen <= nTotalLen, "XclImpObjectManager::ReadNote3 - string too long" );
+ aNoteText.append(rStrm.ReadRawByteString( nPartLen ));
+ nTotalLen = nTotalLen - ::std::min( nTotalLen, nPartLen );
+ }
+ else
+ {
+ // seems to be a new note, record already started -> load the note
+ rStrm.Seek( EXC_REC_SEEK_TO_BEGIN );
+ ReadNote( rStrm );
+ nTotalLen = 0;
}
- ScNoteUtil::CreateNoteFromString( GetDoc(), aScNotePos, aNoteText.makeStringAndClear(), false, false );
}
+ ScNoteUtil::CreateNoteFromString( GetDoc(), aScNotePos, aNoteText.makeStringAndClear(), false, false );
}
void XclImpSheetDrawing::ReadNote8( XclImpStream& rStrm )
diff --git a/sc/source/filter/excel/xipage.cxx b/sc/source/filter/excel/xipage.cxx
index c0207a033b00..b33371c6f0f1 100644
--- a/sc/source/filter/excel/xipage.cxx
+++ b/sc/source/filter/excel/xipage.cxx
@@ -141,23 +141,23 @@ void XclImpPageSettings::ReadPageBreaks( XclImpStream& rStrm )
default: OSL_FAIL( "XclImpPageSettings::ReadPageBreaks - unknown record" );
}
- if( pVec )
- {
- bool bIgnore = GetBiff() == EXC_BIFF8; // ignore start/end columns or rows in BIFF8
+ if( !pVec )
+ return;
- sal_uInt16 nCount, nBreak;
- nCount = rStrm.ReaduInt16();
- pVec->clear();
- pVec->reserve( nCount );
+ bool bIgnore = GetBiff() == EXC_BIFF8; // ignore start/end columns or rows in BIFF8
- while( nCount-- )
- {
- nBreak = rStrm.ReaduInt16();
- if( nBreak )
- pVec->push_back( nBreak );
- if( bIgnore )
- rStrm.Ignore( 4 );
- }
+ sal_uInt16 nCount, nBreak;
+ nCount = rStrm.ReaduInt16();
+ pVec->clear();
+ pVec->reserve( nCount );
+
+ while( nCount-- )
+ {
+ nBreak = rStrm.ReaduInt16();
+ if( nBreak )
+ pVec->push_back( nBreak );
+ if( bIgnore )
+ rStrm.Ignore( 4 );
}
}
diff --git a/sc/source/filter/excel/xipivot.cxx b/sc/source/filter/excel/xipivot.cxx
index deaa0f8c30f1..685a03b8997b 100644
--- a/sc/source/filter/excel/xipivot.cxx
+++ b/sc/source/filter/excel/xipivot.cxx
@@ -278,66 +278,66 @@ void XclImpPCField::ReadSxfield( XclImpStream& rStrm )
// for now, ignore data type of calculated fields
OSL_ENSURE( bCalced || bType || bTypeNone, "XclImpPCField::ReadSxfield - unknown item data type" );
- if( nVisC > 0 || bPostp )
+ if( !(nVisC > 0 || bPostp) )
+ return;
+
+ if( bItems && !bPostp )
{
- if( bItems && !bPostp )
+ if( !bCalced )
{
- if( !bCalced )
+ // 1) standard fields and standard grouping fields
+ if( !bNum )
{
- // 1) standard fields and standard grouping fields
- if( !bNum )
- {
- // 1a) standard field without grouping
- if( bType && (nGroupC == 0) && (nBaseC == 0) && (nOrigC == nVisC) )
- meFieldType = EXC_PCFIELD_STANDARD;
+ // 1a) standard field without grouping
+ if( bType && (nGroupC == 0) && (nBaseC == 0) && (nOrigC == nVisC) )
+ meFieldType = EXC_PCFIELD_STANDARD;
- // 1b) standard grouping field
- else if( bTypeNone && (nGroupC == nVisC) && (nBaseC > 0) && (nOrigC == 0) )
- meFieldType = EXC_PCFIELD_STDGROUP;
- }
- // 2) numerical grouping fields
- else if( (nGroupC == nVisC) && (nBaseC == 0) )
+ // 1b) standard grouping field
+ else if( bTypeNone && (nGroupC == nVisC) && (nBaseC > 0) && (nOrigC == 0) )
+ meFieldType = EXC_PCFIELD_STDGROUP;
+ }
+ // 2) numerical grouping fields
+ else if( (nGroupC == nVisC) && (nBaseC == 0) )
+ {
+ // 2a) single num/date grouping field without child grouping field
+ if( !bChild && bType && (nOrigC > 0) )
{
- // 2a) single num/date grouping field without child grouping field
- if( !bChild && bType && (nOrigC > 0) )
+ switch( nType )
{
- switch( nType )
- {
- case EXC_SXFIELD_DATA_INT:
- case EXC_SXFIELD_DATA_DBL: meFieldType = EXC_PCFIELD_NUMGROUP; break;
- case EXC_SXFIELD_DATA_DATE: meFieldType = EXC_PCFIELD_DATEGROUP; break;
- default: OSL_FAIL( "XclImpPCField::ReadSxfield - numeric group with wrong data type" );
- }
+ case EXC_SXFIELD_DATA_INT:
+ case EXC_SXFIELD_DATA_DBL: meFieldType = EXC_PCFIELD_NUMGROUP; break;
+ case EXC_SXFIELD_DATA_DATE: meFieldType = EXC_PCFIELD_DATEGROUP; break;
+ default: OSL_FAIL( "XclImpPCField::ReadSxfield - numeric group with wrong data type" );
}
-
- // 2b) first date grouping field with child grouping field
- else if( bChild && (nType == EXC_SXFIELD_DATA_DATE) && (nOrigC > 0) )
- meFieldType = EXC_PCFIELD_DATEGROUP;
-
- // 2c) additional date grouping field
- else if( bTypeNone && (nOrigC == 0) )
- meFieldType = EXC_PCFIELD_DATECHILD;
}
- OSL_ENSURE( meFieldType != EXC_PCFIELD_UNKNOWN, "XclImpPCField::ReadSxfield - invalid standard or grouped field" );
- }
- // 3) calculated field
- else
- {
- if( !bChild && !bNum && (nGroupC == 0) && (nBaseC == 0) && (nOrigC == 0) )
- meFieldType = EXC_PCFIELD_CALCED;
- OSL_ENSURE( meFieldType == EXC_PCFIELD_CALCED, "XclImpPCField::ReadSxfield - invalid calculated field" );
+ // 2b) first date grouping field with child grouping field
+ else if( bChild && (nType == EXC_SXFIELD_DATA_DATE) && (nOrigC > 0) )
+ meFieldType = EXC_PCFIELD_DATEGROUP;
+
+ // 2c) additional date grouping field
+ else if( bTypeNone && (nOrigC == 0) )
+ meFieldType = EXC_PCFIELD_DATECHILD;
}
+ OSL_ENSURE( meFieldType != EXC_PCFIELD_UNKNOWN, "XclImpPCField::ReadSxfield - invalid standard or grouped field" );
}
- else if( !bItems && bPostp )
+ // 3) calculated field
+ else
{
- // 4) standard field with postponed items
- if( !bCalced && !bChild && !bNum && bType && (nGroupC == 0) && (nBaseC == 0) && (nOrigC == 0) )
- meFieldType = EXC_PCFIELD_STANDARD;
- OSL_ENSURE( meFieldType == EXC_PCFIELD_STANDARD, "XclImpPCField::ReadSxfield - invalid postponed field" );
+ if( !bChild && !bNum && (nGroupC == 0) && (nBaseC == 0) && (nOrigC == 0) )
+ meFieldType = EXC_PCFIELD_CALCED;
+ OSL_ENSURE( meFieldType == EXC_PCFIELD_CALCED, "XclImpPCField::ReadSxfield - invalid calculated field" );
}
}
+
+ else if( !bItems && bPostp )
+ {
+ // 4) standard field with postponed items
+ if( !bCalced && !bChild && !bNum && bType && (nGroupC == 0) && (nBaseC == 0) && (nOrigC == 0) )
+ meFieldType = EXC_PCFIELD_STANDARD;
+ OSL_ENSURE( meFieldType == EXC_PCFIELD_STANDARD, "XclImpPCField::ReadSxfield - invalid postponed field" );
+ }
}
void XclImpPCField::ReadItem( XclImpStream& rStrm )
@@ -406,34 +406,35 @@ void XclImpPCField::ConvertGroupField( ScDPSaveData& rSaveData, const ScfStringV
void XclImpPCField::ConvertStdGroupField( ScDPSaveData& rSaveData, const ScfStringVec& rVisNames ) const
{
- if( const XclImpPCField* pBaseField = GetGroupBaseField() )
- {
- const OUString& rBaseFieldName = pBaseField->GetFieldName( rVisNames );
- if( !rBaseFieldName.isEmpty() )
- {
- // *** create a ScDPSaveGroupItem for each own item, they collect base item names ***
- ScDPSaveGroupItemVec aGroupItems;
- aGroupItems.reserve( maItems.size() );
- // initialize with own item names
- for( const auto& rxItem : maItems )
- aGroupItems.emplace_back( rxItem->ConvertToText() );
-
- // *** iterate over all base items, set their names at corresponding own items ***
- for( sal_uInt16 nItemIdx = 0, nItemCount = static_cast< sal_uInt16 >( maGroupOrder.size() ); nItemIdx < nItemCount; ++nItemIdx )
- if( maGroupOrder[ nItemIdx ] < aGroupItems.size() )
- if( const XclImpPCItem* pBaseItem = pBaseField->GetItem( nItemIdx ) )
- if( const XclImpPCItem* pGroupItem = GetItem( maGroupOrder[ nItemIdx ] ) )
- if( *pBaseItem != *pGroupItem )
- aGroupItems[ maGroupOrder[ nItemIdx ] ].AddElement( pBaseItem->ConvertToText() );
-
- // *** create the ScDPSaveGroupDimension object, fill with grouping info ***
- ScDPSaveGroupDimension aGroupDim( rBaseFieldName, GetFieldName( rVisNames ) );
- for( const auto& rGroupItem : aGroupItems )
- if( !rGroupItem.IsEmpty() )
- aGroupDim.AddGroupItem( rGroupItem );
- rSaveData.GetDimensionData()->AddGroupDimension( aGroupDim );
- }
- }
+ const XclImpPCField* pBaseField = GetGroupBaseField();
+ if(!pBaseField)
+ return;
+
+ const OUString& rBaseFieldName = pBaseField->GetFieldName( rVisNames );
+ if( rBaseFieldName.isEmpty() )
+ return;
+
+ // *** create a ScDPSaveGroupItem for each own item, they collect base item names ***
+ ScDPSaveGroupItemVec aGroupItems;
+ aGroupItems.reserve( maItems.size() );
+ // initialize with own item names
+ for( const auto& rxItem : maItems )
+ aGroupItems.emplace_back( rxItem->ConvertToText() );
+
+ // *** iterate over all base items, set their names at corresponding own items ***
+ for( sal_uInt16 nItemIdx = 0, nItemCount = static_cast< sal_uInt16 >( maGroupOrder.size() ); nItemIdx < nItemCount; ++nItemIdx )
+ if( maGroupOrder[ nItemIdx ] < aGroupItems.size() )
+ if( const XclImpPCItem* pBaseItem = pBaseField->GetItem( nItemIdx ) )
+ if( const XclImpPCItem* pGroupItem = GetItem( maGroupOrder[ nItemIdx ] ) )
+ if( *pBaseItem != *pGroupItem )
+ aGroupItems[ maGroupOrder[ nItemIdx ] ].AddElement( pBaseItem->ConvertToText() );
+
+ // *** create the ScDPSaveGroupDimension object, fill with grouping info ***
+ ScDPSaveGroupDimension aGroupDim( rBaseFieldName, GetFieldName( rVisNames ) );
+ for( const auto& rGroupItem : aGroupItems )
+ if( !rGroupItem.IsEmpty() )
+ aGroupDim.AddGroupItem( rGroupItem );
+ rSaveData.GetDimensionData()->AddGroupDimension( aGroupDim );
}
void XclImpPCField::ConvertNumGroupField( ScDPSaveData& rSaveData, const ScfStringVec& rVisNames ) const
@@ -1336,22 +1337,22 @@ void XclImpPivotTable::ReadSxivd( XclImpStream& rStrm )
pFieldVec = &maColFields;
// fill the vector from record data
- if( pFieldVec )
+ if( !pFieldVec )
+ return;
+
+ sal_uInt16 nSize = ulimit_cast< sal_uInt16 >( rStrm.GetRecSize() / 2, EXC_PT_MAXROWCOLCOUNT );
+ pFieldVec->reserve( nSize );
+ for( sal_uInt16 nIdx = 0; nIdx < nSize; ++nIdx )
{
- sal_uInt16 nSize = ulimit_cast< sal_uInt16 >( rStrm.GetRecSize() / 2, EXC_PT_MAXROWCOLCOUNT );
- pFieldVec->reserve( nSize );
- for( sal_uInt16 nIdx = 0; nIdx < nSize; ++nIdx )
- {
- sal_uInt16 nFieldIdx;
- nFieldIdx = rStrm.ReaduInt16();
- pFieldVec->push_back( nFieldIdx );
+ sal_uInt16 nFieldIdx;
+ nFieldIdx = rStrm.ReaduInt16();
+ pFieldVec->push_back( nFieldIdx );
- // set orientation at special data orientation field
- if( nFieldIdx == EXC_SXIVD_DATA )
- {
- sal_uInt16 nAxis = (pFieldVec == &maRowFields) ? EXC_SXVD_AXIS_ROW : EXC_SXVD_AXIS_COL;
- maDataOrientField.SetAxes( nAxis );
- }
+ // set orientation at special data orientation field
+ if( nFieldIdx == EXC_SXIVD_DATA )
+ {
+ sal_uInt16 nAxis = (pFieldVec == &maRowFields) ? EXC_SXVD_AXIS_ROW : EXC_SXVD_AXIS_COL;
+ maDataOrientField.SetAxes( nAxis );
}
}
}
@@ -1563,19 +1564,19 @@ void XclImpPivotTable::ApplyMergeFlags(const ScRange& rOutRange, const ScDPSaveD
aGeometry.getRowFieldPositions(aFieldBtns);
rSaveData.GetAllDimensionsByOrientation(sheet::DataPilotFieldOrientation_ROW, aFieldDims);
- if ((aFieldBtns.size() == aFieldDims.size()) || (maPTAddlInfo.mbCompactMode && aFieldBtns.size() == 1))
+ if (!((aFieldBtns.size() == aFieldDims.size()) || (maPTAddlInfo.mbCompactMode && aFieldBtns.size() == 1)))
+ return;
+
+ vector<const ScDPSaveDimension*>::const_iterator itDim = aFieldDims.begin();
+ for (const auto& rFieldBtn : aFieldBtns)
{
- vector<const ScDPSaveDimension*>::const_iterator itDim = aFieldDims.begin();
- for (const auto& rFieldBtn : aFieldBtns)
- {
- ScMF nMFlag = ScMF::Button;
- const ScDPSaveDimension* pDim = itDim != aFieldDims.end() ? *itDim++ : nullptr;
- if (pDim && pDim->HasInvisibleMember())
- nMFlag |= ScMF::HiddenMember;
- if (!pDim || !pDim->IsDataLayout())
- nMFlag |= ScMF::ButtonPopup;
- rDoc.ApplyFlagsTab(rFieldBtn.Col(), rFieldBtn.Row(), rFieldBtn.Col(), rFieldBtn.Row(), rFieldBtn.Tab(), nMFlag);
- }
+ ScMF nMFlag = ScMF::Button;
+ const ScDPSaveDimension* pDim = itDim != aFieldDims.end() ? *itDim++ : nullptr;
+ if (pDim && pDim->HasInvisibleMember())
+ nMFlag |= ScMF::HiddenMember;
+ if (!pDim || !pDim->IsDataLayout())
+ nMFlag |= ScMF::ButtonPopup;
+ rDoc.ApplyFlagsTab(rFieldBtn.Col(), rFieldBtn.Row(), rFieldBtn.Col(), rFieldBtn.Row(), rFieldBtn.Tab(), nMFlag);
}
}
diff --git a/sc/source/filter/excel/xiroot.cxx b/sc/source/filter/excel/xiroot.cxx
index 84a6560e1727..2ab8b0c324fd 100644
--- a/sc/source/filter/excel/xiroot.cxx
+++ b/sc/source/filter/excel/xiroot.cxx
@@ -270,22 +270,22 @@ OUString XclImpRoot::GetScAddInName( const OUString& rXclName )
void XclImpRoot::ReadCodeName( XclImpStream& rStrm, bool bGlobals )
{
- if( mrImpData.mbHasBasic && (GetBiff() == EXC_BIFF8) )
+ if( !(mrImpData.mbHasBasic && (GetBiff() == EXC_BIFF8)) )
+ return;
+
+ OUString aName = rStrm.ReadUniString();
+ if( aName.isEmpty() )
+ return;
+
+ if( bGlobals )
+ {
+ GetExtDocOptions().GetDocSettings().maGlobCodeName = aName;
+ GetDoc().SetCodeName( aName );
+ }
+ else
{
- OUString aName = rStrm.ReadUniString();
- if( !aName.isEmpty() )
- {
- if( bGlobals )
- {
- GetExtDocOptions().GetDocSettings().maGlobCodeName = aName;
- GetDoc().SetCodeName( aName );
- }
- else
- {
- GetExtDocOptions().SetCodeName( GetCurrScTab(), aName );
- GetDoc().SetCodeName( GetCurrScTab(), aName );
- }
- }
+ GetExtDocOptions().SetCodeName( GetCurrScTab(), aName );
+ GetDoc().SetCodeName( GetCurrScTab(), aName );
}
}
diff --git a/sc/source/filter/excel/xistream.cxx b/sc/source/filter/excel/xistream.cxx
index 0904903da3c0..f9c79325f39f 100644
--- a/sc/source/filter/excel/xistream.cxx
+++ b/sc/source/filter/excel/xistream.cxx
@@ -287,25 +287,25 @@ bool XclImpBiff8Decrypter::OnVerifyEncryptionData( const uno::Sequence< beans::N
void XclImpBiff8Decrypter::OnUpdate( std::size_t nOldStrmPos, std::size_t nNewStrmPos, sal_uInt16 /*nRecSize*/ )
{
- if( nNewStrmPos != nOldStrmPos )
- {
- sal_uInt32 nOldBlock = GetBlock( nOldStrmPos );
- sal_uInt16 nOldOffset = GetOffset( nOldStrmPos );
+ if( nNewStrmPos == nOldStrmPos )
+ return;
- sal_uInt32 nNewBlock = GetBlock( nNewStrmPos );
- sal_uInt16 nNewOffset = GetOffset( nNewStrmPos );
+ sal_uInt32 nOldBlock = GetBlock( nOldStrmPos );
+ sal_uInt16 nOldOffset = GetOffset( nOldStrmPos );
- /* Rekey cipher, if block changed or if previous offset in same block. */
- if( (nNewBlock != nOldBlock) || (nNewOffset < nOldOffset) )
- {
- mpCodec->InitCipher( nNewBlock );
- nOldOffset = 0; // reset nOldOffset for next if() statement
- }
+ sal_uInt32 nNewBlock = GetBlock( nNewStrmPos );
+ sal_uInt16 nNewOffset = GetOffset( nNewStrmPos );
- /* Seek to correct offset. */
- if( nNewOffset > nOldOffset )
- mpCodec->Skip( nNewOffset - nOldOffset );
+ /* Rekey cipher, if block changed or if previous offset in same block. */
+ if( (nNewBlock != nOldBlock) || (nNewOffset < nOldOffset) )
+ {
+ mpCodec->InitCipher( nNewBlock );
+ nOldOffset = 0; // reset nOldOffset for next if() statement
}
+
+ /* Seek to correct offset. */
+ if( nNewOffset > nOldOffset )
+ mpCodec->Skip( nNewOffset - nOldOffset );
}
sal_uInt16 XclImpBiff8Decrypter::OnRead( SvStream& rStrm, sal_uInt8* pnData, sal_uInt16 nBytes )
@@ -777,18 +777,18 @@ void XclImpStream::CopyRecordToStream( SvStream& rOutStrm )
void XclImpStream::Seek( std::size_t nPos )
{
- if( mbValidRec )
+ if( !mbValidRec )
+ return;
+
+ std::size_t nCurrPos = GetRecPos();
+ if( !mbValid || (nPos < nCurrPos) ) // from invalid state or backward
{
- std::size_t nCurrPos = GetRecPos();
- if( !mbValid || (nPos < nCurrPos) ) // from invalid state or backward
- {
- RestorePosition( maFirstRec );
- Ignore( nPos );
- }
- else if( nPos > nCurrPos ) // forward
- {
- Ignore( nPos - nCurrPos );
- }
+ RestorePosition( maFirstRec );
+ Ignore( nPos );
+ }
+ else if( nPos > nCurrPos ) // forward
+ {
+ Ignore( nPos - nCurrPos );
}
}
diff --git a/sc/source/filter/excel/xistyle.cxx b/sc/source/filter/excel/xistyle.cxx
index 0aef25ef2775..873d3c30da87 100644
--- a/sc/source/filter/excel/xistyle.cxx
+++ b/sc/source/filter/excel/xistyle.cxx
@@ -119,21 +119,22 @@ private:
void
XclImpPalette::ExportPalette()
{
- if( SfxObjectShell* pDocShell = mrRoot.GetDocShell() )
+ SfxObjectShell* pDocShell = mrRoot.GetDocShell();
+ if(!pDocShell)
+ return;
+
+ // copy values in color palette
+ sal_Int16 nColors = maColorTable.size();
+ ColorVec aColors;
+ aColors.resize( nColors );
+ for( sal_uInt16 nIndex = 0; nIndex < nColors; ++nIndex )
+ aColors[ nIndex ] = GetColor( nIndex );
+
+ uno::Reference< beans::XPropertySet > xProps( pDocShell->GetModel(), uno::UNO_QUERY );
+ if ( xProps.is() )
{
- // copy values in color palette
- sal_Int16 nColors = maColorTable.size();
- ColorVec aColors;
- aColors.resize( nColors );
- for( sal_uInt16 nIndex = 0; nIndex < nColors; ++nIndex )
- aColors[ nIndex ] = GetColor( nIndex );
-
- uno::Reference< beans::XPropertySet > xProps( pDocShell->GetModel(), uno::UNO_QUERY );
- if ( xProps.is() )
- {
- uno::Reference< container::XIndexAccess > xIndex( new PaletteIndex( aColors ) );
- xProps->setPropertyValue( "ColorPalette", uno::makeAny( xIndex ) );
- }
+ uno::Reference< container::XIndexAccess > xIndex( new PaletteIndex( aColors ) );
+ xProps->setPropertyValue( "ColorPalette", uno::makeAny( xIndex ) );
}
}
@@ -469,43 +470,44 @@ void XclImpFont::GuessScriptType()
mbHasAsian = mbHasCmplx = false;
// find the script types for which the font contains characters
- if( OutputDevice* pPrinter = GetPrinter() )
- {
- vcl::Font aFont( maData.maName, Size( 0, 10 ) );
- FontCharMapRef xFontCharMap;
+ OutputDevice* pPrinter = GetPrinter();
+ if(!pPrinter)
+ return;
- pPrinter->SetFont( aFont );
- if( pPrinter->GetFontCharMap( xFontCharMap ) )
- {
- // CJK fonts
- mbHasAsian =
- xFontCharMap->HasChar( 0x3041 ) || // 3040-309F: Hiragana
- xFontCharMap->HasChar( 0x30A1 ) || // 30A0-30FF: Katakana
- xFontCharMap->HasChar( 0x3111 ) || // 3100-312F: Bopomofo
- xFontCharMap->HasChar( 0x3131 ) || // 3130-318F: Hangul Compatibility Jamo
- xFontCharMap->HasChar( 0x3301 ) || // 3300-33FF: CJK Compatibility
- xFontCharMap->HasChar( 0x3401 ) || // 3400-4DBF: CJK Unified Ideographs Extension A
- xFontCharMap->HasChar( 0x4E01 ) || // 4E00-9FFF: CJK Unified Ideographs
- xFontCharMap->HasChar( 0x7E01 ) || // 4E00-9FFF: CJK Unified Ideographs
- xFontCharMap->HasChar( 0xA001 ) || // A001-A48F: Yi Syllables
- xFontCharMap->HasChar( 0xAC01 ) || // AC00-D7AF: Hangul Syllables
- xFontCharMap->HasChar( 0xCC01 ) || // AC00-D7AF: Hangul Syllables
- xFontCharMap->HasChar( 0xF901 ) || // F900-FAFF: CJK Compatibility Ideographs
- xFontCharMap->HasChar( 0xFF71 ); // FF00-FFEF: Halfwidth/Fullwidth Forms
- // CTL fonts
- mbHasCmplx =
- xFontCharMap->HasChar( 0x05D1 ) || // 0590-05FF: Hebrew
- xFontCharMap->HasChar( 0x0631 ) || // 0600-06FF: Arabic
- xFontCharMap->HasChar( 0x0721 ) || // 0700-074F: Syriac
- xFontCharMap->HasChar( 0x0911 ) || // 0900-0DFF: Indic scripts
- xFontCharMap->HasChar( 0x0E01 ) || // 0E00-0E7F: Thai
- xFontCharMap->HasChar( 0xFB21 ) || // FB1D-FB4F: Hebrew Presentation Forms
- xFontCharMap->HasChar( 0xFB51 ) || // FB50-FDFF: Arabic Presentation Forms-A
- xFontCharMap->HasChar( 0xFE71 ); // FE70-FEFF: Arabic Presentation Forms-B
- // Western fonts
- mbHasWstrn = (!mbHasAsian && !mbHasCmplx) || xFontCharMap->HasChar( 'A' );
- }
- }
+ vcl::Font aFont( maData.maName, Size( 0, 10 ) );
+ FontCharMapRef xFontCharMap;
+
+ pPrinter->SetFont( aFont );
+ if( !pPrinter->GetFontCharMap( xFontCharMap ) )
+ return;
+
+ // CJK fonts
+ mbHasAsian =
+ xFontCharMap->HasChar( 0x3041 ) || // 3040-309F: Hiragana
+ xFontCharMap->HasChar( 0x30A1 ) || // 30A0-30FF: Katakana
+ xFontCharMap->HasChar( 0x3111 ) || // 3100-312F: Bopomofo
+ xFontCharMap->HasChar( 0x3131 ) || // 3130-318F: Hangul Compatibility Jamo
+ xFontCharMap->HasChar( 0x3301 ) || // 3300-33FF: CJK Compatibility
+ xFontCharMap->HasChar( 0x3401 ) || // 3400-4DBF: CJK Unified Ideographs Extension A
+ xFontCharMap->HasChar( 0x4E01 ) || // 4E00-9FFF: CJK Unified Ideographs
+ xFontCharMap->HasChar( 0x7E01 ) || // 4E00-9FFF: CJK Unified Ideographs
+ xFontCharMap->HasChar( 0xA001 ) || // A001-A48F: Yi Syllables
+ xFontCharMap->HasChar( 0xAC01 ) || // AC00-D7AF: Hangul Syllables
+ xFontCharMap->HasChar( 0xCC01 ) || // AC00-D7AF: Hangul Syllables
+ xFontCharMap->HasChar( 0xF901 ) || // F900-FAFF: CJK Compatibility Ideographs
+ xFontCharMap->HasChar( 0xFF71 ); // FF00-FFEF: Halfwidth/Fullwidth Forms
+ // CTL fonts
+ mbHasCmplx =
+ xFontCharMap->HasChar( 0x05D1 ) || // 0590-05FF: Hebrew
+ xFontCharMap->HasChar( 0x0631 ) || // 0600-06FF: Arabic
+ xFontCharMap->HasChar( 0x0721 ) || // 0700-074F: Syriac
+ xFontCharMap->HasChar( 0x0911 ) || // 0900-0DFF: Indic scripts
+ xFontCharMap->HasChar( 0x0E01 ) || // 0E00-0E7F: Thai
+ xFontCharMap->HasChar( 0xFB21 ) || // FB1D-FB4F: Hebrew Presentation Forms
+ xFontCharMap->HasChar( 0xFB51 ) || // FB50-FDFF: Arabic Presentation Forms-A
+ xFontCharMap->HasChar( 0xFE71 ); // FE70-FEFF: Arabic Presentation Forms-B
+ // Western fonts
+ mbHasWstrn = (!mbHasAsian && !mbHasCmplx) || xFontCharMap->HasChar( 'A' );
}
XclImpFontBuffer::XclImpFontBuffer( const XclImpRoot& rRoot ) :
@@ -988,21 +990,21 @@ void XclImpCellBorder::FillToItemSet( SfxItemSet& rItemSet, const XclImpPalette&
aBoxItem.SetLine( &aLine, SvxBoxItemLine::BOTTOM );
ScfTools::PutItem( rItemSet, aBoxItem, bSkipPoolDefs );
}
- if( mbDiagUsed )
+ if( !mbDiagUsed )
+ return;
+
+ SvxLineItem aTLBRItem( ATTR_BORDER_TLBR );
+ SvxLineItem aBLTRItem( ATTR_BORDER_BLTR );
+ ::editeng::SvxBorderLine aLine;
+ if( lclConvertBorderLine( aLine, rPalette, mnDiagLine, mnDiagColor ) )
{
- SvxLineItem aTLBRItem( ATTR_BORDER_TLBR );
- SvxLineItem aBLTRItem( ATTR_BORDER_BLTR );
- ::editeng::SvxBorderLine aLine;
- if( lclConvertBorderLine( aLine, rPalette, mnDiagLine, mnDiagColor ) )
- {
- if( mbDiagTLtoBR )
- aTLBRItem.SetLine( &aLine );
- if( mbDiagBLtoTR )
- aBLTRItem.SetLine( &aLine );
- }
- ScfTools::PutItem( rItemSet, aTLBRItem, bSkipPoolDefs );
- ScfTools::PutItem( rItemSet, aBLTRItem, bSkipPoolDefs );
+ if( mbDiagTLtoBR )
+ aTLBRItem.SetLine( &aLine );
+ if( mbDiagBLtoTR )
+ aBLTRItem.SetLine( &aLine );
}
+ ScfTools::PutItem( rItemSet, aTLBRItem, bSkipPoolDefs );
+ ScfTools::PutItem( rItemSet, aBLTRItem, bSkipPoolDefs );
}
XclImpCellArea::XclImpCellArea()
@@ -1070,24 +1072,24 @@ void XclImpCellArea::FillFromCF8( sal_uInt16 nPattern, sal_uInt16 nColor, sal_uI
void XclImpCellArea::FillToItemSet( SfxItemSet& rItemSet, const XclImpPalette& rPalette, bool bSkipPoolDefs ) const
{
- if( mbPattUsed ) // colors may be both unused in cond. formats
- {
- SvxBrushItem aBrushItem( ATTR_BACKGROUND );
+ if( !mbPattUsed ) // colors may be both unused in cond. formats
+ return;
- // do not use IsTransparent() - old Calc filter writes transparency with different color indexes
- if( mnPattern == EXC_PATT_NONE )
- {
- aBrushItem.SetColor( COL_TRANSPARENT );
- }
- else
- {
- Color aFore( rPalette.GetColor( mbForeUsed ? mnForeColor : EXC_COLOR_WINDOWTEXT ) );
- Color aBack( rPalette.GetColor( mbBackUsed ? mnBackColor : EXC_COLOR_WINDOWBACK ) );
- aBrushItem.SetColor( XclTools::GetPatternColor( aFore, aBack, mnPattern ) );
- }
+ SvxBrushItem aBrushItem( ATTR_BACKGROUND );
- ScfTools::PutItem( rItemSet, aBrushItem, bSkipPoolDefs );
+ // do not use IsTransparent() - old Calc filter writes transparency with different color indexes
+ if( mnPattern == EXC_PATT_NONE )
+ {
+ aBrushItem.SetColor( COL_TRANSPARENT );
}
+ else
+ {
+ Color aFore( rPalette.GetColor( mbForeUsed ? mnForeColor : EXC_COLOR_WINDOWTEXT ) );
+ Color aBack( rPalette.GetColor( mbBackUsed ? mnBackColor : EXC_COLOR_WINDOWBACK ) );
+ aBrushItem.SetColor( XclTools::GetPatternColor( aFore, aBack, mnPattern ) );
+ }
+
+ ScfTools::PutItem( rItemSet, aBrushItem, bSkipPoolDefs );
}
XclImpXF::XclImpXF( const XclImpRoot& rRoot ) :
@@ -1375,31 +1377,31 @@ void XclImpXF::ApplyPatternToAttrVector(
}
// Make sure we skip unnamed styles.
- if (rPat.GetStyleName())
- {
- // Check for a gap between the last entry and this one.
- bool bHasGap = false;
- if (rAttrs.empty() && nRow1 > 0)
- // First attribute range doesn't start at row 0.
- bHasGap = true;
+ if (!rPat.GetStyleName())
+ return;
- if (!rAttrs.empty() && rAttrs.back().nEndRow + 1 < nRow1)
- bHasGap = true;
+ // Check for a gap between the last entry and this one.
+ bool bHasGap = false;
+ if (rAttrs.empty() && nRow1 > 0)
+ // First attribute range doesn't start at row 0.
+ bHasGap = true;
- if (bHasGap)
- {
- // Fill this gap with the default pattern.
- ScAttrEntry aEntry;
- aEntry.nEndRow = nRow1 - 1;
- aEntry.pPattern = rDoc.GetDefPattern();
- rAttrs.push_back(aEntry);
- }
+ if (!rAttrs.empty() && rAttrs.back().nEndRow + 1 < nRow1)
+ bHasGap = true;
+ if (bHasGap)
+ {
+ // Fill this gap with the default pattern.
ScAttrEntry aEntry;
- aEntry.nEndRow = nRow2;
- aEntry.pPattern = &rDoc.GetPool()->Put(rPat);
+ aEntry.nEndRow = nRow1 - 1;
+ aEntry.pPattern = rDoc.GetDefPattern();
rAttrs.push_back(aEntry);
}
+
+ ScAttrEntry aEntry;
+ aEntry.nEndRow = nRow2;
+ aEntry.pPattern = &rDoc.GetPool()->Put(rPat);
+ rAttrs.push_back(aEntry);
}
void XclImpXF::ApplyPattern(
@@ -1900,18 +1902,18 @@ void XclImpXFRangeBuffer::SetXF( const ScAddress& rScPos, sal_uInt16 nXFIndex, X
// set "center across selection" and "fill" attribute for all following empty cells
// ignore it on row default XFs
- if( eMode != xlXFModeRow )
+ if( eMode == xlXFModeRow )
+ return;
+
+ const XclImpXF* pXF = GetXFBuffer().GetXF( nXFIndex );
+ if( pXF && ((pXF->GetHorAlign() == EXC_XF_HOR_CENTER_AS) || (pXF->GetHorAlign() == EXC_XF_HOR_FILL)) )
{
- const XclImpXF* pXF = GetXFBuffer().GetXF( nXFIndex );
- if( pXF && ((pXF->GetHorAlign() == EXC_XF_HOR_CENTER_AS) || (pXF->GetHorAlign() == EXC_XF_HOR_FILL)) )
- {
- // expand last merged range if this attribute is set repeatedly
- ScRange* pRange = maMergeList.empty() ? nullptr : &maMergeList.back();
- if (pRange && (pRange->aEnd.Row() == nScRow) && (pRange->aEnd.Col() + 1 == nScCol) && (eMode == xlXFModeBlank))
- pRange->aEnd.IncCol();
- else if( eMode != xlXFModeBlank ) // do not merge empty cells
- maMergeList.push_back( ScRange( nScCol, nScRow, 0 ) );
- }
+ // expand last merged range if this attribute is set repeatedly
+ ScRange* pRange = maMergeList.empty() ? nullptr : &maMergeList.back();
+ if (pRange && (pRange->aEnd.Row() == nScRow) && (pRange->aEnd.Col() + 1 == nScCol) && (eMode == xlXFModeBlank))
+ pRange->aEnd.IncCol();
+ else if( eMode != xlXFModeBlank ) // do not merge empty cells
+ maMergeList.push_back( ScRange( nScCol, nScRow, 0 ) );
}
}
diff --git a/sc/source/filter/excel/xlchart.cxx b/sc/source/filter/excel/xlchart.cxx
index 18e16c2694b8..b55a446b08a5 100644
--- a/sc/source/filter/excel/xlchart.cxx
+++ b/sc/source/filter/excel/xlchart.cxx
@@ -842,52 +842,52 @@ void XclChPropSetHelper::ReadMarkerProperties(
XclChMarkerFormat& rMarkerFmt, const ScfPropertySet& rPropSet, sal_uInt16 nFormatIdx )
{
chart2::Symbol aApiSymbol;
- if( rPropSet.GetProperty( aApiSymbol, EXC_CHPROP_SYMBOL ) )
- {
- // clear automatic flag
- ::set_flag( rMarkerFmt.mnFlags, EXC_CHMARKERFORMAT_AUTO, false );
-
- // symbol style
- switch( aApiSymbol.Style )
- {
- case chart2::SymbolStyle_NONE:
- rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_NOSYMBOL;
- break;
- case chart2::SymbolStyle_STANDARD:
- switch( aApiSymbol.StandardSymbol )
- {
- case 0: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_SQUARE; break; // square
- case 1: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_DIAMOND; break; // diamond
- case 2: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_STDDEV; break; // arrow down
- case 3: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_TRIANGLE; break; // arrow up
- case 4: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_DOWJ; break; // arrow right, same as import
- case 5: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_PLUS; break; // arrow left
- case 6: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_CROSS; break; // bow tie
- case 7: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_STAR; break; // sand glass
- case 8: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_CIRCLE; break; // circle new in LibO3.5
- case 9: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_DIAMOND; break; // star new in LibO3.5
- case 10: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_CROSS; break; // X new in LibO3.5
- case 11: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_PLUS; break; // plus new in LibO3.5
- case 12: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_STAR; break; // asterisk new in LibO3.5
- case 13: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_STDDEV; break; // horizontal bar new in LibO3.5
- case 14: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_STAR; break; // vertical bar new in LibO3.5
- default: rMarkerFmt.mnMarkerType = XclChartHelper::GetAutoMarkerType( nFormatIdx );
- }
- break;
- default:
- rMarkerFmt.mnMarkerType = XclChartHelper::GetAutoMarkerType( nFormatIdx );
- }
- bool bHasFillColor = XclChartHelper::HasMarkerFillColor( rMarkerFmt.mnMarkerType );
- ::set_flag( rMarkerFmt.mnFlags, EXC_CHMARKERFORMAT_NOFILL, !bHasFillColor );
+ if( !rPropSet.GetProperty( aApiSymbol, EXC_CHPROP_SYMBOL ) )
+ return;
- // symbol size
- sal_Int32 nApiSize = (aApiSymbol.Size.Width + aApiSymbol.Size.Height + 1) / 2;
- rMarkerFmt.mnMarkerSize = XclTools::GetTwipsFromHmm( nApiSize );
+ // clear automatic flag
+ ::set_flag( rMarkerFmt.mnFlags, EXC_CHMARKERFORMAT_AUTO, false );
- // symbol colors
- rMarkerFmt.maLineColor = Color( aApiSymbol.BorderColor );
- rMarkerFmt.maFillColor = Color( aApiSymbol.FillColor );
+ // symbol style
+ switch( aApiSymbol.Style )
+ {
+ case chart2::SymbolStyle_NONE:
+ rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_NOSYMBOL;
+ break;
+ case chart2::SymbolStyle_STANDARD:
+ switch( aApiSymbol.StandardSymbol )
+ {
+ case 0: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_SQUARE; break; // square
+ case 1: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_DIAMOND; break; // diamond
+ case 2: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_STDDEV; break; // arrow down
+ case 3: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_TRIANGLE; break; // arrow up
+ case 4: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_DOWJ; break; // arrow right, same as import
+ case 5: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_PLUS; break; // arrow left
+ case 6: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_CROSS; break; // bow tie
+ case 7: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_STAR; break; // sand glass
+ case 8: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_CIRCLE; break; // circle new in LibO3.5
+ case 9: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_DIAMOND; break; // star new in LibO3.5
+ case 10: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_CROSS; break; // X new in LibO3.5
+ case 11: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_PLUS; break; // plus new in LibO3.5
+ case 12: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_STAR; break; // asterisk new in LibO3.5
+ case 13: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_STDDEV; break; // horizontal bar new in LibO3.5
+ case 14: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_STAR; break; // vertical bar new in LibO3.5
+ default: rMarkerFmt.mnMarkerType = XclChartHelper::GetAutoMarkerType( nFormatIdx );
+ }
+ break;
+ default:
+ rMarkerFmt.mnMarkerType = XclChartHelper::GetAutoMarkerType( nFormatIdx );
}
+ bool bHasFillColor = XclChartHelper::HasMarkerFillColor( rMarkerFmt.mnMarkerType );
+ ::set_flag( rMarkerFmt.mnFlags, EXC_CHMARKERFORMAT_NOFILL, !bHasFillColor );
+
+ // symbol size
+ sal_Int32 nApiSize = (aApiSymbol.Size.Width + aApiSymbol.Size.Height + 1) / 2;
+ rMarkerFmt.mnMarkerSize = XclTools::GetTwipsFromHmm( nApiSize );
+
+ // symbol colors
+ rMarkerFmt.maLineColor = Color( aApiSymbol.BorderColor );
+ rMarkerFmt.maFillColor = Color( aApiSymbol.FillColor );
}
sal_uInt16 XclChPropSetHelper::ReadRotationProperties( const ScfPropertySet& rPropSet, bool bSupportsStacked )
@@ -993,66 +993,67 @@ void XclChPropSetHelper::WriteEscherProperties( ScfPropertySet& rPropSet,
const XclChEscherFormat& rEscherFmt, const XclChPicFormat* pPicFmt,
sal_uInt32 nDffFillType, XclChPropertyMode ePropMode )
{
- if( rEscherFmt.mxItemSet )
+ if( !rEscherFmt.mxItemSet )
+ return;
+
+ const XFillStyleItem* pStyleItem = rEscherFmt.mxItemSet->GetItem<XFillStyleItem>( XATTR_FILLSTYLE, false );
+ if( !pStyleItem )
+ return;
+
+ switch( pStyleItem->GetValue() )
{
- if( const XFillStyleItem* pStyleItem = rEscherFmt.mxItemSet->GetItem<XFillStyleItem>( XATTR_FILLSTYLE, false ) )
- {
- switch( pStyleItem->GetValue() )
+ case drawing::FillStyle_SOLID:
+ // #i84812# Excel 2007 writes Escher properties for solid fill
+ if( const XFillColorItem* pColorItem = rEscherFmt.mxItemSet->GetItem<XFillColorItem>( XATTR_FILLCOLOR, false ) )
{
- case drawing::FillStyle_SOLID:
- // #i84812# Excel 2007 writes Escher properties for solid fill
- if( const XFillColorItem* pColorItem = rEscherFmt.mxItemSet->GetItem<XFillColorItem>( XATTR_FILLCOLOR, false ) )
- {
- // get solid transparence too
- const XFillTransparenceItem* pTranspItem = rEscherFmt.mxItemSet->GetItem<XFillTransparenceItem>( XATTR_FILLTRANSPARENCE, false );
- sal_uInt16 nTransp = pTranspItem ? pTranspItem->GetValue() : 0;
- ScfPropSetHelper& rAreaHlp = GetAreaHelper( ePropMode );
- rAreaHlp.InitializeWrite();
- rAreaHlp << drawing::FillStyle_SOLID << pColorItem->GetColorValue() << static_cast< sal_Int16 >( nTransp );
- rAreaHlp.WriteToPropertySet( rPropSet );
- }
- break;
- case drawing::FillStyle_GRADIENT:
- if( const XFillGradientItem* pGradItem = rEscherFmt.mxItemSet->GetItem<XFillGradientItem>( XATTR_FILLGRADIENT, false ) )
+ // get solid transparence too
+ const XFillTransparenceItem* pTranspItem = rEscherFmt.mxItemSet->GetItem<XFillTransparenceItem>( XATTR_FILLTRANSPARENCE, false );
+ sal_uInt16 nTransp = pTranspItem ? pTranspItem->GetValue() : 0;
+ ScfPropSetHelper& rAreaHlp = GetAreaHelper( ePropMode );
+ rAreaHlp.InitializeWrite();
+ rAreaHlp << drawing::FillStyle_SOLID << pColorItem->GetColorValue() << static_cast< sal_Int16 >( nTransp );
+ rAreaHlp.WriteToPropertySet( rPropSet );
+ }
+ break;
+ case drawing::FillStyle_GRADIENT:
+ if( const XFillGradientItem* pGradItem = rEscherFmt.mxItemSet->GetItem<XFillGradientItem>( XATTR_FILLGRADIENT, false ) )
+ {
+ uno::Any aGradientAny;
+ if( pGradItem->QueryValue( aGradientAny, MID_FILLGRADIENT ) )
+ {
+ OUString aGradName = rGradientTable.InsertObject( aGradientAny );
+ if( !aGradName.isEmpty() )
{
- uno::Any aGradientAny;
- if( pGradItem->QueryValue( aGradientAny, MID_FILLGRADIENT ) )
- {
- OUString aGradName = rGradientTable.InsertObject( aGradientAny );
- if( !aGradName.isEmpty() )
- {
- ScfPropSetHelper& rGradHlp = GetGradientHelper( ePropMode );
- rGradHlp.InitializeWrite();
- rGradHlp << drawing::FillStyle_GRADIENT << aGradName;
- rGradHlp.WriteToPropertySet( rPropSet );
- }
- }
+ ScfPropSetHelper& rGradHlp = GetGradientHelper( ePropMode );
+ rGradHlp.InitializeWrite();
+ rGradHlp << drawing::FillStyle_GRADIENT << aGradName;
+ rGradHlp.WriteToPropertySet( rPropSet );
}
- break;
- case drawing::FillStyle_BITMAP:
- if( const XFillBitmapItem* pBmpItem = rEscherFmt.mxItemSet->GetItem<XFillBitmapItem>( XATTR_FILLBITMAP, false ) )
+ }
+ }
+ break;
+ case drawing::FillStyle_BITMAP:
+ if( const XFillBitmapItem* pBmpItem = rEscherFmt.mxItemSet->GetItem<XFillBitmapItem>( XATTR_FILLBITMAP, false ) )
+ {
+ uno::Any aBitmapAny;
+ if (pBmpItem->QueryValue(aBitmapAny, MID_BITMAP))
+ {
+ OUString aBmpName = rBitmapTable.InsertObject( aBitmapAny );
+ if( !aBmpName.isEmpty() )
{
- uno::Any aBitmapAny;
- if (pBmpItem->QueryValue(aBitmapAny, MID_BITMAP))
- {
- OUString aBmpName = rBitmapTable.InsertObject( aBitmapAny );
- if( !aBmpName.isEmpty() )
- {
- /* #i71810# Caller decides whether to use a CHPICFORMAT record for bitmap mode.
- If not passed, detect fill mode from the DFF property 'fill-type'. */
- bool bStretch = pPicFmt ? (pPicFmt->mnBmpMode == EXC_CHPICFORMAT_STRETCH) : (nDffFillType == mso_fillPicture);
- drawing::BitmapMode eApiBmpMode = bStretch ? drawing::BitmapMode_STRETCH : drawing::BitmapMode_REPEAT;
- maBitmapHlp.InitializeWrite();
- maBitmapHlp << drawing::FillStyle_BITMAP << aBmpName << eApiBmpMode;
- maBitmapHlp.WriteToPropertySet( rPropSet );
- }
- }
+ /* #i71810# Caller decides whether to use a CHPICFORMAT record for bitmap mode.
+ If not passed, detect fill mode from the DFF property 'fill-type'. */
+ bool bStretch = pPicFmt ? (pPicFmt->mnBmpMode == EXC_CHPICFORMAT_STRETCH) : (nDffFillType == mso_fillPicture);
+ drawing::BitmapMode eApiBmpMode = bStretch ? drawing::BitmapMode_STRETCH : drawing::BitmapMode_REPEAT;
+ maBitmapHlp.InitializeWrite();
+ maBitmapHlp << drawing::FillStyle_BITMAP << aBmpName << eApiBmpMode;
+ maBitmapHlp.WriteToPropertySet( rPropSet );
}
- break;
- default:
- OSL_FAIL( "XclChPropSetHelper::WriteEscherProperties - unknown fill mode" );
+ }
}
- }
+ break;
+ default:
+ OSL_FAIL( "XclChPropSetHelper::WriteEscherProperties - unknown fill mode" );
}
}
diff --git a/sc/source/filter/excel/xlformula.cxx b/sc/source/filter/excel/xlformula.cxx
index 121784cd849b..f636c5c99bb7 100644
--- a/sc/source/filter/excel/xlformula.cxx
+++ b/sc/source/filter/excel/xlformula.cxx
@@ -903,20 +903,20 @@ void XclTokenArrayHelper::ConvertStringToList(
ScTokenArray& rScTokArr, svl::SharedStringPool& rSPool, sal_Unicode cStringSep )
{
OUString aString;
- if( GetString( aString, rScTokArr ) )
+ if( !GetString( aString, rScTokArr ) )
+ return;
+
+ rScTokArr.Clear();
+ if (aString.isEmpty())
+ return;
+ sal_Int32 nStringIx = 0;
+ for (;;)
{
- rScTokArr.Clear();
- if (aString.isEmpty())
- return;
- sal_Int32 nStringIx = 0;
- for (;;)
- {
- OUString aToken( aString.getToken( 0, cStringSep, nStringIx ) );
- rScTokArr.AddString(rSPool.intern(comphelper::string::stripStart(aToken, ' ')));
- if (nStringIx<0)
- break;
- rScTokArr.AddOpCode( ocSep );
- }
+ OUString aToken( aString.getToken( 0, cStringSep, nStringIx ) );
+ rScTokArr.AddString(rSPool.intern(comphelper::string::stripStart(aToken, ' ')));
+ if (nStringIx<0)
+ break;
+ rScTokArr.AddOpCode( ocSep );
}
}