27 #include <document.hxx>
45 SAL_WARN_IF( nCnt > 128,
"sc.filter",
"-LotusToSc::DoFunc(): Too many (128)!" );
52 const OString s(
"@<<@123>>");
56 sal_Int32
n = t.indexOf(s);
58 t = t.copy(n + s.getLength());
68 t =
"#UNKNOWN FUNC NAME#";
90 SAL_WARN_IF( nCnt < 2,
"sc.filter",
"+LotusToSc::DoFunc(): ocIndex needs at least 2 parameters!" );
92 eParam[ 0 ] = eParam[ 1 ];
99 SAL_WARN_IF( nCnt != 2,
"sc.filter",
"+LotusToSc::DoFunc(): ocIRR needs 2 parameters!" );
101 eParam[ 0 ] = eParam[ 1 ];
135 "*LotusToSc::DoFunc(): ZINS() needs 3 parameters!" );
137 eParam[ 3 ] = eParam[ 0 ];
138 eParam[ 0 ] = eParam[ 2 ];
146 "*LotusToSc::DoFunc(): TERM() or CTERM() need 3 parameters!" );
148 if ( OString(pExtString) ==
"TERM" )
152 eParam[ 3 ] = eParam[ 1 ];
160 eParam[ 1 ] = eParam[ 0 ];
162 eParam[ 3 ] = eParam[ 2 ];
173 eParam[ 0 ] = eParam[ 1 ];
174 eParam[ 1 ] = eParam[ 2 ];
192 sal_Int16 nLast = nCnt - 1;
197 SAL_WARN_IF( nCnt != 3,
"sc.filter",
"+LotusToSc::DoFunc(): ocPMT needs 3 parameters!" );
202 aPool << eParam[ 1 ];
216 aPool << eParam[ nLast ];
218 for( nPass = nLast - 1 ; nPass >= 0 ; nPass-- )
256 rSRD.
SetRelCol(static_cast<SCCOL>(static_cast<sal_Int16>(nCol)));
260 rSRD.
SetAbsCol(static_cast<SCCOL>(nCol & 0x00FF));
314 rSRD.
SetRelRow(static_cast<SCROW>(static_cast<sal_Int16>(nRow)));
316 rSRD.
SetAbsRow(static_cast<SCROW>(nRow));
330 rSRD.
SetColRel( ( nRelBit & 0x01 ) != 0 );
331 rSRD.
SetRowRel( ( nRelBit & 0x02 ) != 0 );
332 rSRD.
SetTabRel( ( ( nRelBit & 0x04) != 0 ) || !b3D );
372 rtl_TextEncoding e,
bool b)
390 sal_uInt16 nRngIndex;
394 const char* pExtName =
nullptr;
442 eType = pIndexToType( nOc );
443 eOc = pIndexToToken( nOc );
463 DoFunc( eOc, nCnt, pExtName );
471 aPool << aStack << eOc << nBuf0;
483 sal_uInt16 nCol, nRow;
499 nNewId =
aPool.
Store( static_cast<sal_uInt16>(nId) );
507 sal_uInt16 nColS, nRowS, nColE, nRowE;
526 nNewId =
aPool.
Store( static_cast<sal_uInt16>(nId) );
540 aStack <<
aPool.
Store( static_cast<double>(nVal) );
565 if( rRangeNameBufferWK3.
FindRel( aTmp, nRngIndex ) )
569 OUString aText =
"NRREF " + aTmp;
577 if( rRangeNameBufferWK3.
FindAbs( aTmp, nRngIndex ) )
581 OUString aText =
"ABSNREF " + aTmp;
607 if (nStrLen > nMaxEntries)
608 nStrLen = nMaxEntries;
612 std::unique_ptr<char[]>
p(
new (::std::nothrow)
char[ nStrLen + 1 ]);
653 SAL_WARN(
"sc.filter",
"*LotusToSc::Convert(): unknown enum!" );
929 return pType[ nIndex ];
1194 return pToken[ nIndex ];
1458 return pType[ nIndex ];
1723 return pToken[ nIndex ];
1728 static const char* pNames[ 256 ] =
1995 if (rTest ==
"FACT")
1997 else if (rTest ==
"ISEMPTY")
1999 else if (rTest ==
"DEGTORAD")
2001 else if (rTest ==
"RADTODEG")
2003 else if (rTest ==
"SIGN")
2005 else if (rTest ==
"ACOSH")
2007 else if (rTest ==
"ACOTH")
2009 else if (rTest ==
"ASINH")
2011 else if (rTest ==
"ATANH")
2013 else if (rTest ==
"COSH")
2015 else if (rTest ==
"COTH")
2017 else if (rTest ==
"SINH")
2019 else if (rTest ==
"TANH")
2021 else if (rTest ==
"EVEN")
2023 else if (rTest ==
"ODD")
2025 else if (rTest ==
"ACOT")
2027 else if (rTest ==
"COT")
2029 else if (rTest ==
"TRUNC")
2031 else if (rTest ==
"GEOMEAN")
2033 else if (rTest ==
"HARMEAN")
2035 else if (rTest ==
"CORREL")
2037 else if (rTest ==
"MEDIAN")
2039 else if (rTest ==
"COV")
2041 else if (rTest ==
"SKEWNESS")
2043 else if (rTest ==
"CHITEST")
2045 else if (rTest ==
"FTEST")
2047 else if (rTest ==
"AVEDEV")
2049 else if (rTest ==
"PRODUCT")
2051 else if (rTest ==
"PERMUT")
2053 else if (rTest ==
"GAMMALN")
2055 else if (rTest ==
"POISSON")
2057 else if (rTest ==
"NORMAL")
2059 else if (rTest ==
"CRITBINOMIAL")
2061 else if (rTest ==
"TERM")
2063 else if (rTest ==
"CTERM")
2065 else if (rTest ==
"SUMIF")
2067 else if (rTest ==
"COUNTIF")
2069 else if (rTest ==
"DPURECOUNT")
2071 else if (rTest ==
"CSC")
2073 else if (rTest ==
"CSCH")
2075 else if (rTest ==
"LARGE")
2077 else if (rTest ==
"SMALL")
2079 else if (rTest ==
"MODULO")
2081 else if (rTest ==
"ROUNDDOWN")
2083 else if (rTest ==
"ROUNDUP")
2085 else if (rTest ==
"SEC")
2087 else if (rTest ==
"SECH")
OString stripEnd(const OString &rIn, char c)
LotusContext & m_rContext
rtl_TextEncoding eSrcChar
Single reference (one address) into the sheet.
void SetRelCol(SCCOL nVal)
void LotusRelToScRel(sal_uInt16 nCol, sal_uInt16 nRow, ScSingleRefData &rSRD)
void DecToken(TokenId &rParam)
void SetRelTab(SCTAB nVal)
LR_ID GetIndex(SCCOL nCol, SCROW nRow)
void SetAbsRow(SCROW nVal)
void SetRowRel(bool bVal)
sal_uInt64 SeekRel(sal_Int64 nPos)
LotusRangeList maRangeNames
std::unique_ptr< RangeNameBufferWK3 > pRngNmBffWK3
const Reference< XComponentContext > & m_rContext
void SetTabRel(bool bVal)
bool HasMoreTokens() const
sal_uInt64 remainingSize()
bool FindAbs(const OUString &rRef, sal_uInt16 &rIndex)
void SetRelRow(SCROW nVal)
void SetFlag3D(bool bVal)
void SetAbsCol(SCCOL nVal)
void DoFunc(DefTokenId eOc, sal_uInt8 nCnt, const char *pExtName)
ScSheetLimits & GetSheetLimits() const
void IncToken(TokenId &rParam)
void ReadSRD(const ScDocument &rDoc, ScSingleRefData &rSRD, sal_uInt8 nFlags)
static FUNC_TYPE IndexToTypeWK123(sal_uInt8)
std::unique_ptr< ScTokenArray > GetTokenArray(const ScDocument &rDoc, const TokenId &rId)
std::size_t ReadBytes(void *pData, std::size_t nSize)
virtual void Convert(std::unique_ptr< ScTokenArray > &rpErg, sal_Int32 &nRest) override
#define SAL_WARN_IF(condition, area, stream)
static FUNC_TYPE IndexToType(sal_uInt8)
void Read(sal_uInt8 &nByte)
LotusToSc(LotusContext &rContext, SvStream &aStr, svl::SharedStringPool &rSPool, rtl_TextEncoding eSrc, bool b)
void SetAddress(const ScSheetLimits &rLimits, const ScAddress &rAddr, const ScAddress &rPos)
bool FindRel(const OUString &rRef, sal_uInt16 &rIndex)
Complex reference (a range) into the sheet.
static DefTokenId IndexToToken(sal_uInt8)
void Ignore(const tools::Long nSeekRel)
#define SAL_WARN(area, stream)
void SetColRel(bool bVal)
void NegToken(TokenId &rParam)
void ReadCRD(const ScDocument &rDoc, ScComplexRefData &rCRD, sal_uInt8 nFlags)
static DefTokenId IndexToTokenWK123(sal_uInt8)