ooo-build r14086 - trunk/patches/test/vba
- From: noelpwer svn gnome org
- To: svn-commits-list gnome org
- Subject: ooo-build r14086 - trunk/patches/test/vba
- Date: Thu, 25 Sep 2008 17:37:06 +0000 (UTC)
Author: noelpwer
Date: Thu Sep 25 17:37:06 2008
New Revision: 14086
URL: http://svn.gnome.org/viewvc/ooo-build?rev=14086&view=rev
Log:
backup this patch
Added:
trunk/patches/test/vba/vba-intersection-union.diff
Added: trunk/patches/test/vba/vba-intersection-union.diff
==============================================================================
--- (empty file)
+++ trunk/patches/test/vba/vba-intersection-union.diff Thu Sep 25 17:37:06 2008
@@ -0,0 +1,436 @@
+diff --git sc/source/ui/unoobj/.funcuno.cxx.swp sc/source/ui/unoobj/.funcuno.cxx.swp
+deleted file mode 100644
+index 481401c..0000000
+Files sc/source/ui/unoobj/.funcuno.cxx.swp and /dev/null differ
+diff --git sc/source/ui/vba/vbaapplication.cxx sc/source/ui/vba/vbaapplication.cxx
+index b451440..1c7960a 100644
+--- sc/source/ui/vba/vbaapplication.cxx
++++ sc/source/ui/vba/vbaapplication.cxx
+@@ -868,177 +868,263 @@ ScVbaApplication::PathSeparator( ) thro
+ return sPathSep;
+ }
+
++typedef std::list< ScRange > Ranges;
++typedef std::list< ScRangeList > RangesList;
++
++void lcl_addRangesToVec( RangesList& vRanges, const uno::Any& aArg ) throw ( script::BasicErrorException, uno::RuntimeException )
++{
++ ScRangeList theRanges;
++ uno::Reference< excel::XRange > xRange( aArg, uno::UNO_QUERY_THROW );
++ uno::Reference< vba::XCollection > xCol( xRange->Areas( uno::Any() ), uno::UNO_QUERY_THROW );
++ sal_Int32 nCount = xCol->getCount();
++ for( sal_Int32 i = 1; i <= nCount; ++i )
++ {
++ uno::Reference< excel::XRange > xAreaRange( xCol->Item( uno::makeAny( sal_Int32(i) ), uno::Any() ), uno::UNO_QUERY_THROW );
++ uno::Reference< sheet::XCellRangeAddressable > xAddressable( xAreaRange->getCellRange(), uno::UNO_QUERY_THROW );
++ table::CellRangeAddress addr = xAddressable->getRangeAddress();
++ ScRange refRange;
++ ScUnoConversion::FillScRange( refRange, addr );
++ theRanges.Append( refRange );
++ }
++ vRanges.push_back( theRanges );
++}
++void lcl_addRangeToVec( Ranges& vRanges, const uno::Any& aArg ) throw ( script::BasicErrorException, uno::RuntimeException )
++{
++ uno::Reference< excel::XRange > xRange( aArg, uno::UNO_QUERY_THROW );
++ uno::Reference< vba::XCollection > xCol( xRange->Areas( uno::Any() ), uno::UNO_QUERY_THROW );
++ sal_Int32 nCount = xCol->getCount();
++ for( sal_Int32 i = 1; i <= nCount; ++i )
++ {
++ uno::Reference< excel::XRange > xAreaRange( xCol->Item( uno::makeAny( sal_Int32(i) ), uno::Any() ), uno::UNO_QUERY_THROW );
++ uno::Reference< sheet::XCellRangeAddressable > xAddressable( xAreaRange->getCellRange(), uno::UNO_QUERY_THROW );
++ table::CellRangeAddress addr = xAddressable->getRangeAddress();
++ ScRange refRange;
++ ScUnoConversion::FillScRange( refRange, addr );
++ vRanges.push_back( refRange );
++ }
++}
++void lcl_strip_containedRanges( Ranges& vRanges )
++{
++ // get rid of ranges that are surrounded by other ranges
++ for( Ranges::iterator it = vRanges.begin(); it != vRanges.end(); ++it )
++ {
++ for( Ranges::iterator it_inner = vRanges.begin(); it_inner != vRanges.end(); ++it_inner )
++ {
++ if ( it != it_inner )
++ {
++ if ( it->In( *it_inner ) )
++ it_inner = vRanges.erase( it_inner );
++ else if ( it_inner->In( *it ) )
++ it = vRanges.erase( it );
++ }
++ }
++ }
++
++}
+ uno::Reference< excel::XRange > SAL_CALL
+ ScVbaApplication::Intersect( const uno::Reference< excel::XRange >& Arg1, const uno::Reference< excel::XRange >& Arg2, const uno::Any& Arg3, const uno::Any& Arg4, const uno::Any& Arg5, const uno::Any& Arg6, const uno::Any& Arg7, const uno::Any& Arg8, const uno::Any& Arg9, const uno::Any& Arg10, const uno::Any& Arg11, const uno::Any& Arg12, const uno::Any& Arg13, const uno::Any& Arg14, const uno::Any& Arg15, const uno::Any& Arg16, const uno::Any& Arg17, const uno::Any& Arg18, const uno::Any& Arg19, const uno::Any& Arg20, const uno::Any& Arg21, const uno::Any& Arg22, const uno::Any& Arg23, const uno::Any& Arg24, const uno::Any& Arg25, const uno::Any& Arg26, const uno::Any& Arg27, const uno::Any& Arg28, const uno::Any& Arg29, const uno::Any& Arg30 ) throw (script::BasicErrorException, uno::RuntimeException)
+ {
+- std::vector< uno::Reference< excel::XRange > > vRanges;
+ if ( !Arg1.is() || !Arg2.is() )
+ DebugHelper::exception(SbERR_BAD_PARAMETER, rtl::OUString() );
+
+- vRanges.push_back( Arg1 );
+- vRanges.push_back( Arg2 );
++ RangesList vRanges;
++ lcl_addRangesToVec( vRanges, uno::makeAny( Arg1 ) );
++ lcl_addRangesToVec( vRanges, uno::makeAny( Arg2 ) );
+
+ if ( Arg3.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg3, uno::UNO_QUERY_THROW ) );
++ lcl_addRangesToVec( vRanges, Arg3 );
+ if ( Arg4.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg4, uno::UNO_QUERY_THROW ) );
++ lcl_addRangesToVec( vRanges, Arg4 );
+ if ( Arg5.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg5, uno::UNO_QUERY_THROW ) );
++ lcl_addRangesToVec( vRanges, Arg5 );
+ if ( Arg6.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg6, uno::UNO_QUERY_THROW ) );
++ lcl_addRangesToVec( vRanges, Arg6 );
+ if ( Arg7.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg7, uno::UNO_QUERY_THROW ) );
++ lcl_addRangesToVec( vRanges, Arg7 );
+ if ( Arg8.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg8, uno::UNO_QUERY_THROW ) );
++ lcl_addRangesToVec( vRanges, Arg8 );
+ if ( Arg9.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg9, uno::UNO_QUERY_THROW ) );
++ lcl_addRangesToVec( vRanges, Arg9 );
+ if ( Arg10.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg10, uno::UNO_QUERY_THROW ) );
++ lcl_addRangesToVec( vRanges, Arg10 );
+ if ( Arg11.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg11, uno::UNO_QUERY_THROW ) );
++ lcl_addRangesToVec( vRanges, Arg11 );
+ if ( Arg12.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg12, uno::UNO_QUERY_THROW ) );
++ lcl_addRangesToVec( vRanges, Arg12 );
+ if ( Arg13.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg13, uno::UNO_QUERY_THROW ) );
++ lcl_addRangesToVec( vRanges, Arg13 );
+ if ( Arg14.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg14, uno::UNO_QUERY_THROW ) );
++ lcl_addRangesToVec( vRanges, Arg14 );
+ if ( Arg15.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg15, uno::UNO_QUERY_THROW ) );
++ lcl_addRangesToVec( vRanges, Arg15 );
+ if ( Arg16.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg16, uno::UNO_QUERY_THROW ) );
++ lcl_addRangesToVec( vRanges, Arg16 );
+ if ( Arg17.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg17, uno::UNO_QUERY_THROW ) );
++ lcl_addRangesToVec( vRanges, Arg17 );
+ if ( Arg18.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg18, uno::UNO_QUERY_THROW ) );
++ lcl_addRangesToVec( vRanges, Arg18 );
+ if ( Arg19.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg19, uno::UNO_QUERY_THROW ) );
++ lcl_addRangesToVec( vRanges, Arg19 );
+ if ( Arg20.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg20, uno::UNO_QUERY_THROW ) );
++ lcl_addRangesToVec( vRanges, Arg20 );
+ if ( Arg21.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg21, uno::UNO_QUERY_THROW ) );
++ lcl_addRangesToVec( vRanges, Arg21 );
+ if ( Arg22.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg22, uno::UNO_QUERY_THROW ) );
++ lcl_addRangesToVec( vRanges, Arg22 );
+ if ( Arg23.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg23, uno::UNO_QUERY_THROW ) );
++ lcl_addRangesToVec( vRanges, Arg23 );
+ if ( Arg24.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg24, uno::UNO_QUERY_THROW ) );
++ lcl_addRangesToVec( vRanges, Arg24 );
+ if ( Arg25.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg25, uno::UNO_QUERY_THROW ) );
++ lcl_addRangesToVec( vRanges, Arg25 );
+ if ( Arg26.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg26, uno::UNO_QUERY_THROW ) );
++ lcl_addRangesToVec( vRanges, Arg26 );
+ if ( Arg27.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg27, uno::UNO_QUERY_THROW ) );
++ lcl_addRangesToVec( vRanges, Arg27 );
+ if ( Arg28.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg28, uno::UNO_QUERY_THROW ) );
++ lcl_addRangesToVec( vRanges, Arg28 );
+ if ( Arg29.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg29, uno::UNO_QUERY_THROW ) );
++ lcl_addRangesToVec( vRanges, Arg29 );
+ if ( Arg30.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg30, uno::UNO_QUERY_THROW ) );
++ lcl_addRangesToVec( vRanges, Arg30 );
+
+- std::vector< uno::Reference< excel::XRange > >::iterator it = vRanges.begin();
+- std::vector< uno::Reference< excel::XRange > >::iterator it_end = vRanges.end();
+-
+- uno::Reference< excel::XRange > xRefRange( *it );
+- ++it;
+- for ( ; it != it_end; ++it )
++ uno::Reference< excel::XRange > xRefRange;
++ ScRange aIntersection;
++ ScRangeList aCellRanges;
++ Ranges intersections;
++ for( RangesList::iterator it = vRanges.begin(); it != vRanges.end(); ++it )
+ {
+- ScVbaRange* pRange = dynamic_cast< ScVbaRange * >( xRefRange.get());
+- if ( pRange )
+- xRefRange = pRange->intersect( *it );
+- if ( !xRefRange.is() )
+- return uno::Reference< excel::XRange >();
+- }
++ for( RangesList::iterator it_inner = vRanges.begin(); it_inner != vRanges.end(); ++it_inner )
++ {
++ if ( it != it_inner )
++ {
++ for ( USHORT x = 0 ; x < it->Count(); ++x )
++ {
++ for ( USHORT y = 0 ; y < it_inner->Count(); ++y )
++ {
++ if( it->GetObject( x )->Intersects( *it_inner->GetObject( y ) ) )
++ {
++ aIntersection = ScRange( Max( it->GetObject( x )->aStart.Col(), it_inner->GetObject( y )->aStart.Col() ),
++ Max( it->GetObject( x )->aStart.Row(), it_inner->GetObject( y )->aStart.Row() ),
++ Max( it->GetObject( x )->aStart.Tab(), it_inner->GetObject( y )->aStart.Tab() ),
++ Min( it->GetObject( x )->aEnd.Col(), it_inner->GetObject( y )->aEnd.Col() ),
++ Min( it->GetObject( x )->aEnd.Row(), it_inner->GetObject( y )->aEnd.Row() ),
++ Min( it->GetObject( x )->aEnd.Tab(), it_inner->GetObject( y )->aEnd.Tab() ) );
++ intersections.push_back( aIntersection );
++ }
++ }
++ }
++ }
++ }
++ }
++ // strip out intersections contained by other intesections
++ lcl_strip_containedRanges( intersections );
++ for( Ranges::iterator it = intersections.begin(); it != intersections.end(); ++it )
++ aCellRanges.Join( *it );
++
++ uno::Reference< frame::XModel > xModel( getCurrentDocument(), uno::UNO_QUERY_THROW );
++ ScDocShell* pDocShell = getDocShell( xModel );
++ if ( aCellRanges.Count() == 1 )
++ {
++ xRefRange = new ScVbaRange( uno::Reference< vba::XHelperInterface >(), mxContext, new ScCellRangeObj( pDocShell, *aCellRanges.First() ) );
++ }
++ else if ( aCellRanges.Count() > 1 )
++ {
++ uno::Reference< sheet::XSheetCellRangeContainer > xRanges( new ScCellRangesObj( pDocShell, aCellRanges ) );
++ xRefRange = new ScVbaRange( uno::Reference< vba::XHelperInterface >(), mxContext, xRanges );
++
++ }
+ return xRefRange;
+ }
+
+ uno::Reference< excel::XRange > SAL_CALL
+ ScVbaApplication::Union( const uno::Reference< excel::XRange >& Arg1, const uno::Reference< excel::XRange >& Arg2, const uno::Any& Arg3, const uno::Any& Arg4, const uno::Any& Arg5, const uno::Any& Arg6, const uno::Any& Arg7, const uno::Any& Arg8, const uno::Any& Arg9, const uno::Any& Arg10, const uno::Any& Arg11, const uno::Any& Arg12, const uno::Any& Arg13, const uno::Any& Arg14, const uno::Any& Arg15, const uno::Any& Arg16, const uno::Any& Arg17, const uno::Any& Arg18, const uno::Any& Arg19, const uno::Any& Arg20, const uno::Any& Arg21, const uno::Any& Arg22, const uno::Any& Arg23, const uno::Any& Arg24, const uno::Any& Arg25, const uno::Any& Arg26, const uno::Any& Arg27, const uno::Any& Arg28, const uno::Any& Arg29, const uno::Any& Arg30 ) throw (script::BasicErrorException, uno::RuntimeException)
+ {
+- std::vector< uno::Reference< excel::XRange > > vRanges;
+ if ( !Arg1.is() || !Arg2.is() )
+ DebugHelper::exception(SbERR_BAD_PARAMETER, rtl::OUString() );
+
+- vRanges.push_back( Arg1 );
+- vRanges.push_back( Arg2 );
++ uno::Reference< excel::XRange > xRange;
++ Ranges vRanges;
++ lcl_addRangeToVec( vRanges, uno::makeAny( Arg1 ) );
++ lcl_addRangeToVec( vRanges, uno::makeAny( Arg2 ) );
+
+ if ( Arg3.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg3, uno::UNO_QUERY_THROW ) );
++ lcl_addRangeToVec( vRanges, Arg3 );
+ if ( Arg4.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg4, uno::UNO_QUERY_THROW ) );
++ lcl_addRangeToVec( vRanges, Arg4 );
+ if ( Arg5.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg5, uno::UNO_QUERY_THROW ) );
++ lcl_addRangeToVec( vRanges, Arg5 );
+ if ( Arg6.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg6, uno::UNO_QUERY_THROW ) );
++ lcl_addRangeToVec( vRanges, Arg6 );
+ if ( Arg7.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg7, uno::UNO_QUERY_THROW ) );
++ lcl_addRangeToVec( vRanges, Arg7 );
+ if ( Arg8.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg8, uno::UNO_QUERY_THROW ) );
++ lcl_addRangeToVec( vRanges, Arg8 );
+ if ( Arg9.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg9, uno::UNO_QUERY_THROW ) );
++ lcl_addRangeToVec( vRanges, Arg9 );
+ if ( Arg10.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg10, uno::UNO_QUERY_THROW ) );
++ lcl_addRangeToVec( vRanges, Arg10 );
+ if ( Arg11.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg11, uno::UNO_QUERY_THROW ) );
++ lcl_addRangeToVec( vRanges, Arg11 );
+ if ( Arg12.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg12, uno::UNO_QUERY_THROW ) );
++ lcl_addRangeToVec( vRanges, Arg12 );
+ if ( Arg13.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg13, uno::UNO_QUERY_THROW ) );
++ lcl_addRangeToVec( vRanges, Arg13 );
+ if ( Arg14.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg14, uno::UNO_QUERY_THROW ) );
++ lcl_addRangeToVec( vRanges, Arg14 );
+ if ( Arg15.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg15, uno::UNO_QUERY_THROW ) );
++ lcl_addRangeToVec( vRanges, Arg15 );
+ if ( Arg16.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg16, uno::UNO_QUERY_THROW ) );
++ lcl_addRangeToVec( vRanges, Arg16 );
+ if ( Arg17.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg17, uno::UNO_QUERY_THROW ) );
++ lcl_addRangeToVec( vRanges, Arg17 );
+ if ( Arg18.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg18, uno::UNO_QUERY_THROW ) );
++ lcl_addRangeToVec( vRanges, Arg18 );
+ if ( Arg19.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg19, uno::UNO_QUERY_THROW ) );
++ lcl_addRangeToVec( vRanges, Arg19 );
+ if ( Arg20.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg20, uno::UNO_QUERY_THROW ) );
++ lcl_addRangeToVec( vRanges, Arg20 );
+ if ( Arg21.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg21, uno::UNO_QUERY_THROW ) );
++ lcl_addRangeToVec( vRanges, Arg21 );
+ if ( Arg22.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg22, uno::UNO_QUERY_THROW ) );
++ lcl_addRangeToVec( vRanges, Arg22 );
+ if ( Arg23.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg23, uno::UNO_QUERY_THROW ) );
++ lcl_addRangeToVec( vRanges, Arg23 );
+ if ( Arg24.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg24, uno::UNO_QUERY_THROW ) );
++ lcl_addRangeToVec( vRanges, Arg24 );
+ if ( Arg25.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg25, uno::UNO_QUERY_THROW ) );
++ lcl_addRangeToVec( vRanges, Arg25 );
+ if ( Arg26.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg26, uno::UNO_QUERY_THROW ) );
++ lcl_addRangeToVec( vRanges, Arg26 );
+ if ( Arg27.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg27, uno::UNO_QUERY_THROW ) );
++ lcl_addRangeToVec( vRanges, Arg27 );
+ if ( Arg28.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg28, uno::UNO_QUERY_THROW ) );
++ lcl_addRangeToVec( vRanges, Arg28 );
+ if ( Arg29.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg29, uno::UNO_QUERY_THROW ) );
++ lcl_addRangeToVec( vRanges, Arg29 );
+ if ( Arg30.hasValue() )
+- vRanges.push_back( uno::Reference< excel::XRange >( Arg30, uno::UNO_QUERY_THROW ) );
++ lcl_addRangeToVec( vRanges, Arg30 );
+
+- std::vector< uno::Reference< excel::XRange > >::iterator it = vRanges.begin();
+- std::vector< uno::Reference< excel::XRange > >::iterator it_end = vRanges.end();
++ ScRangeList aCellRanges;
++ lcl_strip_containedRanges( vRanges );
+
+- uno::Reference< excel::XRange > xRange;
+- ScRangeList aCellRanges;
+- for( ; it != it_end; ++it )
+- {
+- xRange = *it;
+- uno::Reference< table::XCellRange > xRangeParam;
+- xRange->getCellRange() >>= xRangeParam;
+- uno::Reference< sheet::XCellRangeAddressable > xAddressable( xRangeParam, uno::UNO_QUERY_THROW );
+- ScRange refRange;
+- ScUnoConversion::FillScRange( refRange, xAddressable->getRangeAddress() );
+- aCellRanges.Append( refRange );
+- }
++ for( Ranges::iterator it = vRanges.begin(); it != vRanges.end(); ++it )
++ aCellRanges.Append( *it );
+
+ uno::Reference< frame::XModel > xModel( getCurrentDocument(), uno::UNO_QUERY_THROW );
+ ScDocShell* pDocShell = getDocShell( xModel );
+- uno::Reference< sheet::XSheetCellRangeContainer > xRanges( new ScCellRangesObj( pDocShell, aCellRanges ) );
++ if ( aCellRanges.Count() == 1 )
++ {
++ // normal range
++ xRange = new ScVbaRange( uno::Reference< vba::XHelperInterface >(), mxContext, new ScCellRangeObj( pDocShell, *aCellRanges.First() ) );
++ }
++ else if ( aCellRanges.Count() > 1 ) // Multi-Area
++ {
++ uno::Reference< sheet::XSheetCellRangeContainer > xRanges( new ScCellRangesObj( pDocShell, aCellRanges ) );
++ xRange = new ScVbaRange( uno::Reference< vba::XHelperInterface >(), mxContext, xRanges );
++ }
++
+ // #FIXME need proper (WorkSheet) parent
+- xRange = new ScVbaRange( uno::Reference< vba::XHelperInterface >(), mxContext, xRanges );
+ return xRange;
+ }
+
+diff --git sc/source/ui/vba/vbarange.cxx sc/source/ui/vba/vbarange.cxx
+index 1dde272..fcce0aa 100644
+--- sc/source/ui/vba/vbarange.cxx
++++ sc/source/ui/vba/vbarange.cxx
+@@ -5318,57 +5318,6 @@ ScVbaRange::Subtotal( ::sal_Int32 _nGrou
+ }
+ }
+
+-uno::Reference< excel::XRange >
+-ScVbaRange::intersect( const css::uno::Reference< oo::excel::XRange >& xRange ) throw (script::BasicErrorException, uno::RuntimeException)
+-{
+- uno::Reference< excel::XRange > xResult;
+- sal_Int32 nLen = m_Areas->getCount();
+- if ( nLen > 1 )
+- {
+- ScRangeList aCellRanges;
+- for ( sal_Int32 index = 1; index != nLen; ++index )
+- {
+- uno::Reference< excel::XRange > xAreaRange( getArea( index ), uno::UNO_QUERY_THROW );
+- ScVbaRange* pRange = dynamic_cast< ScVbaRange * >( xAreaRange.get());
+- if ( pRange )
+- {
+- uno::Reference< excel::XRange > xResultRange = pRange->intersect( xAreaRange );
+- if ( xResultRange.is() )
+- {
+- ScRange refRange;
+- RangeHelper aRange( xResultRange->getCellRange() );
+- ScUnoConversion::FillScRange( refRange, aRange.getCellRangeAddressable()->getRangeAddress() );
+- aCellRanges.Append( refRange );
+- }
+- }
+- }
+- if ( aCellRanges.First() != aCellRanges.Last() )
+- {
+- uno::Reference< sheet::XSheetCellRangeContainer > xRanges( new ScCellRangesObj( getScDocShell(), aCellRanges ) );
+- xResult = new ScVbaRange( getParent(), mxContext, xRanges );
+- }
+- return xResult;
+- }
+- else
+- {
+- // This is a single range
+- try
+- {
+- // xRange could be a single of multi-area range
+- uno::Reference< sheet::XCellRangesQuery > xQuery( xRange->getCellRange(), uno::UNO_QUERY_THROW );
+- RangeHelper aRange( mxRange );
+- table::CellRangeAddress aAddress = aRange.getCellRangeAddressable()->getRangeAddress();
+- uno::Reference< sheet::XSheetCellRanges > xIntersectRanges = xQuery->queryIntersection( aAddress );
+- xResult = lcl_makeXRangeFromSheetCellRanges( getParent(), mxContext, xIntersectRanges, getScDocShell() );
+-
+- }
+- catch( uno::Exception& )
+- {
+- DebugHelper::exception(SbERR_METHOD_FAILED, rtl::OUString());
+- }
+- }
+- return xResult;
+-}
+
+ rtl::OUString&
+ ScVbaRange::getServiceImplName()
+diff --git sc/source/ui/vba/vbarange.hxx sc/source/ui/vba/vbarange.hxx
+index 2ece2a2..585cadf 100644
+--- sc/source/ui/vba/vbarange.hxx
++++ sc/source/ui/vba/vbarange.hxx
+@@ -128,7 +128,6 @@ public:
+ virtual ~ScVbaRange();
+ virtual css::uno::Reference< oo::vba::XHelperInterface > thisHelperIface() { return this; }
+ bool isSingleCellRange();
+- css::uno::Reference< oo::excel::XRange > intersect( const css::uno::Reference< oo::excel::XRange >& xRange ) throw (css::script::BasicErrorException, css::uno::RuntimeException);
+ static css::uno::Reference< oo::excel::XRange > getRangeObjectForName( const css::uno::Reference< css::uno::XComponentContext >& xContext, const rtl::OUString& sRangeName, ScDocShell* pDocSh, ScAddress::Convention eConv = ScAddress::CONV_XL_A1 ) throw ( css::uno::RuntimeException );
+
+ // Attributes
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]