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;
77 mnConv( sheet::AddressConvention::UNSPECIFIED ),
79 mbIgnoreSpaces( true ),
82 mpDocShell->GetDocument().AddUnoObject(*
this);
95 if ( rHint.
GetId() == SfxHintId::Dying )
114 sheet::FormulaLanguage::OOXML :
115 (
mbEnglish ? sheet::FormulaLanguage::ENGLISH : sheet::FormulaLanguage::NATIVE));
128 const OUString& aFormula,
const table::CellAddress& rReferencePos )
131 uno::Sequence<sheet::FormulaToken> aRet;
143 std::unique_ptr<ScTokenArray> pCode = aCompiler.CompileString( aFormula );
151 const uno::Sequence<sheet::FormulaToken>& aTokens,
const table::CellAddress& rReferencePos )
167 aCompiler.CreateStringFromTokenArray( aBuffer );
168 aRet = aBuffer.makeStringAndClear();
184 const OUString& aPropertyName,
const uno::Any& aValue )
195 throw lang::IllegalArgumentException();
233 throw lang::IllegalArgumentException();
243 throw lang::IllegalArgumentException();
246 throw beans::UnknownPropertyException(aPropertyName);
278 throw beans::UnknownPropertyException(aPropertyName);
289 rAPI.RelativeColumn = 0;
290 rAPI.RelativeRow = 0;
291 rAPI.RelativeSheet = 0;
293 sal_Int32 nFlags = 0;
294 if ( rRef.IsColRel() )
296 nFlags |= sheet::ReferenceFlags::COLUMN_RELATIVE;
297 rAPI.RelativeColumn = rRef.Col();
300 rAPI.Column = rRef.Col();
302 if ( rRef.IsRowRel() )
304 nFlags |= sheet::ReferenceFlags::ROW_RELATIVE;
305 rAPI.RelativeRow = rRef.Row();
308 rAPI.Row = rRef.Row();
310 if ( rRef.IsColDeleted() ) nFlags |= sheet::ReferenceFlags::COLUMN_DELETED;
311 if ( rRef.IsRowDeleted() ) nFlags |= sheet::ReferenceFlags::ROW_DELETED;
312 if ( rRef.IsFlag3D() ) nFlags |= sheet::ReferenceFlags::SHEET_3D;
313 if ( rRef.IsRelName() ) nFlags |= sheet::ReferenceFlags::RELATIVE_NAME;
319 sal_Int32 nFlags = 0;
322 nFlags |= sheet::ReferenceFlags::COLUMN_RELATIVE;
323 rAPI.RelativeColumn = rRef.
Col();
328 rAPI.RelativeColumn = 0;
329 rAPI.Column = rRef.
Col();
334 nFlags |= sheet::ReferenceFlags::ROW_RELATIVE;
335 rAPI.RelativeRow = rRef.
Row();
340 rAPI.RelativeRow = 0;
341 rAPI.Row = rRef.
Row();
346 nFlags |= sheet::ReferenceFlags::SHEET_RELATIVE;
347 rAPI.RelativeSheet = rRef.
Tab();
352 rAPI.RelativeSheet = 0;
353 rAPI.Sheet = rRef.
Tab();
356 if ( rRef.
IsColDeleted() ) nFlags |= sheet::ReferenceFlags::COLUMN_DELETED;
357 if ( rRef.
IsRowDeleted() ) nFlags |= sheet::ReferenceFlags::ROW_DELETED;
358 if ( rRef.
IsTabDeleted() ) nFlags |= sheet::ReferenceFlags::SHEET_DELETED;
359 if ( rRef.
IsFlag3D() ) nFlags |= sheet::ReferenceFlags::SHEET_3D;
360 if ( rRef.
IsRelName() ) nFlags |= sheet::ReferenceFlags::RELATIVE_NAME;
365 ScTokenArray& rTokenArray,
const uno::Sequence<sheet::FormulaToken>& rSequence )
371 uno::Sequence<sheet::FormulaToken>& rSequence,
const ScTokenArray& rTokenArray )
373 sal_Int32 nLen =
static_cast<sal_Int32
>(rTokenArray.
GetLen());
377 rSequence.realloc(nLen);
381 sheet::FormulaToken& rAPI = rSequence[
nPos];
390 rAPI.Data <<=
static_cast<sal_Int32
>(rToken.
GetByte());
407 sheet::SingleReference aSingleRef;
409 rAPI.Data <<= aSingleRef;
414 sheet::ComplexReference aCompRef;
417 rAPI.Data <<= aCompRef;
422 sheet::NameToken aNameToken;
423 aNameToken.Index =
static_cast<sal_Int32
>( rToken.
GetIndex() );
424 aNameToken.Sheet = rToken.
GetSheet();
425 rAPI.Data <<= aNameToken;
434 sheet::SingleReference aSingleRef;
439 aSingleRef.Sheet =
static_cast< sal_Int32
>( nCacheId );
440 sheet::ExternalReference aExtRef;
442 aExtRef.Reference <<= aSingleRef;
443 rAPI.Data <<= aExtRef;
449 sheet::ComplexReference aComplRef;
455 aComplRef.Reference1.Sheet =
static_cast< sal_Int32
>( nCacheId );
457 aComplRef.Reference2.Sheet =
458 aComplRef.Reference1.Sheet +
460 sheet::ExternalReference aExtRef;
462 aExtRef.Reference <<= aComplRef;
463 rAPI.Data <<= aExtRef;
469 sheet::ExternalReference aExtRef;
472 rAPI.Data <<= aExtRef;
485 rAPI.OpCode =
static_cast<sal_Int32
>(eOpCode);
489 rSequence.realloc(0);
493 :
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.
constexpr sal_Int16 nConvMapCount
#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
const formula::FormulaGrammar::AddressConvention aConvMap[]
bool IsColDeleted() const
Use this guard when performing something from the API that might query values from external reference...