summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sc/inc/tokenuno.hxx2
-rw-r--r--sc/source/filter/inc/defnamesbuffer.hxx4
-rw-r--r--sc/source/filter/inc/sheetdatabuffer.hxx1
-rw-r--r--sc/source/filter/inc/workbookhelper.hxx7
-rw-r--r--sc/source/filter/oox/defnamesbuffer.cxx24
-rw-r--r--sc/source/filter/oox/sheetdatabuffer.cxx10
-rw-r--r--sc/source/filter/oox/workbookhelper.cxx29
7 files changed, 37 insertions, 40 deletions
diff --git a/sc/inc/tokenuno.hxx b/sc/inc/tokenuno.hxx
index 36486c404dc1..a3d87324d46c 100644
--- a/sc/inc/tokenuno.hxx
+++ b/sc/inc/tokenuno.hxx
@@ -53,7 +53,7 @@ public:
ScDocument& rDoc,
ScTokenArray& rTokenArray,
const com::sun::star::uno::Sequence< com::sun::star::sheet::FormulaToken >& rSequence );
- static bool ConvertToTokenSequence(
+ static SC_DLLPUBLIC bool ConvertToTokenSequence(
ScDocument& rDoc,
com::sun::star::uno::Sequence< com::sun::star::sheet::FormulaToken >& rSequence,
const ScTokenArray& rTokenArray );
diff --git a/sc/source/filter/inc/defnamesbuffer.hxx b/sc/source/filter/inc/defnamesbuffer.hxx
index 61803b19ee4e..d3269a4ae79d 100644
--- a/sc/source/filter/inc/defnamesbuffer.hxx
+++ b/sc/source/filter/inc/defnamesbuffer.hxx
@@ -30,6 +30,7 @@
#define OOX_XLS_DEFINEDNAMESBUFFER_HXX
#include "formulabase.hxx"
+#include "rangenam.hxx"
namespace com { namespace sun { namespace star {
namespace sheet { class XNamedRange; }
@@ -155,8 +156,7 @@ private:
typedef ::std::auto_ptr< StreamDataSequence > StreamDataSeqPtr;
typedef ::std::auto_ptr< BiffInputStreamPos > BiffStreamPosPtr;
- ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XNamedRange >
- mxNamedRange; /// XNamedRange interface of the defined name.
+ ScRangeData* mpScRangeData; /// ScRangeData of the defined name.
sal_Int32 mnTokenIndex; /// Name index used in API token array.
sal_Int16 mnCalcSheet; /// Calc sheet index for sheet-local names.
sal_Unicode mcBuiltinId; /// Identifier for built-in defined names.
diff --git a/sc/source/filter/inc/sheetdatabuffer.hxx b/sc/source/filter/inc/sheetdatabuffer.hxx
index dcf42bcb3ec9..65612bc3f32b 100644
--- a/sc/source/filter/inc/sheetdatabuffer.hxx
+++ b/sc/source/filter/inc/sheetdatabuffer.hxx
@@ -35,7 +35,6 @@
#include "worksheethelper.hxx"
namespace com { namespace sun { namespace star {
- namespace sheet { class XNamedRange; }
namespace util { struct DateTime; }
} } }
diff --git a/sc/source/filter/inc/workbookhelper.hxx b/sc/source/filter/inc/workbookhelper.hxx
index 7a529844ed9c..c4a4ee19b0aa 100644
--- a/sc/source/filter/inc/workbookhelper.hxx
+++ b/sc/source/filter/inc/workbookhelper.hxx
@@ -33,6 +33,7 @@
#include <rtl/ref.hxx>
#include "oox/helper/storagebase.hxx"
#include "biffhelper.hxx"
+#include "rangenam.hxx"
namespace com { namespace sun { namespace star {
namespace container { class XNameAccess; }
@@ -183,8 +184,7 @@ public:
/** Creates and returns a defined name on-the-fly in the Calc document.
The name will not be buffered in the global defined names buffer.
@param orName (in/out-parameter) Returns the resulting used name. */
- ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XNamedRange >
- createNamedRangeObject(
+ ScRangeData* createNamedRangeObject(
::rtl::OUString& orName,
const ::com::sun::star::uno::Sequence< ::com::sun::star::sheet::FormulaToken>& rTokens,
sal_Int32 nIndex,
@@ -193,8 +193,7 @@ public:
/** Creates and returns a defined name on-the-fly in the sheet.
The name will not be buffered in the global defined names buffer.
@param orName (in/out-parameter) Returns the resulting used name. */
- ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XNamedRange >
- createLocalNamedRangeObject(
+ ScRangeData* createLocalNamedRangeObject(
::rtl::OUString& orName,
const ::com::sun::star::uno::Sequence< ::com::sun::star::sheet::FormulaToken>& rTokens,
sal_Int32 nIndex,
diff --git a/sc/source/filter/oox/defnamesbuffer.cxx b/sc/source/filter/oox/defnamesbuffer.cxx
index 8d04f7ad20ae..4eafab759461 100644
--- a/sc/source/filter/oox/defnamesbuffer.cxx
+++ b/sc/source/filter/oox/defnamesbuffer.cxx
@@ -44,6 +44,8 @@
#include "externallinkbuffer.hxx"
#include "formulaparser.hxx"
#include "worksheetbuffer.hxx"
+#include "tokenarray.hxx"
+#include "tokenuno.hxx"
namespace oox {
namespace xls {
@@ -380,9 +382,9 @@ void DefinedName::createNameObject( sal_Int32 nIndex )
// create the name and insert it into the document, maCalcName will be changed to the resulting name
if (maModel.mnSheet >= 0)
- mxNamedRange = createLocalNamedRangeObject( maCalcName, getTokens(), nIndex, nNameFlags, maModel.mnSheet );
+ mpScRangeData = createLocalNamedRangeObject( maCalcName, getTokens(), nIndex, nNameFlags, maModel.mnSheet );
else
- mxNamedRange = createNamedRangeObject( maCalcName, getTokens(), nIndex, nNameFlags );
+ mpScRangeData = createNamedRangeObject( maCalcName, getTokens(), nIndex, nNameFlags );
mnTokenIndex = nIndex;
}
@@ -424,9 +426,9 @@ DefinedName::getTokens()
void DefinedName::convertFormula()
{
- Reference< XFormulaTokens > xTokens( mxNamedRange, UNO_QUERY );
- if( !xTokens.is() )
- return;
+ ScTokenArray* pTokenArray = mpScRangeData->GetCode();
+ Sequence< FormulaToken > aFTokenSeq;
+ (void)ScTokenConversion::ConvertToTokenSequence( this->getScDocument(), aFTokenSeq, *pTokenArray );
// set built-in names (print ranges, repeated titles, filter ranges)
if( !isGlobalName() ) switch( mcBuiltinId )
{
@@ -434,7 +436,7 @@ void DefinedName::convertFormula()
{
Reference< XPrintAreas > xPrintAreas( getSheetFromDoc( mnCalcSheet ), UNO_QUERY );
ApiCellRangeList aPrintRanges;
- getFormulaParser().extractCellRangeList( aPrintRanges, xTokens->getTokens(), false, mnCalcSheet );
+ getFormulaParser().extractCellRangeList( aPrintRanges, aFTokenSeq, false, mnCalcSheet );
if( xPrintAreas.is() && !aPrintRanges.empty() )
xPrintAreas->setPrintAreas( ContainerHelper::vectorToSequence( aPrintRanges ) );
}
@@ -443,7 +445,7 @@ void DefinedName::convertFormula()
{
Reference< XPrintAreas > xPrintAreas( getSheetFromDoc( mnCalcSheet ), UNO_QUERY );
ApiCellRangeList aTitleRanges;
- getFormulaParser().extractCellRangeList( aTitleRanges, xTokens->getTokens(), false, mnCalcSheet );
+ getFormulaParser().extractCellRangeList( aTitleRanges, aFTokenSeq, false, mnCalcSheet );
if( xPrintAreas.is() && !aTitleRanges.empty() )
{
bool bHasRowTitles = false;
@@ -474,10 +476,10 @@ void DefinedName::convertFormula()
bool DefinedName::getAbsoluteRange( CellRangeAddress& orRange ) const
{
- /* ScNamedRangeObj::XCellRangeReferrer::getReferredCells is buggy with
- relative references, so we extract an absolute reference by hand. */
- Reference< XFormulaTokens > xTokens( mxNamedRange, UNO_QUERY );
- return xTokens.is() && getFormulaParser().extractCellRange( orRange, xTokens->getTokens(), false );
+ ScTokenArray* pTokenArray = mpScRangeData->GetCode();
+ Sequence< FormulaToken > aFTokenSeq;
+ ScTokenConversion::ConvertToTokenSequence( this->getScDocument(), aFTokenSeq, *pTokenArray );
+ return getFormulaParser().extractCellRange( orRange, aFTokenSeq, false );
}
// ============================================================================
diff --git a/sc/source/filter/oox/sheetdatabuffer.cxx b/sc/source/filter/oox/sheetdatabuffer.cxx
index 4abf946ed500..245b1674f34b 100644
--- a/sc/source/filter/oox/sheetdatabuffer.cxx
+++ b/sc/source/filter/oox/sheetdatabuffer.cxx
@@ -588,15 +588,13 @@ void SheetDataBuffer::createSharedFormula( const BinAddress& rMapKey, const ApiT
append( static_cast< sal_Int32 >( getSheetIndex() + 1 ) ).
append( sal_Unicode( '_' ) ).append( rMapKey.mnRow ).
append( sal_Unicode( '_' ) ).append( rMapKey.mnCol ).makeStringAndClear();
- Reference< XNamedRange > xNamedRange = createNamedRangeObject( aName, rTokens, 0 );
- OSL_ENSURE( xNamedRange.is(), "SheetDataBuffer::createSharedFormula - cannot create shared formula" );
- PropertySet aNameProps( xNamedRange );
- aNameProps.setProperty( PROP_IsSharedFormula, true );
+ ScRangeData* pScRangeData = createNamedRangeObject( aName, rTokens, 0 );
+ pScRangeData->SetType(RT_SHARED);
// get and store the token index of the defined name
OSL_ENSURE( maSharedFormulas.count( rMapKey ) == 0, "SheetDataBuffer::createSharedFormula - shared formula exists already" );
- sal_Int32 nTokenIndex = 0;
- if( aNameProps.getProperty( nTokenIndex, PROP_TokenIndex ) && (nTokenIndex >= 0) ) try
+ sal_Int32 nTokenIndex = static_cast< sal_Int32 >( pScRangeData->GetIndex() );
+ if( nTokenIndex >= 0 ) try
{
// store the token index in the map
maSharedFormulas[ rMapKey ] = nTokenIndex;
diff --git a/sc/source/filter/oox/workbookhelper.cxx b/sc/source/filter/oox/workbookhelper.cxx
index 5a872c2e43c8..479f504e3c4f 100644
--- a/sc/source/filter/oox/workbookhelper.cxx
+++ b/sc/source/filter/oox/workbookhelper.cxx
@@ -165,9 +165,9 @@ public:
/** Returns the specified cell or page style from the Calc document. */
Reference< XStyle > getStyleObject( const OUString& rStyleName, bool bPageStyle ) const;
/** Creates and returns a defined name on-the-fly in the Calc document. */
- Reference< XNamedRange > createNamedRangeObject( OUString& orName, const Sequence< FormulaToken>& rTokens, sal_Int32 nIndex, sal_Int32 nNameFlags ) const;
+ ScRangeData* createNamedRangeObject( OUString& orName, const Sequence< FormulaToken>& rTokens, sal_Int32 nIndex, sal_Int32 nNameFlags ) const;
/** Creates and returns a defined name on the-fly in the correct Calc sheet. */
- Reference< XNamedRange > createLocalNamedRangeObject( OUString& orName, const ::com::sun::star::uno::Sequence< ::com::sun::star::sheet::FormulaToken>& rTokens, sal_Int32 nIndex, sal_Int32 nNameFlags, sal_Int32 nTab ) const;
+ ScRangeData* createLocalNamedRangeObject( OUString& orName, const Sequence< FormulaToken>& rTokens, sal_Int32 nIndex, sal_Int32 nNameFlags, sal_Int32 nTab ) const;
/** Creates and returns a database range on-the-fly in the Calc document. */
Reference< XDatabaseRange > createDatabaseRangeObject( OUString& orName, const CellRangeAddress& rRangeAddr ) const;
/** Creates and returns an unnamed database range on-the-fly in the Calc document. */
@@ -358,7 +358,7 @@ Reference< XStyle > WorkbookGlobals::getStyleObject( const OUString& rStyleName,
OSL_ENSURE( xStyle.is(), "WorkbookGlobals::getStyleObject - cannot access style object" );
return xStyle;
}
-void lcl_addNewByNameAndTokens( ScDocument& rDoc, ScRangeName* pNames, const OUString& rName, const Sequence<FormulaToken>& rTokens, sal_Int16 nIndex, sal_Int32 nUnoType )
+ScRangeData* lcl_addNewByNameAndTokens( ScDocument& rDoc, ScRangeName* pNames, const OUString& rName, const Sequence<FormulaToken>& rTokens, sal_Int16 nIndex, sal_Int32 nUnoType )
{
bool bDone = false;
sal_uInt16 nNewType = RT_NAME;
@@ -376,12 +376,14 @@ void lcl_addNewByNameAndTokens( ScDocument& rDoc, ScRangeName* pNames, const OUS
bDone = true;
if (!bDone)
throw RuntimeException();
+ return pNew;
}
-Reference< XNamedRange > WorkbookGlobals::createNamedRangeObject( OUString& orName, const Sequence< FormulaToken>& rTokens, sal_Int32 nIndex, sal_Int32 nNameFlags ) const
+ScRangeData* WorkbookGlobals::createNamedRangeObject( OUString& orName, const Sequence< FormulaToken>& rTokens, sal_Int32 nIndex, sal_Int32 nNameFlags ) const
{
// create the name and insert it into the Calc document
Reference< XNamedRange > xNamedRange;
+ ScRangeData* pScRangeData;
if( !orName.isEmpty() ) try
{
// find an unused name
@@ -392,20 +394,19 @@ Reference< XNamedRange > WorkbookGlobals::createNamedRangeObject( OUString& orNa
// create the named range
ScDocument& rDoc = getScDocument();
ScRangeName* pNames = rDoc.GetRangeName();
- lcl_addNewByNameAndTokens( rDoc, pNames, orName, rTokens, nIndex, nNameFlags );
- xNamedRange.set( xNamedRanges->getByName( orName ), UNO_QUERY );
+ pScRangeData = lcl_addNewByNameAndTokens( rDoc, pNames, orName, rTokens, nIndex, nNameFlags );
}
catch( Exception& )
{
}
- OSL_ENSURE( xNamedRange.is(), "WorkbookGlobals::createNamedRangeObject - cannot create defined name" );
- return xNamedRange;
+ return pScRangeData;
}
-Reference< XNamedRange > WorkbookGlobals::createLocalNamedRangeObject( OUString& orName, const ::com::sun::star::uno::Sequence< ::com::sun::star::sheet::FormulaToken>& rTokens, sal_Int32 nIndex, sal_Int32 nNameFlags, sal_Int32 nTab ) const
+ScRangeData* WorkbookGlobals::createLocalNamedRangeObject( OUString& orName, const Sequence< FormulaToken >& rTokens, sal_Int32 nIndex, sal_Int32 nNameFlags, sal_Int32 nTab ) const
{
// create the name and insert it into the Calc document
Reference< XNamedRange > xNamedRange;
+ ScRangeData* pScRangeData;
if( !orName.isEmpty() ) try
{
// find an unused name
@@ -420,14 +421,12 @@ Reference< XNamedRange > WorkbookGlobals::createLocalNamedRangeObject( OUString&
// create the named range
ScDocument& rDoc = getScDocument();
ScRangeName* pNames = rDoc.GetRangeName( nTab );
- lcl_addNewByNameAndTokens( rDoc, pNames, orName, rTokens, nIndex, nNameFlags );
- xNamedRange.set( xNamedRanges->getByName( orName ), UNO_QUERY );
+ pScRangeData = lcl_addNewByNameAndTokens( rDoc, pNames, orName, rTokens, nIndex, nNameFlags );
}
catch( Exception& )
{
}
- OSL_ENSURE( xNamedRange.is(), "WorkbookGlobals::createLocalNamedRangeObject - cannot create defined name" );
- return xNamedRange;
+ return pScRangeData;
}
Reference< XDatabaseRange > WorkbookGlobals::createDatabaseRangeObject( OUString& orName, const CellRangeAddress& rRangeAddr ) const
@@ -743,12 +742,12 @@ Reference< XStyle > WorkbookHelper::getStyleObject( const OUString& rStyleName,
return mrBookGlob.getStyleObject( rStyleName, bPageStyle );
}
-Reference< XNamedRange > WorkbookHelper::createNamedRangeObject( OUString& orName, const Sequence< FormulaToken>& rTokens, sal_Int32 nIndex, sal_Int32 nNameFlags ) const
+ScRangeData* WorkbookHelper::createNamedRangeObject( OUString& orName, const Sequence< FormulaToken>& rTokens, sal_Int32 nIndex, sal_Int32 nNameFlags ) const
{
return mrBookGlob.createNamedRangeObject( orName, rTokens, nIndex, nNameFlags );
}
-Reference< XNamedRange > WorkbookHelper::createLocalNamedRangeObject( OUString& orName, const ::com::sun::star::uno::Sequence< ::com::sun::star::sheet::FormulaToken>& rTokens, sal_Int32 nIndex, sal_Int32 nNameFlags, sal_Int32 nTab ) const
+ScRangeData* WorkbookHelper::createLocalNamedRangeObject( OUString& orName, const Sequence< FormulaToken>& rTokens, sal_Int32 nIndex, sal_Int32 nNameFlags, sal_Int32 nTab ) const
{
return mrBookGlob.createLocalNamedRangeObject( orName, rTokens, nIndex, nNameFlags, nTab );
}