26 #include <com/sun/star/sheet/ComplexReference.hpp>
27 #include <com/sun/star/sheet/ExternalReference.hpp>
28 #include <com/sun/star/sheet/ReferenceFlags.hpp>
29 #include <com/sun/star/sheet/AddressConvention.hpp>
30 #include <com/sun/star/sheet/NameToken.hpp>
31 #include <com/sun/star/table/CellAddress.hpp>
38 #include <unonames.hxx>
39 #include <compiler.hxx>
40 #include <tokenarray.hxx>
57 {
u"", 0, css::uno::Type(), 0, 0 }
59 return aFormulaParserMap_Impl;
66 mnConv( sheet::AddressConvention::UNSPECIFIED ),
68 mbIgnoreSpaces( true ),
71 mpDocShell->GetDocument().AddUnoObject(*
this);
84 if ( rHint.
GetId() == SfxHintId::Dying )
108 sheet::FormulaLanguage::ENGLISH :
109 sheet::FormulaLanguage::NATIVE;
126 const OUString& aFormula,
const table::CellAddress& rReferencePos )
129 uno::Sequence<sheet::FormulaToken> aRet;
141 std::unique_ptr<ScTokenArray> pCode = aCompiler.CompileString( aFormula );
149 const uno::Sequence<sheet::FormulaToken>& aTokens,
const table::CellAddress& rReferencePos )
165 aCompiler.CreateStringFromTokenArray( aBuffer );
166 aRet = aBuffer.makeStringAndClear();
182 const OUString& aPropertyName,
const uno::Any& aValue )
193 throw lang::IllegalArgumentException();
217 throw lang::IllegalArgumentException();
227 throw lang::IllegalArgumentException();
230 throw beans::UnknownPropertyException(aPropertyName);
262 throw beans::UnknownPropertyException(aPropertyName);
273 rAPI.RelativeColumn = 0;
274 rAPI.RelativeRow = 0;
275 rAPI.RelativeSheet = 0;
277 sal_Int32 nFlags = 0;
278 if ( rRef.IsColRel() )
280 nFlags |= sheet::ReferenceFlags::COLUMN_RELATIVE;
281 rAPI.RelativeColumn = rRef.Col();
284 rAPI.Column = rRef.Col();
286 if ( rRef.IsRowRel() )
288 nFlags |= sheet::ReferenceFlags::ROW_RELATIVE;
289 rAPI.RelativeRow = rRef.Row();
292 rAPI.Row = rRef.Row();
294 if ( rRef.IsColDeleted() ) nFlags |= sheet::ReferenceFlags::COLUMN_DELETED;
295 if ( rRef.IsRowDeleted() ) nFlags |= sheet::ReferenceFlags::ROW_DELETED;
296 if ( rRef.IsFlag3D() ) nFlags |= sheet::ReferenceFlags::SHEET_3D;
297 if ( rRef.IsRelName() ) nFlags |= sheet::ReferenceFlags::RELATIVE_NAME;
303 sal_Int32 nFlags = 0;
306 nFlags |= sheet::ReferenceFlags::COLUMN_RELATIVE;
307 rAPI.RelativeColumn = rRef.
Col();
312 rAPI.RelativeColumn = 0;
313 rAPI.Column = rRef.
Col();
318 nFlags |= sheet::ReferenceFlags::ROW_RELATIVE;
319 rAPI.RelativeRow = rRef.
Row();
324 rAPI.RelativeRow = 0;
325 rAPI.Row = rRef.
Row();
330 nFlags |= sheet::ReferenceFlags::SHEET_RELATIVE;
331 rAPI.RelativeSheet = rRef.
Tab();
336 rAPI.RelativeSheet = 0;
337 rAPI.Sheet = rRef.
Tab();
340 if ( rRef.
IsColDeleted() ) nFlags |= sheet::ReferenceFlags::COLUMN_DELETED;
341 if ( rRef.
IsRowDeleted() ) nFlags |= sheet::ReferenceFlags::ROW_DELETED;
342 if ( rRef.
IsTabDeleted() ) nFlags |= sheet::ReferenceFlags::SHEET_DELETED;
343 if ( rRef.
IsFlag3D() ) nFlags |= sheet::ReferenceFlags::SHEET_3D;
344 if ( rRef.
IsRelName() ) nFlags |= sheet::ReferenceFlags::RELATIVE_NAME;
349 ScTokenArray& rTokenArray,
const uno::Sequence<sheet::FormulaToken>& rSequence )
355 uno::Sequence<sheet::FormulaToken>& rSequence,
const ScTokenArray& rTokenArray )
357 sal_Int32 nLen =
static_cast<sal_Int32
>(rTokenArray.
GetLen());
361 rSequence.realloc(nLen);
365 sheet::FormulaToken& rAPI = rSequence[
nPos];
374 rAPI.Data <<=
static_cast<sal_Int32
>(rToken.
GetByte());
391 sheet::SingleReference aSingleRef;
393 rAPI.Data <<= aSingleRef;
398 sheet::ComplexReference aCompRef;
401 rAPI.Data <<= aCompRef;
406 sheet::NameToken aNameToken;
407 aNameToken.Index =
static_cast<sal_Int32
>( rToken.
GetIndex() );
408 aNameToken.Sheet = rToken.
GetSheet();
409 rAPI.Data <<= aNameToken;
418 sheet::SingleReference aSingleRef;
423 aSingleRef.Sheet =
static_cast< sal_Int32
>( nCacheId );
424 sheet::ExternalReference aExtRef;
426 aExtRef.Reference <<= aSingleRef;
427 rAPI.Data <<= aExtRef;
433 sheet::ComplexReference aComplRef;
439 aComplRef.Reference1.Sheet =
static_cast< sal_Int32
>( nCacheId );
441 aComplRef.Reference2.Sheet =
442 aComplRef.Reference1.Sheet +
444 sheet::ExternalReference aExtRef;
446 aExtRef.Reference <<= aComplRef;
447 rAPI.Data <<= aExtRef;
453 sheet::ExternalReference aExtRef;
456 rAPI.Data <<= aExtRef;
469 rAPI.OpCode =
static_cast<sal_Int32
>(eOpCode);
473 rSequence.realloc(0);
477 :
formula::FormulaOpCodeMapperObj(
std::move(_pCompiler))
bool IsTabDeleted() const
OUString getString() const
SC_DLLPUBLIC svl::SharedStringPool & GetSharedStringPool()
#define SC_UNO_EXTERNALLINKS
#define SC_SERVICENAME_FORMULAPARS
Single reference (one address) into the sheet.
#define SC_UNO_COMPILEFAP
#define SC_UNO_FORMULACONVENTION
void SetExternalLinks(const css::uno::Sequence< css::sheet::ExternalLinkInfo > &rLinks)
Set external link info for ScAddress::CONV_XL_OOX.
SC_DLLPUBLIC formula::FormulaGrammar::Grammar GetGrammar() const
#define SC_UNO_IGNORELEADING
static void lcl_SingleRefToApi(sheet::SingleReference &rAPI, const ScSingleRefData &rRef)
SC_DLLPUBLIC ScExternalRefManager * GetExternalRefManager() const
static bool FillMixedArray(css::uno::Any &rAny, ScDocument &rDoc, const ScRange &rRange, bool bAllowNV=false)
#define SAL_N_ELEMENTS(arr)
static void lcl_ExternalRefToApi(sheet::SingleReference &rAPI, const ScSingleRefData &rRef)
static SC_DLLPUBLIC void ConvertToTokenSequence(const ScDocument &rDoc, css::uno::Sequence< css::sheet::FormulaToken > &rSequence, const ScTokenArray &rTokenArray)
static SC_DLLPUBLIC bool ConvertToTokenArray(ScDocument &rDoc, ScTokenArray &rTokenArray, const css::uno::Sequence< css::sheet::FormulaToken > &rSequence)
ScExternalRefCache::TableTypeRef getCacheTable(sal_uInt16 nFileId, size_t nTabIndex) const
Get a cache table instance for specified table and table index.
css::uno::Type const & get()
#define SC_SIMPLE_SERVICE_INFO(ClassName, ClassNameAscii, ServiceAscii)
static void FillScAddress(ScAddress &rScAddress, const css::table::CellAddress &rApiAddress)
#define SC_IMPL_DUMMY_PROPERTY_LISTENER(ClassName)
void SetFormulaLanguage(const OpCodeMapPtr &xMap)
Set symbol map if not empty.
void SetRefConvention(const Convention *pConvP)
#define SC_UNO_COMPILEENGLISH
std::unique_ptr< char[]> aBuffer
void RemoveUnoObject(SfxListener &rObject)
const ScDocument & GetDocument() const
static const SfxItemPropertyMapEntry * lcl_GetFormulaParserMap()
#define SAL_WARN(area, stream)
bool IsRowDeleted() const
bool IsColDeleted() const
Use this guard when performing something from the API that might query values from external reference...