oovbaapi/ooo/vba/excel/XRange.idl | 2 + sc/source/ui/vba/vbarange.cxx | 52 ++++++++++++++++++++++++++++++++++++++ sc/source/ui/vba/vbarange.hxx | 1 3 files changed, 55 insertions(+)
New commits: commit 56961599abffcb60fe405fa0e6c62dfe9bc22156 Author: Noel Power <noel.po...@suse.com> Date: Mon Apr 29 14:53:09 2013 +0100 implement Range.Name Change-Id: I884f84e437dad9440951e60c8f92fd6487c48832 diff --git a/oovbaapi/ooo/vba/excel/XRange.idl b/oovbaapi/ooo/vba/excel/XRange.idl index 5125ea6..eff93ee 100644 --- a/oovbaapi/ooo/vba/excel/XRange.idl +++ b/oovbaapi/ooo/vba/excel/XRange.idl @@ -43,6 +43,7 @@ interface XCharacters; interface XBorders; interface XValidation; interface XWorksheet; +interface XName; interface XRange { @@ -68,6 +69,7 @@ interface XRange [attribute] any ColumnWidth; [attribute, readonly ] any Width; [attribute, readonly] XWorksheet Worksheet; + [attribute, readonly] XName Name; [attribute] any RowHeight; [attribute, readonly ] any Height; [attribute, readonly ] any Top; diff --git a/sc/source/ui/vba/vbarange.cxx b/sc/source/ui/vba/vbarange.cxx index 63d0ad6..5fddd01 100644 --- a/sc/source/ui/vba/vbarange.cxx +++ b/sc/source/ui/vba/vbarange.cxx @@ -161,6 +161,7 @@ #include "vbaglobals.hxx" #include "vbastyle.hxx" +#include "vbaname.hxx" #include <vector> #include <vbahelper/vbacollectionimpl.hxx> // begin test includes @@ -4096,6 +4097,57 @@ ScVbaRange::getTop() throw (uno::RuntimeException) return uno::makeAny( lcl_hmmToPoints( aPoint.Y ) ); } + +uno::Reference< sheet::XCellRangeReferrer > getNamedRange( const uno::Reference< uno::XInterface >& xIf, const uno::Reference< table::XCellRange >& thisRange ) +{ + uno::Reference< beans::XPropertySet > xProps( xIf, uno::UNO_QUERY_THROW ); + uno::Reference< container::XNameAccess > xNameAccess( xProps->getPropertyValue( "NamedRanges" ), uno::UNO_QUERY_THROW ); + + uno::Sequence< OUString > sNames = xNameAccess->getElementNames(); +// uno::Reference< table::XCellRange > thisRange( getCellRange(), uno::UNO_QUERY_THROW ); + uno::Reference< sheet::XCellRangeReferrer > xNamedRange; + for ( sal_Int32 i=0; i < sNames.getLength(); ++i ) + { + uno::Reference< sheet::XCellRangeReferrer > xName( xNameAccess->getByName( sNames[ i ] ), uno::UNO_QUERY ); + if ( xName.is() ) + { + if ( thisRange == xName->getReferredCells() ) + { + xNamedRange = xName; + break; + } + } + } + return xNamedRange; +} + +uno::Reference< excel::XName > +ScVbaRange::getName() throw (uno::RuntimeException) +{ + uno::Reference< beans::XPropertySet > xProps( getUnoModel(), uno::UNO_QUERY ); + uno::Reference< table::XCellRange > thisRange( getCellRange(), uno::UNO_QUERY_THROW ); + // Application range + uno::Reference< sheet::XCellRangeReferrer > xNamedRange = getNamedRange( xProps, thisRange ); + + if ( !xNamedRange.is() ) + { + // not in application range then assume it might be in + // sheet namedranges + RangeHelper aRange( thisRange ); + uno::Reference< sheet::XSpreadsheet > xSheet = aRange.getSpreadSheet(); + xProps.set( xSheet, uno::UNO_QUERY ); + // impl here + xNamedRange = getNamedRange( xProps, thisRange ); + } + if ( xProps.is() && xNamedRange.is() ) + { + uno::Reference< sheet::XNamedRanges > xNamedRanges( xProps, uno::UNO_QUERY_THROW ); + uno::Reference< sheet::XNamedRange > xName( xNamedRange, uno::UNO_QUERY_THROW ); + return new ScVbaName( mxParent, mxContext, xName, xNamedRanges, getUnoModel() ); + } + return uno::Reference< excel::XName >(); +} + uno::Reference< excel::XWorksheet > ScVbaRange::getWorksheet() throw (uno::RuntimeException) { diff --git a/sc/source/ui/vba/vbarange.hxx b/sc/source/ui/vba/vbarange.hxx index 7c3a3d9..07b8648 100644 --- a/sc/source/ui/vba/vbarange.hxx +++ b/sc/source/ui/vba/vbarange.hxx @@ -183,6 +183,7 @@ public: virtual css::uno::Any SAL_CALL getTop() throw (css::uno::RuntimeException); virtual css::uno::Any SAL_CALL getLeft() throw (css::uno::RuntimeException); + virtual css::uno::Reference< ov::excel::XName > SAL_CALL getName() throw (css::uno::RuntimeException); virtual css::uno::Reference< ov::excel::XWorksheet > SAL_CALL getWorksheet() throw (css::uno::RuntimeException); virtual css::uno::Any SAL_CALL getPageBreak() throw (css::uno::RuntimeException); virtual void SAL_CALL setPageBreak( const css::uno::Any& _pagebreak ) throw (css::uno::RuntimeException); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits