[Libreoffice-commits] core.git: sc/source

Jochen Nitschke j.nitschke+logerrit at ok.de
Mon Jan 23 11:29:09 UTC 2017


 sc/source/filter/inc/addressconverter.hxx  |    9 +++++++++
 sc/source/filter/inc/worksheethelper.hxx   |    2 +-
 sc/source/filter/oox/addressconverter.cxx  |   13 +++++++++++++
 sc/source/filter/oox/scenariobuffer.cxx    |    6 +++---
 sc/source/filter/oox/worksheetfragment.cxx |    6 +++---
 sc/source/filter/oox/worksheethelper.cxx   |    6 +++---
 6 files changed, 32 insertions(+), 10 deletions(-)

New commits:
commit cb71dc9d36779c32733cd0497d9d799c6608888b
Author: Jochen Nitschke <j.nitschke+logerrit at ok.de>
Date:   Fri Jan 13 17:47:13 2017 +0100

    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 at libreoffice.org>
    Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>

diff --git a/sc/source/filter/inc/addressconverter.hxx b/sc/source/filter/inc/addressconverter.hxx
index 7c04971..e79baca 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 bc5e9dd..d996ee0 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 0a2bd3e..4e721c0 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 1ae9bec..5032159 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 15b8a61..c7649f1 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 d3a2811..34e8606 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& )
     {


More information about the Libreoffice-commits mailing list