diff options
author | Jochen Nitschke <j.nitschke+logerrit@ok.de> | 2017-01-13 17:47:13 +0100 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2017-01-23 11:28:31 +0000 |
commit | cb71dc9d36779c32733cd0497d9d799c6608888b (patch) | |
tree | f650c9061d7102c350311a9bb2e1ceb630a33d68 | |
parent | 86e99f84619e9b1f9063b1c31081e51344f1cf54 (diff) |
tdf#48140 replace ApiCellRangeList in xlsx import (4)
introduce replacement for ApiCellRangeList::toSequence()
Change-Id: Id623b56d26c475e01a77fb12b80af8eee8cc1728
Reviewed-on: https://gerrit.libreoffice.org/33095
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
-rw-r--r-- | sc/source/filter/inc/addressconverter.hxx | 9 | ||||
-rw-r--r-- | sc/source/filter/inc/worksheethelper.hxx | 2 | ||||
-rw-r--r-- | sc/source/filter/oox/addressconverter.cxx | 13 | ||||
-rw-r--r-- | sc/source/filter/oox/scenariobuffer.cxx | 6 | ||||
-rw-r--r-- | sc/source/filter/oox/worksheetfragment.cxx | 6 | ||||
-rw-r--r-- | sc/source/filter/oox/worksheethelper.cxx | 6 |
6 files changed, 32 insertions, 10 deletions
diff --git a/sc/source/filter/inc/addressconverter.hxx b/sc/source/filter/inc/addressconverter.hxx index 7c0497196cdd..e79bacaac226 100644 --- a/sc/source/filter/inc/addressconverter.hxx +++ b/sc/source/filter/inc/addressconverter.hxx @@ -560,6 +560,15 @@ public: sal_Int16 nSheet, bool bTrackOverflow ); + /** Converts the passed range list to a sequence of cell range addresses. + + @param orRanges List of range objects. + @return A uno sequence of cell range addresses as used in API calls. + Does not check ranges for supported sheet limits. + */ + static css::uno::Sequence<css::table::CellRangeAddress> + toApiSequence(const ScRangeList& orRanges); + private: void initializeMaxPos( sal_Int16 nMaxXlsTab, sal_Int32 nMaxXlsCol, sal_Int32 nMaxXlsRow ); diff --git a/sc/source/filter/inc/worksheethelper.hxx b/sc/source/filter/inc/worksheethelper.hxx index bc5e9ddd7ea9..d996ee021ade 100644 --- a/sc/source/filter/inc/worksheethelper.hxx +++ b/sc/source/filter/inc/worksheethelper.hxx @@ -133,7 +133,7 @@ struct HyperlinkModel : public ::oox::ole::StdHlinkInfo /** Stores data about ranges with data validation settings. */ struct ValidationModel { - ApiCellRangeList maRanges; + ScRangeList maRanges; ApiTokenSequence maTokens1; ApiTokenSequence maTokens2; OUString msRef; diff --git a/sc/source/filter/oox/addressconverter.cxx b/sc/source/filter/oox/addressconverter.cxx index 0a2bd3eed89b..4e721c011b69 100644 --- a/sc/source/filter/oox/addressconverter.cxx +++ b/sc/source/filter/oox/addressconverter.cxx @@ -22,6 +22,7 @@ #include <com/sun/star/container/XIndexAccess.hpp> #include <com/sun/star/sheet/XCellRangeAddressable.hpp> #include <com/sun/star/sheet/XSpreadsheetDocument.hpp> +#include <convuno.hxx> #include <osl/diagnose.h> #include <rtl/strbuf.hxx> #include <rtl/ustrbuf.hxx> @@ -541,6 +542,18 @@ void AddressConverter::convertToCellRangeList( ScRangeList& orRanges, orRanges.Append( aRange ); } +Sequence<CellRangeAddress> AddressConverter::toApiSequence(const ScRangeList& orRanges) +{ + const size_t nSize = orRanges.size(); + Sequence<CellRangeAddress> aRangeSequence(nSize); + CellRangeAddress* pApiRanges = aRangeSequence.getArray(); + for (size_t i = 0; i < nSize; ++i) + { + ScUnoConversion::FillApiRange(pApiRanges[i], *orRanges[i]); + } + return aRangeSequence; +} + // private -------------------------------------------------------------------- void AddressConverter::ControlCharacters::set( diff --git a/sc/source/filter/oox/scenariobuffer.cxx b/sc/source/filter/oox/scenariobuffer.cxx index 1ae9becb6a21..5032159acdf5 100644 --- a/sc/source/filter/oox/scenariobuffer.cxx +++ b/sc/source/filter/oox/scenariobuffer.cxx @@ -106,10 +106,10 @@ void Scenario::importInputCells( SequenceInputStream& rStrm ) void Scenario::finalizeImport() { AddressConverter& rAddrConv = getAddressConverter(); - ::std::vector< CellRangeAddress > aRanges; + ScRangeList aRanges; for( ScenarioCellVector::iterator aIt = maCells.begin(), aEnd = maCells.end(); aIt != aEnd; ++aIt ) if( !aIt->mbDeleted && rAddrConv.checkCellAddress( aIt->maPos, true ) ) - aRanges.push_back( CellRangeAddress( aIt->maPos.Tab(), aIt->maPos.Col(), aIt->maPos.Row(), aIt->maPos.Col(), aIt->maPos.Row() ) ); + aRanges.Append( ScRange(aIt->maPos, aIt->maPos) ); if( !aRanges.empty() && !maModel.maName.isEmpty() ) try { @@ -121,7 +121,7 @@ void Scenario::finalizeImport() // create the new scenario sheet Reference< XScenariosSupplier > xScenariosSupp( getSheetFromDoc( mnSheet ), UNO_QUERY_THROW ); Reference< XScenarios > xScenarios( xScenariosSupp->getScenarios(), UNO_SET_THROW ); - xScenarios->addNewByName( aScenName, ContainerHelper::vectorToSequence( aRanges ), maModel.maComment ); + xScenarios->addNewByName( aScenName, AddressConverter::toApiSequence(aRanges), maModel.maComment ); // write scenario cell values Reference< XSpreadsheet > xSheet( getSheetFromDoc( aScenName ), UNO_SET_THROW ); diff --git a/sc/source/filter/oox/worksheetfragment.cxx b/sc/source/filter/oox/worksheetfragment.cxx index 15b8a6183973..c7649f1abdf7 100644 --- a/sc/source/filter/oox/worksheetfragment.cxx +++ b/sc/source/filter/oox/worksheetfragment.cxx @@ -82,12 +82,12 @@ void DataValidationsContextBase::SetValidation( WorksheetHelper& rTarget ) rTarget.getAddressConverter().convertToCellRangeList(mxValModel->maRanges, maSqref, rTarget.getSheetIndex(), true); mxValModel->msRef = maSqref; - mxValModel->maTokens1 = rTarget.getFormulaParser().importFormula(mxValModel->maRanges.getBaseAddress(), maFormula1); + mxValModel->maTokens1 = rTarget.getFormulaParser().importFormula(mxValModel->maRanges.GetTopLeftCorner(), maFormula1); // process string list of a list validation (convert to list of string tokens) if (mxValModel->mnType == XML_list) rTarget.getFormulaParser().convertStringToStringList(mxValModel->maTokens1, ',', true); - mxValModel->maTokens2 = rTarget.getFormulaParser().importFormula(mxValModel->maRanges.getBaseAddress(), maFormula2); + mxValModel->maTokens2 = rTarget.getFormulaParser().importFormula(mxValModel->maRanges.GetTopLeftCorner(), maFormula2); rTarget.setValidation(*mxValModel); mxValModel.reset(); @@ -138,7 +138,7 @@ void DataValidationsContextBase::importDataValidation( SequenceInputStream& rStr // condition formula(s) FormulaParser& rParser = rTarget.getFormulaParser(); - ScAddress aBaseAddr = aModel.maRanges.getBaseAddress(); + ScAddress aBaseAddr = aModel.maRanges.GetTopLeftCorner(); aModel.maTokens1 = rParser.importFormula(aBaseAddr, FORMULATYPE_VALIDATION, rStrm); aModel.maTokens2 = rParser.importFormula(aBaseAddr, FORMULATYPE_VALIDATION, rStrm); // process string list of a list validation (convert to list of string tokens) diff --git a/sc/source/filter/oox/worksheethelper.cxx b/sc/source/filter/oox/worksheethelper.cxx index d3a281123952..34e8606df9ce 100644 --- a/sc/source/filter/oox/worksheethelper.cxx +++ b/sc/source/filter/oox/worksheethelper.cxx @@ -223,7 +223,7 @@ public: /** Returns the XCellRange interface for the passed cell range address. */ Reference< XCellRange > getCellRange( const ScRange& rRange ) const; /** Returns the XSheetCellRanges interface for the passed cell range addresses. */ - Reference< XSheetCellRanges > getCellRangeList( const ApiCellRangeList& rRanges ) const; + Reference< XSheetCellRanges > getCellRangeList( const ScRangeList& rRanges ) const; /** Returns the XCellRange interface for a column. */ Reference< XCellRange > getColumn( sal_Int32 nCol ) const; @@ -474,14 +474,14 @@ Reference< XCellRange > WorksheetGlobals::getCellRange( const ScRange& rRange ) return xRange; } -Reference< XSheetCellRanges > WorksheetGlobals::getCellRangeList( const ApiCellRangeList& rRanges ) const +Reference< XSheetCellRanges > WorksheetGlobals::getCellRangeList( const ScRangeList& rRanges ) const { Reference< XSheetCellRanges > xRanges; if( mxSheet.is() && !rRanges.empty() ) try { xRanges.set( getBaseFilter().getModelFactory()->createInstance( maSheetCellRanges ), UNO_QUERY_THROW ); Reference< XSheetCellRangeContainer > xRangeCont( xRanges, UNO_QUERY_THROW ); - xRangeCont->addRangeAddresses( rRanges.toSequence(), false ); + xRangeCont->addRangeAddresses( AddressConverter::toApiSequence(rRanges), false ); } catch( Exception& ) { |