summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJochen Nitschke <j.nitschke+logerrit@ok.de>2017-01-13 17:47:13 +0100
committerNoel Grandin <noel.grandin@collabora.co.uk>2017-01-23 11:28:31 +0000
commitcb71dc9d36779c32733cd0497d9d799c6608888b (patch)
treef650c9061d7102c350311a9bb2e1ceb630a33d68
parent86e99f84619e9b1f9063b1c31081e51344f1cf54 (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.hxx9
-rw-r--r--sc/source/filter/inc/worksheethelper.hxx2
-rw-r--r--sc/source/filter/oox/addressconverter.cxx13
-rw-r--r--sc/source/filter/oox/scenariobuffer.cxx6
-rw-r--r--sc/source/filter/oox/worksheetfragment.cxx6
-rw-r--r--sc/source/filter/oox/worksheethelper.cxx6
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& )
{