diff options
author | Mohammed Abdul Azeem <azeemmysore@gmail.com> | 2016-02-09 03:54:15 +0530 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2016-02-17 08:41:12 +0000 |
commit | 2c02986b76f26d6f09d5b1f9d209879bfa427ea1 (patch) | |
tree | 60cb199d609d1b8f5f36ddfdefcc25bdd1065556 /sc/source/filter/oox/sheetdatabuffer.cxx | |
parent | e327587699ed9e071da68bf7b2a3eb62c34af135 (diff) |
tdf#97654 - replaced UNO cell types in xlsx import with calc internal ones
All reference to CellAddress in ApiCellRangeList::getBaseAddress() is changed to ScAddress and its chain of changes has been made.
Change-Id: I43d9eb8dc02c74640d9fac11a44429850f31ade1
Reviewed-on: https://gerrit.libreoffice.org/22222
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Markus Mohrhard <markus.mohrhard@googlemail.com>
Diffstat (limited to 'sc/source/filter/oox/sheetdatabuffer.cxx')
-rw-r--r-- | sc/source/filter/oox/sheetdatabuffer.cxx | 61 |
1 files changed, 55 insertions, 6 deletions
diff --git a/sc/source/filter/oox/sheetdatabuffer.cxx b/sc/source/filter/oox/sheetdatabuffer.cxx index f6f7fb70a200..f6765b4d5b72 100644 --- a/sc/source/filter/oox/sheetdatabuffer.cxx +++ b/sc/source/filter/oox/sheetdatabuffer.cxx @@ -95,6 +95,14 @@ bool CellFormulaModel::isValidSharedRef( const CellAddress& rCellAddr ) (maFormulaRef.StartRow <= rCellAddr.Row) && (rCellAddr.Row <= maFormulaRef.EndRow); } +bool CellFormulaModel::isValidSharedRef( const ScAddress& rCellAddr ) +{ + return + (maFormulaRef.Sheet == rCellAddr.Tab() ) && + (maFormulaRef.StartColumn <= rCellAddr.Col() ) && (rCellAddr.Col() <= maFormulaRef.EndColumn) && + (maFormulaRef.StartRow <= rCellAddr.Row() ) && (rCellAddr.Row() <= maFormulaRef.EndRow); +} + DataTableModel::DataTableModel() : mb2dTable( false ), mbRowTable( false ), @@ -256,7 +264,7 @@ void SheetDataBuffer::setFormulaCell( const CellModel& rModel, const ApiTokenSeq aTokens = resolveSharedFormula( aTokenInfo.First ); if( !aTokens.hasElements() ) { - maSharedFmlaAddr = rModel.maCellAddr; + maSharedFmlaAddr = ( CellAddress( rModel.maCellAddr.Tab(), rModel.maCellAddr.Col(), rModel.maCellAddr.Row() ) ); //should change this later maSharedBaseAddr = aTokenInfo.First; mbPendingSharedFmla = true; } @@ -329,6 +337,21 @@ void SheetDataBuffer::setStandardNumFmt( const CellAddress& rCellAddr, sal_Int16 } } +void SheetDataBuffer::setStandardNumFmt( const ScAddress& rCellAddr, sal_Int16 nStdNumFmt ) +{ + try + { + Reference< XNumberFormatsSupplier > xNumFmtsSupp( getDocument(), UNO_QUERY_THROW ); + Reference< XNumberFormatTypes > xNumFmtTypes( xNumFmtsSupp->getNumberFormats(), UNO_QUERY_THROW ); + sal_Int32 nIndex = xNumFmtTypes->getStandardFormat( nStdNumFmt, Locale() ); + PropertySet aPropSet( getCell( rCellAddr ) ); + aPropSet.setProperty( PROP_NumberFormat, nIndex ); + } + catch( Exception& ) + { + } +} + typedef std::pair<sal_Int32, sal_Int32> FormatKeyPair; void addIfNotInMyMap( StylesBuffer& rStyles, std::map< FormatKeyPair, ApiCellRangeList >& rMap, sal_Int32 nXfId, sal_Int32 nFormatId, const ApiCellRangeList& rRangeList ) @@ -544,6 +567,12 @@ SheetDataBuffer::MergedRange::MergedRange( const CellAddress& rAddress, sal_Int3 { } +SheetDataBuffer::MergedRange::MergedRange( const ScAddress& rAddress, sal_Int32 nHorAlign ) : + maRange( rAddress.Tab(), rAddress.Col(), rAddress.Row(), rAddress.Col(), rAddress.Row() ), + mnHorAlign( nHorAlign ) +{ +} + bool SheetDataBuffer::MergedRange::tryExpand( const CellAddress& rAddress, sal_Int32 nHorAlign ) { if( (mnHorAlign == nHorAlign) && (maRange.StartRow == rAddress.Row) && @@ -555,6 +584,17 @@ bool SheetDataBuffer::MergedRange::tryExpand( const CellAddress& rAddress, sal_I return false; } +bool SheetDataBuffer::MergedRange::tryExpand( const ScAddress& rAddress, sal_Int32 nHorAlign ) +{ + if( (mnHorAlign == nHorAlign) && (maRange.StartRow == rAddress.Row() ) && + (maRange.EndRow == rAddress.Row() ) && (maRange.EndColumn + 1 == rAddress.Col() ) ) + { + ++maRange.EndColumn; + return true; + } + return false; +} + void SheetDataBuffer::setCellFormula( const CellAddress& rCellAddr, const ApiTokenSequence& rTokens ) { if( rTokens.hasElements() ) @@ -563,6 +603,15 @@ void SheetDataBuffer::setCellFormula( const CellAddress& rCellAddr, const ApiTok } } +void SheetDataBuffer::setCellFormula( const ScAddress& rCellAddr, const ApiTokenSequence& rTokens ) +{ + if( rTokens.hasElements() ) + { + putFormulaTokens( rCellAddr, rTokens ); + } +} + + ApiTokenSequence SheetDataBuffer::resolveSharedFormula( const CellAddress& rAddr ) const { BinAddress aAddr(rAddr); @@ -664,18 +713,18 @@ void SheetDataBuffer::setCellFormat( const CellModel& rModel, sal_Int32 nNumFmtI * It is sufficient to check if the row range size is one */ if( aIt != aItEnd && - aIt->Sheet == rModel.maCellAddr.Sheet && + aIt->Sheet == rModel.maCellAddr.Tab() && aIt->StartRow == aIt->EndRow && - aIt->StartRow == rModel.maCellAddr.Row && - (aIt->EndColumn+1) == rModel.maCellAddr.Column ) + aIt->StartRow == rModel.maCellAddr.Row() && + (aIt->EndColumn+1) == rModel.maCellAddr.Col() ) { aIt->EndColumn++; // Expand Column } else { maXfIdRangeLists[ XfIdNumFmtKey (rModel.mnXfId, nNumFmtId ) ].push_back( - CellRangeAddress( rModel.maCellAddr.Sheet, rModel.maCellAddr.Column, rModel.maCellAddr.Row, - rModel.maCellAddr.Column, rModel.maCellAddr.Row ) ); + CellRangeAddress( rModel.maCellAddr.Tab(), rModel.maCellAddr.Col(), rModel.maCellAddr.Row(), + rModel.maCellAddr.Col(), rModel.maCellAddr.Row() ) ); } aIt = maXfIdRangeLists[ XfIdNumFmtKey( rModel.mnXfId, nNumFmtId ) ].rbegin(); |