1*b3f79822SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*b3f79822SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*b3f79822SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*b3f79822SAndrew Rist * distributed with this work for additional information 6*b3f79822SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*b3f79822SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*b3f79822SAndrew Rist * "License"); you may not use this file except in compliance 9*b3f79822SAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*b3f79822SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*b3f79822SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*b3f79822SAndrew Rist * software distributed under the License is distributed on an 15*b3f79822SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b3f79822SAndrew Rist * KIND, either express or implied. See the License for the 17*b3f79822SAndrew Rist * specific language governing permissions and limitations 18*b3f79822SAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*b3f79822SAndrew Rist *************************************************************/ 21*b3f79822SAndrew Rist 22*b3f79822SAndrew Rist 23cdf0e10cSrcweir #include "vbaformat.hxx" 24cdf0e10cSrcweir #include <ooo/vba/excel/XStyle.hpp> 25cdf0e10cSrcweir #include <ooo/vba/excel/XlVAlign.hpp> 26cdf0e10cSrcweir #include <ooo/vba/excel/XlHAlign.hpp> 27cdf0e10cSrcweir #include <ooo/vba/excel/XlOrientation.hpp> 28cdf0e10cSrcweir #include <ooo/vba/excel/Constants.hpp> 29cdf0e10cSrcweir #include <ooo/vba/excel/XRange.hpp> 30cdf0e10cSrcweir #include <com/sun/star/table/CellVertJustify.hpp> 31cdf0e10cSrcweir #include <com/sun/star/table/CellHoriJustify.hpp> 32cdf0e10cSrcweir #include <com/sun/star/table/CellOrientation.hpp> 33cdf0e10cSrcweir #include <com/sun/star/table/XCellRange.hpp> 34cdf0e10cSrcweir #include <com/sun/star/text/WritingMode.hpp> 35cdf0e10cSrcweir #include <com/sun/star/util/CellProtection.hpp> 36cdf0e10cSrcweir 37cdf0e10cSrcweir #include <rtl/math.hxx> 38cdf0e10cSrcweir 39cdf0e10cSrcweir #include "excelvbahelper.hxx" 40cdf0e10cSrcweir #include "vbaborders.hxx" 41cdf0e10cSrcweir #include "vbapalette.hxx" 42cdf0e10cSrcweir #include "vbafont.hxx" 43cdf0e10cSrcweir #include "vbainterior.hxx" 44cdf0e10cSrcweir 45cdf0e10cSrcweir #include <unonames.hxx> 46cdf0e10cSrcweir #include <cellsuno.hxx> 47cdf0e10cSrcweir #include <scitems.hxx> 48cdf0e10cSrcweir #include <attrib.hxx> 49cdf0e10cSrcweir 50cdf0e10cSrcweir using namespace ::ooo::vba; 51cdf0e10cSrcweir using namespace ::com::sun::star; 52cdf0e10cSrcweir 53cdf0e10cSrcweir #define FORMATSTRING "FormatString" 54cdf0e10cSrcweir #define LOCALE "Locale" 55cdf0e10cSrcweir 56cdf0e10cSrcweir template< typename Ifc1 > 57cdf0e10cSrcweir ScVbaFormat< Ifc1 >::ScVbaFormat( const uno::Reference< XHelperInterface >& xParent, const uno::Reference< uno::XComponentContext > & xContext, const uno::Reference< beans::XPropertySet >& _xPropertySet, const uno::Reference< frame::XModel >& xModel, bool bCheckAmbiguoity ) throw ( script::BasicErrorException ) : ScVbaFormat_BASE( xParent, xContext ), m_aDefaultLocale( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("en") ), rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "US") ), rtl::OUString() ), mxPropertySet( _xPropertySet ), mxModel( xModel ), mbCheckAmbiguoity( bCheckAmbiguoity ), mbAddIndent( sal_False ) 58cdf0e10cSrcweir { 59cdf0e10cSrcweir try 60cdf0e10cSrcweir { 61cdf0e10cSrcweir if ( !mxModel.is() ) 62cdf0e10cSrcweir DebugHelper::exception(SbERR_METHOD_FAILED, rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "XModel Interface could not be retrieved") ) ); 63cdf0e10cSrcweir // mxServiceInfo is unused, 64cdf0e10cSrcweir // mxNumberFormatsSupplier is initialized when needed in initializeNumberFormats. 65cdf0e10cSrcweir } 66cdf0e10cSrcweir catch (uno::Exception& ) 67cdf0e10cSrcweir { 68cdf0e10cSrcweir DebugHelper::exception(SbERR_METHOD_FAILED, rtl::OUString() ); 69cdf0e10cSrcweir } 70cdf0e10cSrcweir } 71cdf0e10cSrcweir 72cdf0e10cSrcweir template< typename Ifc1 > 73cdf0e10cSrcweir void SAL_CALL 74cdf0e10cSrcweir ScVbaFormat<Ifc1>::setVerticalAlignment( const uno::Any& _oAlignment) throw (script::BasicErrorException, uno::RuntimeException) 75cdf0e10cSrcweir { 76cdf0e10cSrcweir try 77cdf0e10cSrcweir { 78cdf0e10cSrcweir uno::Any aVal; 79cdf0e10cSrcweir sal_Int32 nAlignment = 0; 80cdf0e10cSrcweir if ( !(_oAlignment >>= nAlignment )) 81cdf0e10cSrcweir throw uno::RuntimeException(); 82cdf0e10cSrcweir switch (nAlignment) 83cdf0e10cSrcweir { 84cdf0e10cSrcweir case excel::XlVAlign::xlVAlignBottom : 85cdf0e10cSrcweir aVal = uno::makeAny( table::CellVertJustify_BOTTOM ); 86cdf0e10cSrcweir break; 87cdf0e10cSrcweir case excel::XlVAlign::xlVAlignCenter : 88cdf0e10cSrcweir aVal = uno::makeAny( table::CellVertJustify_CENTER ); 89cdf0e10cSrcweir break; 90cdf0e10cSrcweir case excel::XlVAlign::xlVAlignDistributed: 91cdf0e10cSrcweir case excel::XlVAlign::xlVAlignJustify: 92cdf0e10cSrcweir aVal = uno::makeAny( table::CellVertJustify_STANDARD ); 93cdf0e10cSrcweir break; 94cdf0e10cSrcweir 95cdf0e10cSrcweir case excel::XlVAlign::xlVAlignTop: 96cdf0e10cSrcweir aVal = uno::makeAny( table::CellVertJustify_TOP); 97cdf0e10cSrcweir break; 98cdf0e10cSrcweir default: 99cdf0e10cSrcweir aVal = uno::makeAny( table::CellVertJustify_STANDARD ); 100cdf0e10cSrcweir break; 101cdf0e10cSrcweir } 102cdf0e10cSrcweir mxPropertySet->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_CELLVJUS ) ), aVal ); 103cdf0e10cSrcweir } 104cdf0e10cSrcweir catch (uno::Exception& ) 105cdf0e10cSrcweir { 106cdf0e10cSrcweir DebugHelper::exception(SbERR_METHOD_FAILED, rtl::OUString()); 107cdf0e10cSrcweir } 108cdf0e10cSrcweir } 109cdf0e10cSrcweir 110cdf0e10cSrcweir template< typename Ifc1 > 111cdf0e10cSrcweir uno::Any SAL_CALL 112cdf0e10cSrcweir ScVbaFormat<Ifc1>::getVerticalAlignment( ) throw (script::BasicErrorException, uno::RuntimeException) 113cdf0e10cSrcweir { 114cdf0e10cSrcweir uno::Any aResult = aNULL(); 115cdf0e10cSrcweir try 116cdf0e10cSrcweir { 117cdf0e10cSrcweir if (!isAmbiguous( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_CELLVJUS ) ) ) ) 118cdf0e10cSrcweir { 119cdf0e10cSrcweir table::CellVertJustify aAPIAlignment; 120cdf0e10cSrcweir mxPropertySet->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_CELLVJUS ) ) ) >>= aAPIAlignment; 121cdf0e10cSrcweir switch( aAPIAlignment ) 122cdf0e10cSrcweir { 123cdf0e10cSrcweir case table::CellVertJustify_BOTTOM: 124cdf0e10cSrcweir aResult = uno::makeAny( excel::XlVAlign::xlVAlignBottom ); 125cdf0e10cSrcweir break; 126cdf0e10cSrcweir case table::CellVertJustify_CENTER: 127cdf0e10cSrcweir aResult = uno::makeAny( excel::XlVAlign::xlVAlignCenter ); 128cdf0e10cSrcweir break; 129cdf0e10cSrcweir case table::CellVertJustify_STANDARD: 130cdf0e10cSrcweir aResult = uno::makeAny( excel::XlVAlign::xlVAlignBottom ); 131cdf0e10cSrcweir break; 132cdf0e10cSrcweir case table::CellVertJustify_TOP: 133cdf0e10cSrcweir aResult = uno::makeAny( excel::XlVAlign::xlVAlignTop ); 134cdf0e10cSrcweir break; 135cdf0e10cSrcweir default: 136cdf0e10cSrcweir break; 137cdf0e10cSrcweir } 138cdf0e10cSrcweir } 139cdf0e10cSrcweir } 140cdf0e10cSrcweir catch (uno::Exception& ) 141cdf0e10cSrcweir { 142cdf0e10cSrcweir DebugHelper::exception(SbERR_METHOD_FAILED, rtl::OUString()); 143cdf0e10cSrcweir } 144cdf0e10cSrcweir return aResult; 145cdf0e10cSrcweir } 146cdf0e10cSrcweir 147cdf0e10cSrcweir template< typename Ifc1 > 148cdf0e10cSrcweir void SAL_CALL 149cdf0e10cSrcweir ScVbaFormat<Ifc1>::setHorizontalAlignment( const uno::Any& HorizontalAlignment ) throw (script::BasicErrorException, uno::RuntimeException) 150cdf0e10cSrcweir { 151cdf0e10cSrcweir try 152cdf0e10cSrcweir { 153cdf0e10cSrcweir uno::Any aVal; 154cdf0e10cSrcweir sal_Int32 nAlignment = 0; 155cdf0e10cSrcweir if ( !( HorizontalAlignment >>= nAlignment ) ) 156cdf0e10cSrcweir throw uno::RuntimeException(); 157cdf0e10cSrcweir switch ( nAlignment ) 158cdf0e10cSrcweir { 159cdf0e10cSrcweir case excel::XlHAlign::xlHAlignJustify: 160cdf0e10cSrcweir aVal = uno::makeAny( table::CellHoriJustify_BLOCK); 161cdf0e10cSrcweir break; 162cdf0e10cSrcweir case excel::XlHAlign::xlHAlignCenter: 163cdf0e10cSrcweir aVal = uno::makeAny( table::CellHoriJustify_CENTER ); 164cdf0e10cSrcweir break; 165cdf0e10cSrcweir case excel::XlHAlign::xlHAlignDistributed: 166cdf0e10cSrcweir aVal = uno::makeAny( table::CellHoriJustify_BLOCK); 167cdf0e10cSrcweir break; 168cdf0e10cSrcweir case excel::XlHAlign::xlHAlignLeft: 169cdf0e10cSrcweir aVal = uno::makeAny( table::CellHoriJustify_LEFT); 170cdf0e10cSrcweir break; 171cdf0e10cSrcweir case excel::XlHAlign::xlHAlignRight: 172cdf0e10cSrcweir aVal = uno::makeAny( table::CellHoriJustify_RIGHT); 173cdf0e10cSrcweir break; 174cdf0e10cSrcweir } 175cdf0e10cSrcweir // #FIXME what about the default case above? 176cdf0e10cSrcweir // shouldn't need the test below 177cdf0e10cSrcweir if ( aVal.hasValue() ) 178cdf0e10cSrcweir mxPropertySet->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_CELLHJUS ) ), aVal ); 179cdf0e10cSrcweir } 180cdf0e10cSrcweir catch (uno::Exception& ) 181cdf0e10cSrcweir { 182cdf0e10cSrcweir DebugHelper::exception(SbERR_METHOD_FAILED, rtl::OUString() ); 183cdf0e10cSrcweir } 184cdf0e10cSrcweir 185cdf0e10cSrcweir } 186cdf0e10cSrcweir 187cdf0e10cSrcweir template< typename Ifc1 > 188cdf0e10cSrcweir uno::Any SAL_CALL 189cdf0e10cSrcweir ScVbaFormat<Ifc1>::getHorizontalAlignment( ) throw (script::BasicErrorException, uno::RuntimeException) 190cdf0e10cSrcweir { 191cdf0e10cSrcweir uno::Any NRetAlignment = aNULL(); 192cdf0e10cSrcweir try 193cdf0e10cSrcweir { 194cdf0e10cSrcweir rtl::OUString sHoriJust( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_CELLHJUS ) ); 195cdf0e10cSrcweir if (!isAmbiguous(sHoriJust)) 196cdf0e10cSrcweir { 197cdf0e10cSrcweir table::CellHoriJustify aAPIAlignment = table::CellHoriJustify_BLOCK; 198cdf0e10cSrcweir 199cdf0e10cSrcweir if ( mxPropertySet->getPropertyValue(sHoriJust) >>= aAPIAlignment ) 200cdf0e10cSrcweir { 201cdf0e10cSrcweir switch( aAPIAlignment ) 202cdf0e10cSrcweir { 203cdf0e10cSrcweir case table::CellHoriJustify_BLOCK: 204cdf0e10cSrcweir NRetAlignment = uno::makeAny( excel::XlHAlign::xlHAlignJustify ); 205cdf0e10cSrcweir break; 206cdf0e10cSrcweir case table::CellHoriJustify_CENTER: 207cdf0e10cSrcweir NRetAlignment = uno::makeAny( excel::XlHAlign::xlHAlignCenter ); 208cdf0e10cSrcweir break; 209cdf0e10cSrcweir case table::CellHoriJustify_LEFT: 210cdf0e10cSrcweir NRetAlignment = uno::makeAny( excel::XlHAlign::xlHAlignLeft ); 211cdf0e10cSrcweir break; 212cdf0e10cSrcweir case table::CellHoriJustify_RIGHT: 213cdf0e10cSrcweir NRetAlignment = uno::makeAny( excel::XlHAlign::xlHAlignRight ); 214cdf0e10cSrcweir break; 215cdf0e10cSrcweir default: // handle those other cases with a NULL return 216cdf0e10cSrcweir break; 217cdf0e10cSrcweir } 218cdf0e10cSrcweir } 219cdf0e10cSrcweir } 220cdf0e10cSrcweir } 221cdf0e10cSrcweir catch (uno::Exception& ) 222cdf0e10cSrcweir { 223cdf0e10cSrcweir DebugHelper::exception(SbERR_METHOD_FAILED, rtl::OUString() ); 224cdf0e10cSrcweir } 225cdf0e10cSrcweir return NRetAlignment; 226cdf0e10cSrcweir } 227cdf0e10cSrcweir 228cdf0e10cSrcweir template< typename Ifc1 > 229cdf0e10cSrcweir void SAL_CALL 230cdf0e10cSrcweir ScVbaFormat<Ifc1>::setOrientation( const uno::Any& _aOrientation ) throw (script::BasicErrorException, uno::RuntimeException) 231cdf0e10cSrcweir { 232cdf0e10cSrcweir try 233cdf0e10cSrcweir { 234cdf0e10cSrcweir sal_Int32 nOrientation = 0; 235cdf0e10cSrcweir if ( !( _aOrientation >>= nOrientation ) ) 236cdf0e10cSrcweir throw uno::RuntimeException(); 237cdf0e10cSrcweir uno::Any aVal; 238cdf0e10cSrcweir switch( nOrientation ) 239cdf0e10cSrcweir { 240cdf0e10cSrcweir case excel::XlOrientation::xlDownward: 241cdf0e10cSrcweir aVal = uno::makeAny( table::CellOrientation_TOPBOTTOM); 242cdf0e10cSrcweir break; 243cdf0e10cSrcweir case excel::XlOrientation::xlHorizontal: 244cdf0e10cSrcweir aVal = uno::makeAny( table::CellOrientation_STANDARD ); 245cdf0e10cSrcweir mxPropertySet->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_ROTANG ) ), uno::makeAny( sal_Int32(0) ) ); 246cdf0e10cSrcweir break; 247cdf0e10cSrcweir case excel::XlOrientation::xlUpward: 248cdf0e10cSrcweir aVal = uno::makeAny( table::CellOrientation_BOTTOMTOP); 249cdf0e10cSrcweir break; 250cdf0e10cSrcweir case excel::XlOrientation::xlVertical: 251cdf0e10cSrcweir aVal = uno::makeAny( table::CellOrientation_STACKED); 252cdf0e10cSrcweir break; 253cdf0e10cSrcweir } 254cdf0e10cSrcweir // #FIXME what about the default case above? 255cdf0e10cSrcweir // shouldn't need the test below 256cdf0e10cSrcweir if ( aVal.hasValue() ) 257cdf0e10cSrcweir mxPropertySet->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_CELLORI ) ), aVal ); 258cdf0e10cSrcweir 259cdf0e10cSrcweir } 260cdf0e10cSrcweir catch (uno::Exception& ) 261cdf0e10cSrcweir { 262cdf0e10cSrcweir DebugHelper::exception(SbERR_METHOD_FAILED, rtl::OUString() ); 263cdf0e10cSrcweir } 264cdf0e10cSrcweir } 265cdf0e10cSrcweir template< typename Ifc1 > 266cdf0e10cSrcweir uno::Any SAL_CALL 267cdf0e10cSrcweir ScVbaFormat<Ifc1>::getOrientation( ) throw (script::BasicErrorException, uno::RuntimeException) 268cdf0e10cSrcweir { 269cdf0e10cSrcweir uno::Any NRetOrientation = aNULL(); 270cdf0e10cSrcweir try 271cdf0e10cSrcweir { 272cdf0e10cSrcweir if (!isAmbiguous(rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_CELLORI ) ))) 273cdf0e10cSrcweir { 274cdf0e10cSrcweir table::CellOrientation aOrientation = table::CellOrientation_STANDARD; 275cdf0e10cSrcweir if ( !( mxPropertySet->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_CELLORI ) ) ) >>= aOrientation ) ) 276cdf0e10cSrcweir throw uno::RuntimeException(); 277cdf0e10cSrcweir 278cdf0e10cSrcweir switch(aOrientation) 279cdf0e10cSrcweir { 280cdf0e10cSrcweir case table::CellOrientation_STANDARD: 281cdf0e10cSrcweir NRetOrientation = uno::makeAny( excel::XlOrientation::xlHorizontal ); 282cdf0e10cSrcweir break; 283cdf0e10cSrcweir case table::CellOrientation_BOTTOMTOP: 284cdf0e10cSrcweir NRetOrientation = uno::makeAny( excel::XlOrientation::xlUpward ); 285cdf0e10cSrcweir break; 286cdf0e10cSrcweir case table::CellOrientation_TOPBOTTOM: 287cdf0e10cSrcweir NRetOrientation = uno::makeAny( excel::XlOrientation::xlDownward ); 288cdf0e10cSrcweir break; 289cdf0e10cSrcweir case table::CellOrientation_STACKED: 290cdf0e10cSrcweir NRetOrientation = uno::makeAny( excel::XlOrientation::xlVertical ); 291cdf0e10cSrcweir break; 292cdf0e10cSrcweir default: 293cdf0e10cSrcweir NRetOrientation = uno::makeAny( excel::XlOrientation::xlHorizontal ); 294cdf0e10cSrcweir } 295cdf0e10cSrcweir } 296cdf0e10cSrcweir } 297cdf0e10cSrcweir catch (uno::Exception& ) 298cdf0e10cSrcweir { 299cdf0e10cSrcweir DebugHelper::exception(SbERR_METHOD_FAILED, rtl::OUString()); 300cdf0e10cSrcweir } 301cdf0e10cSrcweir return NRetOrientation; 302cdf0e10cSrcweir } 303cdf0e10cSrcweir 304cdf0e10cSrcweir template< typename Ifc1 > 305cdf0e10cSrcweir void SAL_CALL 306cdf0e10cSrcweir ScVbaFormat<Ifc1>::setWrapText( const uno::Any& _aWrapText ) throw (script::BasicErrorException, uno::RuntimeException) 307cdf0e10cSrcweir { 308cdf0e10cSrcweir try 309cdf0e10cSrcweir { 310cdf0e10cSrcweir mxPropertySet->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_WRAP ) ), _aWrapText); 311cdf0e10cSrcweir } 312cdf0e10cSrcweir catch (uno::Exception& ) 313cdf0e10cSrcweir { 314cdf0e10cSrcweir DebugHelper::exception(SbERR_METHOD_FAILED, rtl::OUString() ); 315cdf0e10cSrcweir } 316cdf0e10cSrcweir } 317cdf0e10cSrcweir 318cdf0e10cSrcweir template< typename Ifc1 > 319cdf0e10cSrcweir uno::Any SAL_CALL 320cdf0e10cSrcweir ScVbaFormat<Ifc1>::getWrapText( ) throw (script::BasicErrorException, uno::RuntimeException) 321cdf0e10cSrcweir { 322cdf0e10cSrcweir uno::Any aWrap = aNULL(); 323cdf0e10cSrcweir try 324cdf0e10cSrcweir { 325cdf0e10cSrcweir rtl::OUString aPropName( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_WRAP ) ) ); 326cdf0e10cSrcweir if (!isAmbiguous( aPropName )) 327cdf0e10cSrcweir { 328cdf0e10cSrcweir aWrap = mxPropertySet->getPropertyValue(aPropName); 329cdf0e10cSrcweir } 330cdf0e10cSrcweir } 331cdf0e10cSrcweir catch (uno::Exception& ) 332cdf0e10cSrcweir { 333cdf0e10cSrcweir DebugHelper::exception(SbERR_METHOD_FAILED, rtl::OUString() ); 334cdf0e10cSrcweir } 335cdf0e10cSrcweir return aWrap; 336cdf0e10cSrcweir } 337cdf0e10cSrcweir 338cdf0e10cSrcweir template< typename Ifc1 > 339cdf0e10cSrcweir uno::Any SAL_CALL 340cdf0e10cSrcweir ScVbaFormat<Ifc1>::Borders( const uno::Any& Index ) throw (script::BasicErrorException, uno::RuntimeException ) 341cdf0e10cSrcweir { 342cdf0e10cSrcweir ScVbaPalette aPalette( excel::getDocShell( mxModel ) ); 343cdf0e10cSrcweir uno::Reference< XCollection > xColl = new ScVbaBorders( thisHelperIface(), ScVbaFormat_BASE::mxContext, uno::Reference< table::XCellRange >( mxPropertySet, uno::UNO_QUERY_THROW ), aPalette ); 344cdf0e10cSrcweir 345cdf0e10cSrcweir if ( Index.hasValue() ) 346cdf0e10cSrcweir { 347cdf0e10cSrcweir return xColl->Item( Index, uno::Any() ); 348cdf0e10cSrcweir } 349cdf0e10cSrcweir return uno::makeAny( xColl ); 350cdf0e10cSrcweir } 351cdf0e10cSrcweir 352cdf0e10cSrcweir template< typename Ifc1 > 353cdf0e10cSrcweir uno::Reference< excel::XFont > SAL_CALL 354cdf0e10cSrcweir ScVbaFormat<Ifc1>::Font( ) throw (script::BasicErrorException, uno::RuntimeException) 355cdf0e10cSrcweir { 356cdf0e10cSrcweir ScVbaPalette aPalette( excel::getDocShell( mxModel ) ); 357cdf0e10cSrcweir return new ScVbaFont( thisHelperIface(), ScVbaFormat_BASE::mxContext, aPalette, mxPropertySet ); 358cdf0e10cSrcweir } 359cdf0e10cSrcweir 360cdf0e10cSrcweir template< typename Ifc1 > 361cdf0e10cSrcweir uno::Reference< excel::XInterior > SAL_CALL 362cdf0e10cSrcweir ScVbaFormat<Ifc1>::Interior( ) throw (script::BasicErrorException, uno::RuntimeException) 363cdf0e10cSrcweir { 364cdf0e10cSrcweir return new ScVbaInterior( thisHelperIface(), ScVbaFormat_BASE::mxContext, mxPropertySet ); 365cdf0e10cSrcweir } 366cdf0e10cSrcweir 367cdf0e10cSrcweir template< typename Ifc1 > 368cdf0e10cSrcweir uno::Any SAL_CALL 369cdf0e10cSrcweir ScVbaFormat<Ifc1>::getNumberFormatLocal( ) throw (script::BasicErrorException, uno::RuntimeException) 370cdf0e10cSrcweir { 371cdf0e10cSrcweir uno::Any aRet = uno::makeAny( rtl::OUString() ); 372cdf0e10cSrcweir try 373cdf0e10cSrcweir { 374cdf0e10cSrcweir rtl::OUString sPropName( RTL_CONSTASCII_USTRINGPARAM( SC_UNO_NUMBERFO ) ); 375cdf0e10cSrcweir if (!isAmbiguous( sPropName )) 376cdf0e10cSrcweir { 377cdf0e10cSrcweir 378cdf0e10cSrcweir initializeNumberFormats(); 379cdf0e10cSrcweir 380cdf0e10cSrcweir sal_Int32 nFormat = 0; 381cdf0e10cSrcweir if ( ! (mxPropertySet->getPropertyValue( sPropName ) >>= nFormat ) ) 382cdf0e10cSrcweir throw uno::RuntimeException(); 383cdf0e10cSrcweir 384cdf0e10cSrcweir rtl::OUString sFormat; 385cdf0e10cSrcweir xNumberFormats->getByKey(nFormat)->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( FORMATSTRING ))) >>= sFormat; 386cdf0e10cSrcweir aRet = uno::makeAny( sFormat.toAsciiLowerCase() ); 387cdf0e10cSrcweir 388cdf0e10cSrcweir } 389cdf0e10cSrcweir } 390cdf0e10cSrcweir catch (uno::Exception& ) 391cdf0e10cSrcweir { 392cdf0e10cSrcweir DebugHelper::exception(SbERR_METHOD_FAILED, rtl::OUString()); 393cdf0e10cSrcweir } 394cdf0e10cSrcweir return aRet; 395cdf0e10cSrcweir 396cdf0e10cSrcweir } 397cdf0e10cSrcweir 398cdf0e10cSrcweir template< typename Ifc1 > 399cdf0e10cSrcweir void 400cdf0e10cSrcweir ScVbaFormat<Ifc1>::setNumberFormat( lang::Locale _aLocale, const rtl::OUString& _sFormatString) throw( script::BasicErrorException ) 401cdf0e10cSrcweir { 402cdf0e10cSrcweir try 403cdf0e10cSrcweir { 404cdf0e10cSrcweir initializeNumberFormats(); 405cdf0e10cSrcweir sal_Int32 nFormat = xNumberFormats->queryKey(_sFormatString, _aLocale , sal_True); 406cdf0e10cSrcweir if (nFormat == -1) 407cdf0e10cSrcweir { 408cdf0e10cSrcweir xNumberFormats->addNew(_sFormatString, _aLocale); 409cdf0e10cSrcweir } 410cdf0e10cSrcweir mxPropertySet->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( SC_UNO_NUMBERFO ) ), uno::makeAny( nFormat ) ); 411cdf0e10cSrcweir } 412cdf0e10cSrcweir catch (uno::Exception& ) 413cdf0e10cSrcweir { 414cdf0e10cSrcweir DebugHelper::exception(SbERR_METHOD_FAILED, rtl::OUString()); 415cdf0e10cSrcweir } 416cdf0e10cSrcweir } 417cdf0e10cSrcweir 418cdf0e10cSrcweir template< typename Ifc1 > 419cdf0e10cSrcweir void SAL_CALL 420cdf0e10cSrcweir ScVbaFormat<Ifc1>::setNumberFormatLocal( const uno::Any& _oLocalFormatString ) throw (script::BasicErrorException, uno::RuntimeException) 421cdf0e10cSrcweir { 422cdf0e10cSrcweir try 423cdf0e10cSrcweir { 424cdf0e10cSrcweir rtl::OUString sLocalFormatString; 425cdf0e10cSrcweir sal_Int32 nFormat = -1; 426cdf0e10cSrcweir rtl::OUString sNumFormat( RTL_CONSTASCII_USTRINGPARAM( SC_UNO_NUMBERFO ) ); 427cdf0e10cSrcweir if ( !(_oLocalFormatString >>= sLocalFormatString ) 428cdf0e10cSrcweir || !( mxPropertySet->getPropertyValue(sNumFormat) >>= nFormat ) ) 429cdf0e10cSrcweir throw uno::RuntimeException(); 430cdf0e10cSrcweir 431cdf0e10cSrcweir sLocalFormatString = sLocalFormatString.toAsciiUpperCase(); 432cdf0e10cSrcweir initializeNumberFormats(); 433cdf0e10cSrcweir lang::Locale aRangeLocale; 434cdf0e10cSrcweir xNumberFormats->getByKey(nFormat)->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( LOCALE ) ) ) >>= aRangeLocale; 435cdf0e10cSrcweir sal_Int32 nNewFormat = xNumberFormats->queryKey(sLocalFormatString, aRangeLocale, sal_True); 436cdf0e10cSrcweir 437cdf0e10cSrcweir if (nNewFormat == -1) 438cdf0e10cSrcweir nNewFormat = xNumberFormats->addNew(sLocalFormatString, aRangeLocale); 439cdf0e10cSrcweir mxPropertySet->setPropertyValue(sNumFormat, uno::makeAny( nNewFormat )); 440cdf0e10cSrcweir } 441cdf0e10cSrcweir catch (uno::Exception& ) 442cdf0e10cSrcweir { 443cdf0e10cSrcweir DebugHelper::exception(SbERR_METHOD_FAILED, rtl::OUString() ); 444cdf0e10cSrcweir } 445cdf0e10cSrcweir } 446cdf0e10cSrcweir 447cdf0e10cSrcweir template< typename Ifc1 > 448cdf0e10cSrcweir void SAL_CALL 449cdf0e10cSrcweir ScVbaFormat<Ifc1>::setNumberFormat( const uno::Any& _oFormatString ) throw (script::BasicErrorException, uno::RuntimeException) 450cdf0e10cSrcweir { 451cdf0e10cSrcweir try 452cdf0e10cSrcweir { 453cdf0e10cSrcweir rtl::OUString sFormatString; 454cdf0e10cSrcweir if ( !( _oFormatString >>= sFormatString ) ) 455cdf0e10cSrcweir throw uno::RuntimeException(); 456cdf0e10cSrcweir 457cdf0e10cSrcweir sFormatString = sFormatString.toAsciiUpperCase(); 458cdf0e10cSrcweir 459cdf0e10cSrcweir lang::Locale aDefaultLocale = m_aDefaultLocale; 460cdf0e10cSrcweir initializeNumberFormats(); 461cdf0e10cSrcweir sal_Int32 nFormat = xNumberFormats->queryKey(sFormatString, aDefaultLocale, sal_True); 462cdf0e10cSrcweir 463cdf0e10cSrcweir if (nFormat == -1) 464cdf0e10cSrcweir nFormat = xNumberFormats->addNew(sFormatString, aDefaultLocale); 465cdf0e10cSrcweir 466cdf0e10cSrcweir lang::Locale aRangeLocale; 467cdf0e10cSrcweir xNumberFormats->getByKey(nFormat)->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( LOCALE ) ) ) >>= aRangeLocale; 468cdf0e10cSrcweir sal_Int32 nNewFormat = xNumberFormatTypes->getFormatForLocale(nFormat, aRangeLocale); 469cdf0e10cSrcweir mxPropertySet->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( SC_UNO_NUMBERFO ) ), uno::makeAny( nNewFormat)); 470cdf0e10cSrcweir } 471cdf0e10cSrcweir catch (uno::Exception& ) 472cdf0e10cSrcweir { 473cdf0e10cSrcweir DebugHelper::exception(SbERR_METHOD_FAILED, rtl::OUString()); 474cdf0e10cSrcweir } 475cdf0e10cSrcweir 476cdf0e10cSrcweir } 477cdf0e10cSrcweir 478cdf0e10cSrcweir template< typename Ifc1 > 479cdf0e10cSrcweir void SAL_CALL 480cdf0e10cSrcweir ScVbaFormat<Ifc1>::setIndentLevel( const uno::Any& _aLevel ) throw (script::BasicErrorException, uno::RuntimeException) 481cdf0e10cSrcweir { 482cdf0e10cSrcweir try 483cdf0e10cSrcweir { 484cdf0e10cSrcweir sal_Int32 nLevel = 0; 485cdf0e10cSrcweir if ( !(_aLevel >>= nLevel ) ) 486cdf0e10cSrcweir throw uno::RuntimeException(); 487cdf0e10cSrcweir table::CellHoriJustify aAPIAlignment = table::CellHoriJustify_STANDARD; 488cdf0e10cSrcweir 489cdf0e10cSrcweir rtl::OUString sHoriJust( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_CELLHJUS ) ); 490cdf0e10cSrcweir if ( !( mxPropertySet->getPropertyValue(sHoriJust) >>= aAPIAlignment ) ) 491cdf0e10cSrcweir throw uno::RuntimeException(); 492cdf0e10cSrcweir if (aAPIAlignment == table::CellHoriJustify_STANDARD) 493cdf0e10cSrcweir mxPropertySet->setPropertyValue( sHoriJust, uno::makeAny( table::CellHoriJustify_LEFT) ) ; 494cdf0e10cSrcweir mxPropertySet->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_PINDENT ) ), uno::makeAny( sal_Int16(nLevel * 352.8) ) ); 495cdf0e10cSrcweir } 496cdf0e10cSrcweir catch (uno::Exception& ) 497cdf0e10cSrcweir { 498cdf0e10cSrcweir DebugHelper::exception(SbERR_METHOD_FAILED, rtl::OUString()); 499cdf0e10cSrcweir } 500cdf0e10cSrcweir } 501cdf0e10cSrcweir 502cdf0e10cSrcweir template< typename Ifc1 > 503cdf0e10cSrcweir uno::Any SAL_CALL 504cdf0e10cSrcweir ScVbaFormat<Ifc1>::getIndentLevel( ) throw (script::BasicErrorException, uno::RuntimeException) 505cdf0e10cSrcweir { 506cdf0e10cSrcweir uno::Any NRetIndentLevel = aNULL(); 507cdf0e10cSrcweir try 508cdf0e10cSrcweir { 509cdf0e10cSrcweir rtl::OUString sParaIndent( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_PINDENT ) ); 510cdf0e10cSrcweir if (!isAmbiguous(sParaIndent)) 511cdf0e10cSrcweir { 512cdf0e10cSrcweir sal_Int16 IndentLevel = 0; 513cdf0e10cSrcweir if ( ( mxPropertySet->getPropertyValue(sParaIndent) >>= IndentLevel ) ) 514cdf0e10cSrcweir NRetIndentLevel = uno::makeAny( sal_Int32( rtl::math::round(static_cast<double>( IndentLevel ) / 352.8)) ); 515cdf0e10cSrcweir else 516cdf0e10cSrcweir NRetIndentLevel = uno::makeAny( sal_Int32(0) ); 517cdf0e10cSrcweir } 518cdf0e10cSrcweir } 519cdf0e10cSrcweir catch (uno::Exception& ) 520cdf0e10cSrcweir { 521cdf0e10cSrcweir DebugHelper::exception(SbERR_METHOD_FAILED, rtl::OUString()); 522cdf0e10cSrcweir } 523cdf0e10cSrcweir return NRetIndentLevel; 524cdf0e10cSrcweir } 525cdf0e10cSrcweir 526cdf0e10cSrcweir template< typename Ifc1 > 527cdf0e10cSrcweir void SAL_CALL 528cdf0e10cSrcweir ScVbaFormat<Ifc1>::setLocked( const uno::Any& _aLocked ) throw (script::BasicErrorException, uno::RuntimeException) 529cdf0e10cSrcweir { 530cdf0e10cSrcweir try 531cdf0e10cSrcweir { 532cdf0e10cSrcweir sal_Bool bIsLocked = sal_False; 533cdf0e10cSrcweir if ( !( _aLocked >>= bIsLocked ) ) 534cdf0e10cSrcweir throw uno::RuntimeException(); 535cdf0e10cSrcweir util::CellProtection aCellProtection; 536cdf0e10cSrcweir rtl::OUString sCellProt( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_CELLPRO ) ); 537cdf0e10cSrcweir mxPropertySet->getPropertyValue(sCellProt) >>= aCellProtection; 538cdf0e10cSrcweir aCellProtection.IsLocked = bIsLocked; 539cdf0e10cSrcweir mxPropertySet->setPropertyValue(sCellProt, uno::makeAny( aCellProtection ) ); 540cdf0e10cSrcweir } 541cdf0e10cSrcweir catch (uno::Exception& ) 542cdf0e10cSrcweir { 543cdf0e10cSrcweir DebugHelper::exception(SbERR_METHOD_FAILED, rtl::OUString() ); 544cdf0e10cSrcweir } 545cdf0e10cSrcweir } 546cdf0e10cSrcweir 547cdf0e10cSrcweir template< typename Ifc1 > 548cdf0e10cSrcweir void SAL_CALL 549cdf0e10cSrcweir ScVbaFormat<Ifc1>::setFormulaHidden( const uno::Any& FormulaHidden ) throw (script::BasicErrorException, uno::RuntimeException) 550cdf0e10cSrcweir { 551cdf0e10cSrcweir try 552cdf0e10cSrcweir { 553cdf0e10cSrcweir sal_Bool bIsFormulaHidden = sal_False; 554cdf0e10cSrcweir FormulaHidden >>= bIsFormulaHidden; 555cdf0e10cSrcweir util::CellProtection aCellProtection; 556cdf0e10cSrcweir rtl::OUString sCellProt( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_CELLPRO ) ); 557cdf0e10cSrcweir mxPropertySet->getPropertyValue(sCellProt) >>= aCellProtection; 558cdf0e10cSrcweir aCellProtection.IsFormulaHidden = bIsFormulaHidden; 559cdf0e10cSrcweir mxPropertySet->setPropertyValue(sCellProt,uno::makeAny(aCellProtection)); 560cdf0e10cSrcweir } 561cdf0e10cSrcweir catch (uno::Exception& ) 562cdf0e10cSrcweir { 563cdf0e10cSrcweir DebugHelper::exception( SbERR_METHOD_FAILED, rtl::OUString() ); 564cdf0e10cSrcweir } 565cdf0e10cSrcweir } 566cdf0e10cSrcweir 567cdf0e10cSrcweir template< typename Ifc1 > 568cdf0e10cSrcweir uno::Any SAL_CALL 569cdf0e10cSrcweir ScVbaFormat<Ifc1>::getLocked( ) throw (script::BasicErrorException, uno::RuntimeException) 570cdf0e10cSrcweir { 571cdf0e10cSrcweir uno::Any aCellProtection = aNULL(); 572cdf0e10cSrcweir try 573cdf0e10cSrcweir { 574cdf0e10cSrcweir rtl::OUString sCellProt( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_CELLPRO ) ); 575cdf0e10cSrcweir 576cdf0e10cSrcweir if (!isAmbiguous(sCellProt)) 577cdf0e10cSrcweir { 578cdf0e10cSrcweir SfxItemSet* pDataSet = getCurrentDataSet(); 579cdf0e10cSrcweir if ( pDataSet ) 580cdf0e10cSrcweir { 581cdf0e10cSrcweir const ScProtectionAttr& rProtAttr = (const ScProtectionAttr &) pDataSet->Get(ATTR_PROTECTION, sal_True); 582cdf0e10cSrcweir SfxItemState eState = pDataSet->GetItemState(ATTR_PROTECTION, sal_True, NULL); 583cdf0e10cSrcweir if(eState != SFX_ITEM_DONTCARE) 584cdf0e10cSrcweir aCellProtection = uno::makeAny(rProtAttr.GetProtection()); 585cdf0e10cSrcweir } 586cdf0e10cSrcweir else // fallback to propertyset 587cdf0e10cSrcweir { 588cdf0e10cSrcweir util::CellProtection cellProtection; 589cdf0e10cSrcweir mxPropertySet->getPropertyValue(sCellProt) >>= aCellProtection; 590cdf0e10cSrcweir aCellProtection = uno::makeAny( cellProtection.IsLocked ); 591cdf0e10cSrcweir } 592cdf0e10cSrcweir } 593cdf0e10cSrcweir } 594cdf0e10cSrcweir catch (uno::Exception& ) 595cdf0e10cSrcweir { 596cdf0e10cSrcweir DebugHelper::exception(SbERR_METHOD_FAILED, rtl::OUString()); 597cdf0e10cSrcweir } 598cdf0e10cSrcweir return aCellProtection; 599cdf0e10cSrcweir } 600cdf0e10cSrcweir 601cdf0e10cSrcweir template< typename Ifc1 > 602cdf0e10cSrcweir uno::Any SAL_CALL 603cdf0e10cSrcweir ScVbaFormat<Ifc1>::getFormulaHidden( ) throw (script::BasicErrorException, uno::RuntimeException) 604cdf0e10cSrcweir { 605cdf0e10cSrcweir uno::Any aBoolRet = aNULL(); 606cdf0e10cSrcweir try 607cdf0e10cSrcweir { 608cdf0e10cSrcweir rtl::OUString sCellProt( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_CELLPRO ) ); 609cdf0e10cSrcweir if (!isAmbiguous(sCellProt)) 610cdf0e10cSrcweir { 611cdf0e10cSrcweir SfxItemSet* pDataSet = getCurrentDataSet(); 612cdf0e10cSrcweir if ( pDataSet ) 613cdf0e10cSrcweir { 614cdf0e10cSrcweir const ScProtectionAttr& rProtAttr = (const ScProtectionAttr &) pDataSet->Get(ATTR_PROTECTION, sal_True); 615cdf0e10cSrcweir SfxItemState eState = pDataSet->GetItemState(ATTR_PROTECTION, sal_True, NULL); 616cdf0e10cSrcweir if(eState != SFX_ITEM_DONTCARE) 617cdf0e10cSrcweir aBoolRet = uno::makeAny(rProtAttr.GetHideFormula()); 618cdf0e10cSrcweir } 619cdf0e10cSrcweir else 620cdf0e10cSrcweir { 621cdf0e10cSrcweir util::CellProtection aCellProtection; 622cdf0e10cSrcweir mxPropertySet->getPropertyValue(sCellProt) >>= aCellProtection; 623cdf0e10cSrcweir aBoolRet = uno::makeAny( aCellProtection.IsFormulaHidden ); 624cdf0e10cSrcweir } 625cdf0e10cSrcweir } 626cdf0e10cSrcweir } 627cdf0e10cSrcweir catch (uno::Exception e) 628cdf0e10cSrcweir { 629cdf0e10cSrcweir DebugHelper::exception(SbERR_METHOD_FAILED, rtl::OUString()); 630cdf0e10cSrcweir } 631cdf0e10cSrcweir return aBoolRet; 632cdf0e10cSrcweir } 633cdf0e10cSrcweir 634cdf0e10cSrcweir template< typename Ifc1 > 635cdf0e10cSrcweir void SAL_CALL 636cdf0e10cSrcweir ScVbaFormat<Ifc1>::setShrinkToFit( const uno::Any& ShrinkToFit ) throw (script::BasicErrorException, uno::RuntimeException) 637cdf0e10cSrcweir { 638cdf0e10cSrcweir try 639cdf0e10cSrcweir { 640cdf0e10cSrcweir mxPropertySet->setPropertyValue(rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_SHRINK_TO_FIT ) ), ShrinkToFit); 641cdf0e10cSrcweir } 642cdf0e10cSrcweir catch (uno::Exception& ) 643cdf0e10cSrcweir { 644cdf0e10cSrcweir DebugHelper::exception(SbERR_NOT_IMPLEMENTED, rtl::OUString() ); 645cdf0e10cSrcweir } 646cdf0e10cSrcweir 647cdf0e10cSrcweir } 648cdf0e10cSrcweir 649cdf0e10cSrcweir template< typename Ifc1 > 650cdf0e10cSrcweir uno::Any SAL_CALL 651cdf0e10cSrcweir ScVbaFormat<Ifc1>::getShrinkToFit( ) throw (script::BasicErrorException, uno::RuntimeException) 652cdf0e10cSrcweir { 653cdf0e10cSrcweir uno::Any aRet = aNULL(); 654cdf0e10cSrcweir try 655cdf0e10cSrcweir { 656cdf0e10cSrcweir rtl::OUString sShrinkToFit( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_SHRINK_TO_FIT ) ); 657cdf0e10cSrcweir if (!isAmbiguous(sShrinkToFit)) 658cdf0e10cSrcweir aRet = mxPropertySet->getPropertyValue(sShrinkToFit); 659cdf0e10cSrcweir } 660cdf0e10cSrcweir catch (uno::Exception& ) 661cdf0e10cSrcweir { 662cdf0e10cSrcweir DebugHelper::exception(SbERR_NOT_IMPLEMENTED, rtl::OUString()); 663cdf0e10cSrcweir } 664cdf0e10cSrcweir return aRet; 665cdf0e10cSrcweir } 666cdf0e10cSrcweir 667cdf0e10cSrcweir template< typename Ifc1 > 668cdf0e10cSrcweir void SAL_CALL 669cdf0e10cSrcweir ScVbaFormat<Ifc1>::setReadingOrder( const uno::Any& ReadingOrder ) throw (script::BasicErrorException, uno::RuntimeException) 670cdf0e10cSrcweir { 671cdf0e10cSrcweir try 672cdf0e10cSrcweir { 673cdf0e10cSrcweir sal_Int32 nReadingOrder = 0; 674cdf0e10cSrcweir if ( !(ReadingOrder >>= nReadingOrder )) 675cdf0e10cSrcweir throw uno::RuntimeException(); 676cdf0e10cSrcweir uno::Any aVal; 677cdf0e10cSrcweir switch(nReadingOrder) 678cdf0e10cSrcweir { 679cdf0e10cSrcweir case excel::Constants::xlLTR: 680cdf0e10cSrcweir aVal = uno::makeAny( text::WritingMode_LR_TB ); 681cdf0e10cSrcweir break; 682cdf0e10cSrcweir case excel::Constants::xlRTL: 683cdf0e10cSrcweir aVal = uno::makeAny( text::WritingMode_RL_TB ); 684cdf0e10cSrcweir break; 685cdf0e10cSrcweir case excel::Constants::xlContext: 686cdf0e10cSrcweir DebugHelper::exception(SbERR_NOT_IMPLEMENTED, rtl::OUString()); 687cdf0e10cSrcweir break; 688cdf0e10cSrcweir default: 689cdf0e10cSrcweir DebugHelper::exception(SbERR_METHOD_FAILED, rtl::OUString()); 690cdf0e10cSrcweir } 691cdf0e10cSrcweir mxPropertySet->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_WRITING ) ), aVal ); 692cdf0e10cSrcweir } 693cdf0e10cSrcweir catch (uno::Exception& ) 694cdf0e10cSrcweir { 695cdf0e10cSrcweir DebugHelper::exception(SbERR_METHOD_FAILED, rtl::OUString()); 696cdf0e10cSrcweir } 697cdf0e10cSrcweir 698cdf0e10cSrcweir } 699cdf0e10cSrcweir 700cdf0e10cSrcweir template< typename Ifc1 > 701cdf0e10cSrcweir uno::Any SAL_CALL 702cdf0e10cSrcweir ScVbaFormat<Ifc1>::getReadingOrder( ) throw (script::BasicErrorException, uno::RuntimeException) 703cdf0e10cSrcweir { 704cdf0e10cSrcweir uno::Any NRetReadingOrder = aNULL(); 705cdf0e10cSrcweir try 706cdf0e10cSrcweir { 707cdf0e10cSrcweir rtl::OUString sWritingMode( RTL_CONSTASCII_USTRINGPARAM( SC_UNONAME_WRITING ) ); 708cdf0e10cSrcweir if (!isAmbiguous(sWritingMode)) 709cdf0e10cSrcweir { 710cdf0e10cSrcweir text::WritingMode aWritingMode = text::WritingMode_LR_TB; 711cdf0e10cSrcweir if ( ( mxPropertySet->getPropertyValue(sWritingMode) ) >>= aWritingMode ) 712cdf0e10cSrcweir switch (aWritingMode){ 713cdf0e10cSrcweir case text::WritingMode_LR_TB: 714cdf0e10cSrcweir NRetReadingOrder = uno::makeAny(excel::Constants::xlLTR); 715cdf0e10cSrcweir break; 716cdf0e10cSrcweir case text::WritingMode_RL_TB: 717cdf0e10cSrcweir NRetReadingOrder = uno::makeAny(excel::Constants::xlRTL); 718cdf0e10cSrcweir break; 719cdf0e10cSrcweir default: 720cdf0e10cSrcweir NRetReadingOrder = uno::makeAny(excel::Constants::xlRTL); 721cdf0e10cSrcweir } 722cdf0e10cSrcweir } 723cdf0e10cSrcweir } 724cdf0e10cSrcweir catch (uno::Exception& ) 725cdf0e10cSrcweir { 726cdf0e10cSrcweir DebugHelper::exception(SbERR_NOT_IMPLEMENTED, rtl::OUString()); 727cdf0e10cSrcweir } 728cdf0e10cSrcweir return NRetReadingOrder; 729cdf0e10cSrcweir 730cdf0e10cSrcweir } 731cdf0e10cSrcweir 732cdf0e10cSrcweir template< typename Ifc1 > 733cdf0e10cSrcweir uno::Any SAL_CALL 734cdf0e10cSrcweir ScVbaFormat< Ifc1 >::getNumberFormat( ) throw (script::BasicErrorException, uno::RuntimeException) 735cdf0e10cSrcweir { 736cdf0e10cSrcweir uno::Any aFormat = aNULL(); 737cdf0e10cSrcweir try 738cdf0e10cSrcweir { 739cdf0e10cSrcweir sal_Int32 nFormat = -1; 740cdf0e10cSrcweir rtl::OUString sNumFormat( RTL_CONSTASCII_USTRINGPARAM( SC_UNO_NUMBERFO ) ); 741cdf0e10cSrcweir if (!isAmbiguous(sNumFormat) && 742cdf0e10cSrcweir ( mxPropertySet->getPropertyValue(sNumFormat) >>= nFormat) ) 743cdf0e10cSrcweir { 744cdf0e10cSrcweir initializeNumberFormats(); 745cdf0e10cSrcweir 746cdf0e10cSrcweir sal_Int32 nNewFormat = xNumberFormatTypes->getFormatForLocale(nFormat, getDefaultLocale() ); 747cdf0e10cSrcweir rtl::OUString sFormat; 748cdf0e10cSrcweir xNumberFormats->getByKey(nNewFormat)->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( FORMATSTRING ))) >>= sFormat; 749cdf0e10cSrcweir aFormat = uno::makeAny( sFormat ); 750cdf0e10cSrcweir } 751cdf0e10cSrcweir } 752cdf0e10cSrcweir catch (uno::Exception& ) 753cdf0e10cSrcweir { 754cdf0e10cSrcweir DebugHelper::exception(SbERR_METHOD_FAILED, rtl::OUString()); 755cdf0e10cSrcweir } 756cdf0e10cSrcweir return aFormat; 757cdf0e10cSrcweir } 758cdf0e10cSrcweir 759cdf0e10cSrcweir template< typename Ifc1 > 760cdf0e10cSrcweir bool 761cdf0e10cSrcweir ScVbaFormat<Ifc1>::isAmbiguous(const rtl::OUString& _sPropertyName) throw ( script::BasicErrorException ) 762cdf0e10cSrcweir { 763cdf0e10cSrcweir bool bResult = false; 764cdf0e10cSrcweir try 765cdf0e10cSrcweir { 766cdf0e10cSrcweir if (mbCheckAmbiguoity) 767cdf0e10cSrcweir bResult = ( getXPropertyState()->getPropertyState(_sPropertyName) == beans::PropertyState_AMBIGUOUS_VALUE ); 768cdf0e10cSrcweir } 769cdf0e10cSrcweir catch (uno::Exception& ) 770cdf0e10cSrcweir { 771cdf0e10cSrcweir DebugHelper::exception(SbERR_METHOD_FAILED, rtl::OUString()); 772cdf0e10cSrcweir } 773cdf0e10cSrcweir return bResult; 774cdf0e10cSrcweir } 775cdf0e10cSrcweir 776cdf0e10cSrcweir template< typename Ifc1 > 777cdf0e10cSrcweir void 778cdf0e10cSrcweir ScVbaFormat<Ifc1>::initializeNumberFormats() throw ( script::BasicErrorException ) 779cdf0e10cSrcweir { 780cdf0e10cSrcweir if ( !xNumberFormats.is() ) 781cdf0e10cSrcweir { 782cdf0e10cSrcweir mxNumberFormatsSupplier.set( mxModel, uno::UNO_QUERY_THROW ); 783cdf0e10cSrcweir xNumberFormats = mxNumberFormatsSupplier->getNumberFormats(); 784cdf0e10cSrcweir xNumberFormatTypes.set( xNumberFormats, uno::UNO_QUERY ); // _THROW? 785cdf0e10cSrcweir } 786cdf0e10cSrcweir } 787cdf0e10cSrcweir 788cdf0e10cSrcweir template< typename Ifc1 > 789cdf0e10cSrcweir uno::Reference< beans::XPropertyState > 790cdf0e10cSrcweir ScVbaFormat<Ifc1>::getXPropertyState() throw ( uno::RuntimeException ) 791cdf0e10cSrcweir { 792cdf0e10cSrcweir if ( !xPropertyState.is() ) 793cdf0e10cSrcweir xPropertyState.set( mxPropertySet, uno::UNO_QUERY_THROW ); 794cdf0e10cSrcweir return xPropertyState; 795cdf0e10cSrcweir } 796cdf0e10cSrcweir 797cdf0e10cSrcweir template< typename Ifc1 > 798cdf0e10cSrcweir rtl::OUString& 799cdf0e10cSrcweir ScVbaFormat<Ifc1>::getServiceImplName() 800cdf0e10cSrcweir { 801cdf0e10cSrcweir static rtl::OUString sImplName( RTL_CONSTASCII_USTRINGPARAM("ScVbaFormat") ); 802cdf0e10cSrcweir return sImplName; 803cdf0e10cSrcweir } 804cdf0e10cSrcweir 805cdf0e10cSrcweir template< typename Ifc1 > 806cdf0e10cSrcweir uno::Sequence< rtl::OUString > 807cdf0e10cSrcweir ScVbaFormat<Ifc1>::getServiceNames() 808cdf0e10cSrcweir { 809cdf0e10cSrcweir static uno::Sequence< rtl::OUString > aServiceNames; 810cdf0e10cSrcweir if ( aServiceNames.getLength() == 0 ) 811cdf0e10cSrcweir { 812cdf0e10cSrcweir aServiceNames.realloc( 1 ); 813cdf0e10cSrcweir aServiceNames[ 0 ] = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("ooo.vba.excel.Format" ) ); 814cdf0e10cSrcweir } 815cdf0e10cSrcweir return aServiceNames; 816cdf0e10cSrcweir } 817cdf0e10cSrcweir 818cdf0e10cSrcweir template< typename Ifc1 > 819cdf0e10cSrcweir ScCellRangesBase* 820cdf0e10cSrcweir ScVbaFormat<Ifc1>::getCellRangesBase() throw ( ::uno::RuntimeException ) 821cdf0e10cSrcweir { 822cdf0e10cSrcweir return ScCellRangesBase::getImplementation( mxPropertySet ); 823cdf0e10cSrcweir } 824cdf0e10cSrcweir 825cdf0e10cSrcweir template< typename Ifc1 > 826cdf0e10cSrcweir SfxItemSet* 827cdf0e10cSrcweir ScVbaFormat<Ifc1>::getCurrentDataSet( ) throw ( uno::RuntimeException ) 828cdf0e10cSrcweir { 829cdf0e10cSrcweir SfxItemSet* pDataSet = excel::ScVbaCellRangeAccess::GetDataSet( getCellRangesBase() ); 830cdf0e10cSrcweir if ( !pDataSet ) 831cdf0e10cSrcweir throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Can't access Itemset for XPropertySet" ) ), uno::Reference< uno::XInterface >() ); 832cdf0e10cSrcweir return pDataSet; 833cdf0e10cSrcweir } 834cdf0e10cSrcweir 835cdf0e10cSrcweir 836cdf0e10cSrcweir template class ScVbaFormat< excel::XStyle >; 837cdf0e10cSrcweir template class ScVbaFormat< excel::XRange >; 838cdf0e10cSrcweir 839cdf0e10cSrcweir 840