summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sc/inc/cellform.hxx5
-rw-r--r--sc/inc/cellvalue.hxx11
-rw-r--r--sc/inc/chgtrack.hxx7
-rw-r--r--sc/inc/editutil.hxx13
-rw-r--r--sc/inc/global.hxx7
-rw-r--r--sc/qa/unit/subsequent_filters-test.cxx9
-rw-r--r--sc/source/core/data/cellvalue.cxx4
-rw-r--r--sc/source/core/data/column2.cxx8
-rw-r--r--sc/source/core/data/column3.cxx12
-rw-r--r--sc/source/core/data/conditio.cxx9
-rw-r--r--sc/source/core/data/dociter.cxx8
-rw-r--r--sc/source/core/data/document.cxx2
-rw-r--r--sc/source/core/data/global.cxx16
-rw-r--r--sc/source/core/data/table3.cxx2
-rw-r--r--sc/source/core/data/validat.cxx2
-rw-r--r--sc/source/core/tool/cellform.cxx10
-rw-r--r--sc/source/core/tool/chgtrack.cxx22
-rw-r--r--sc/source/core/tool/editutil.cxx61
-rw-r--r--sc/source/core/tool/interpr4.cxx10
-rw-r--r--sc/source/core/tool/rangeseq.cxx2
-rw-r--r--sc/source/filter/dif/difexp.cxx2
-rw-r--r--sc/source/filter/html/htmlexp.cxx2
-rw-r--r--sc/source/filter/xcl97/XclExpChangeTrack.cxx2
-rw-r--r--sc/source/filter/xml/XMLChangeTrackingExportHelper.cxx8
-rw-r--r--sc/source/ui/docshell/docsh.cxx4
-rw-r--r--sc/source/ui/docshell/docsh3.cxx4
-rw-r--r--sc/source/ui/docshell/externalrefmgr.cxx4
-rw-r--r--sc/source/ui/miscdlgs/acredlin.cxx4
-rw-r--r--sc/source/ui/unoobj/cellsuno.cxx4
-rw-r--r--sc/source/ui/view/output2.cxx3
30 files changed, 167 insertions, 90 deletions
diff --git a/sc/inc/cellform.hxx b/sc/inc/cellform.hxx
index 87181ca06cf6..a2369b7cf352 100644
--- a/sc/inc/cellform.hxx
+++ b/sc/inc/cellform.hxx
@@ -43,7 +43,7 @@ public:
static void GetString(
ScRefCellValue& rCell, sal_uLong nFormat, OUString& rString,
- Color** ppColor, SvNumberFormatter& rFormatter, bool bNullVals = true,
+ Color** ppColor, SvNumberFormatter& rFormatter, const ScDocument* pDoc, bool bNullVals = true,
bool bFormula = false, ScForceTextFmt eForceTextFmt = ftDontForce,
bool bUseStarFormat = false );
@@ -53,7 +53,8 @@ public:
bool bFormula = false, ScForceTextFmt eForceTextFmt = ftDontForce, bool bUseStarFormat = false );
static void GetInputString(
- ScRefCellValue& rCell, sal_uLong nFormat, OUString& rString, SvNumberFormatter& rFormatter );
+ ScRefCellValue& rCell, sal_uLong nFormat, OUString& rString, SvNumberFormatter& rFormatter,
+ const ScDocument* pDoc );
};
diff --git a/sc/inc/cellvalue.hxx b/sc/inc/cellvalue.hxx
index fb7c17573fb8..bdb483e3bd4d 100644
--- a/sc/inc/cellvalue.hxx
+++ b/sc/inc/cellvalue.hxx
@@ -126,7 +126,16 @@ struct SC_DLLPUBLIC ScRefCellValue
double getValue();
- OUString getString();
+ /** Retrieve string value.
+
+ @param pDoc
+ Needed to resolve EditCells' field contents, obtain a
+ ScFieldEditEngine from that document. May be NULL if there is
+ no ScDocument in the calling context but then the document
+ specific fields can not be resolved. See
+ ScEditUtil::GetString().
+ */
+ OUString getString( const ScDocument* pDoc );
bool isEmpty() const;
diff --git a/sc/inc/chgtrack.hxx b/sc/inc/chgtrack.hxx
index aef13cf562c8..872f268599e0 100644
--- a/sc/inc/chgtrack.hxx
+++ b/sc/inc/chgtrack.hxx
@@ -702,7 +702,8 @@ class ScChangeActionContent : public ScChangeAction
void SetValueString( OUString& rValue, ScCellValue& rCell, const OUString& rStr, ScDocument* pDoc );
- void GetValueString( OUString& rStr, const OUString& rValue, const ScCellValue& rCell ) const;
+ void GetValueString( OUString& rStr, const OUString& rValue, const ScCellValue& rCell,
+ const ScDocument* pDoc ) const;
void GetFormulaString( OUString& rStr, const ScFormulaCell* pCell ) const;
@@ -788,8 +789,8 @@ public:
// assigns string / creates forumula cell
void SetOldValue( const OUString& rOld, ScDocument* pDoc );
- void GetOldString( OUString& rStr ) const;
- void GetNewString( OUString& rStr ) const;
+ void GetOldString( OUString& rStr, const ScDocument* pDoc ) const;
+ void GetNewString( OUString& rStr, const ScDocument* pDoc ) const;
SC_DLLPUBLIC const ScCellValue& GetOldCell() const;
SC_DLLPUBLIC const ScCellValue& GetNewCell() const;
virtual void GetDescription(
diff --git a/sc/inc/editutil.hxx b/sc/inc/editutil.hxx
index c033415e7733..f27bbf8e680f 100644
--- a/sc/inc/editutil.hxx
+++ b/sc/inc/editutil.hxx
@@ -54,12 +54,19 @@ public:
static String ModifyDelimiters( const String& rOld );
/// Retrieves string with paragraphs delimited by spaces
- static String GetSpaceDelimitedString( const EditEngine& rEngine );
+ static OUString GetSpaceDelimitedString( const EditEngine& rEngine );
/// Retrieves string with paragraphs delimited by new lines ('\n').
- static String GetMultilineString( const EditEngine& rEngine );
+ static OUString GetMultilineString( const EditEngine& rEngine );
- SC_DLLPUBLIC static OUString GetString( const EditTextObject& rEditText );
+ /** Retrieves string with paragraphs delimited by new lines ('\n').
+
+ @param pDoc
+ If not NULL, use pDoc->GetEditEngine() to retrieve field content.
+ If NULL, a static mutex-guarded ScFieldEditEngine is used that
+ is not capable of resolving document specific fields; avoid.
+ */
+ SC_DLLPUBLIC static OUString GetString( const EditTextObject& rEditText, const ScDocument* pDoc );
static EditTextObject* CreateURLObjectFromURL(
ScDocument& rDoc, const OUString& rURL, const OUString& rText );
diff --git a/sc/inc/global.hxx b/sc/inc/global.hxx
index f823232a488a..476f0ba4bc2e 100644
--- a/sc/inc/global.hxx
+++ b/sc/inc/global.hxx
@@ -488,6 +488,7 @@ class CalendarWrapper;
class CollatorWrapper;
class IntlWrapper;
class OutputDevice;
+class ScFieldEditEngine;
namespace com { namespace sun { namespace star {
namespace lang {
@@ -537,6 +538,8 @@ class ScGlobal
static IntlWrapper* pScIntlWrapper;
static ::com::sun::star::lang::Locale* pLocale;
+ static ScFieldEditEngine* pFieldEditEngine;
+
public:
static SvtSysLocale* pSysLocale;
// for faster access a pointer to the single instance provided by SvtSysLocale
@@ -696,6 +699,10 @@ SC_DLLPUBLIC static const sal_Unicode* FindUnquoted( const sal_Unicode* pStri
/** Obtain the ordinal suffix for a number according to the system locale */
static String GetOrdinalSuffix( sal_Int32 nNumber);
+
+ /** A static instance of ScFieldEditEngine not capable of resolving
+ document specific fields, to be used only by ScEditUtil::GetString(). */
+ static ScFieldEditEngine& GetStaticFieldEditEngine();
};
#endif
diff --git a/sc/qa/unit/subsequent_filters-test.cxx b/sc/qa/unit/subsequent_filters-test.cxx
index 219b2caf17b6..19147b7a788d 100644
--- a/sc/qa/unit/subsequent_filters-test.cxx
+++ b/sc/qa/unit/subsequent_filters-test.cxx
@@ -40,6 +40,7 @@
#include "docfunc.hxx"
#include "markdata.hxx"
#include "colorscale.hxx"
+#include "editutil.hxx"
#include <com/sun/star/drawing/XDrawPageSupplier.hpp>
#include <com/sun/star/drawing/XControlShape.hpp>
@@ -1610,6 +1611,8 @@ void ScFiltersTest::testRichTextContentODS()
aParaText = pEditText->GetText(0);
CPPUNIT_ASSERT_MESSAGE("Unexpected text.", aParaText.indexOf("Sheet name is ") == 0);
CPPUNIT_ASSERT_MESSAGE("Sheet name field item not found.", pEditText->HasField(text::textfield::Type::TABLE));
+ CPPUNIT_ASSERT_EQUAL(OUString("Sheet name is Test."), ScEditUtil::GetString(*pEditText, pDoc));
+ CPPUNIT_ASSERT_EQUAL(OUString("Sheet name is ?."), ScEditUtil::GetString(*pEditText, NULL));
// Cell with URL field item.
aPos.IncRow();
@@ -1620,6 +1623,8 @@ void ScFiltersTest::testRichTextContentODS()
aParaText = pEditText->GetText(0);
CPPUNIT_ASSERT_MESSAGE("Unexpected text.", aParaText.indexOf("URL: ") == 0);
CPPUNIT_ASSERT_MESSAGE("URL field item not found.", pEditText->HasField(text::textfield::Type::URL));
+ CPPUNIT_ASSERT_EQUAL(OUString("URL: http://libreoffice.org"), ScEditUtil::GetString(*pEditText, pDoc));
+ CPPUNIT_ASSERT_EQUAL(OUString("URL: http://libreoffice.org"), ScEditUtil::GetString(*pEditText, NULL));
// Cell with Date field item.
aPos.IncRow();
@@ -1630,6 +1635,8 @@ void ScFiltersTest::testRichTextContentODS()
aParaText = pEditText->GetText(0);
CPPUNIT_ASSERT_MESSAGE("Unexpected text.", aParaText.indexOf("Date: ") == 0);
CPPUNIT_ASSERT_MESSAGE("Date field item not found.", pEditText->HasField(text::textfield::Type::DATE));
+ CPPUNIT_ASSERT_MESSAGE("Date field not resolved with pDoc.", ScEditUtil::GetString(*pEditText, pDoc).indexOf("/20") > 0);
+ CPPUNIT_ASSERT_MESSAGE("Date field not resolved with NULL.", ScEditUtil::GetString(*pEditText, NULL).indexOf("/20") > 0);
// Cell with DocInfo title field item.
aPos.IncRow();
@@ -1640,6 +1647,8 @@ void ScFiltersTest::testRichTextContentODS()
aParaText = pEditText->GetText(0);
CPPUNIT_ASSERT_MESSAGE("Unexpected text.", aParaText.indexOf("Title: ") == 0);
CPPUNIT_ASSERT_MESSAGE("DocInfo title field item not found.", pEditText->HasField(text::textfield::Type::DOCINFO_TITLE));
+ CPPUNIT_ASSERT_EQUAL(OUString("Title: Test Document"), ScEditUtil::GetString(*pEditText, pDoc));
+ CPPUNIT_ASSERT_EQUAL(OUString("Title: ?"), ScEditUtil::GetString(*pEditText, NULL));
// Cell with sentence with both bold and italic sequences.
aPos.IncRow();
diff --git a/sc/source/core/data/cellvalue.cxx b/sc/source/core/data/cellvalue.cxx
index 75362ba7bfc2..78683e65de26 100644
--- a/sc/source/core/data/cellvalue.cxx
+++ b/sc/source/core/data/cellvalue.cxx
@@ -476,7 +476,7 @@ double ScRefCellValue::getValue()
return 0.0;
}
-OUString ScRefCellValue::getString()
+OUString ScRefCellValue::getString( const ScDocument* pDoc )
{
switch (meType)
{
@@ -484,7 +484,7 @@ OUString ScRefCellValue::getString()
return *mpString;
case CELLTYPE_EDIT:
if (mpEditText)
- return ScEditUtil::GetString(*mpEditText);
+ return ScEditUtil::GetString(*mpEditText, pDoc);
break;
case CELLTYPE_FORMULA:
return mpFormula->GetString();
diff --git a/sc/source/core/data/column2.cxx b/sc/source/core/data/column2.cxx
index efb3a6a9a045..31605b6c3ebc 100644
--- a/sc/source/core/data/column2.cxx
+++ b/sc/source/core/data/column2.cxx
@@ -248,7 +248,7 @@ long ScColumn::GetNeededSize(
Color* pColor;
OUString aValStr;
ScCellFormat::GetString(
- aCell, nFormat, aValStr, &pColor, *pFormatter, true, rOptions.bFormula, ftCheck);
+ aCell, nFormat, aValStr, &pColor, *pFormatter, pDocument, true, rOptions.bFormula, ftCheck);
if (!aValStr.isEmpty())
{
@@ -410,7 +410,7 @@ long ScColumn::GetNeededSize(
Color* pColor;
OUString aString;
ScCellFormat::GetString(
- aCell, nFormat, aString, &pColor, *pFormatter, true,
+ aCell, nFormat, aString, &pColor, *pFormatter, pDocument, true,
rOptions.bFormula, ftCheck);
if (!aString.isEmpty())
@@ -569,7 +569,7 @@ sal_uInt16 ScColumn::GetOptimalColWidth(
{
ScRefCellValue aCell = GetCellValue(pParam->mnMaxTextRow);
ScCellFormat::GetString(
- aCell, nFormat, aLongStr, &pColor, *pFormatter, true, false, ftCheck);
+ aCell, nFormat, aLongStr, &pColor, *pFormatter, pDocument, true, false, ftCheck);
}
else
{
@@ -584,7 +584,7 @@ sal_uInt16 ScColumn::GetOptimalColWidth(
aCell.assign(*maItems[nIndex].pCell);
OUString aValStr;
ScCellFormat::GetString(
- aCell, nFormat, aValStr, &pColor, *pFormatter, true, false, ftCheck);
+ aCell, nFormat, aValStr, &pColor, *pFormatter, pDocument, true, false, ftCheck);
if (aValStr.getLength() > nLongLen)
{
diff --git a/sc/source/core/data/column3.cxx b/sc/source/core/data/column3.cxx
index f36dbd0e7c43..4c688ef4e419 100644
--- a/sc/source/core/data/column3.cxx
+++ b/sc/source/core/data/column3.cxx
@@ -306,7 +306,7 @@ void ScColumn::UpdateScriptType( sc::CellTextAttr& rAttr, SCROW nRow )
OUString aStr;
Color* pColor;
sal_uLong nFormat = pPattern->GetNumberFormat(pFormatter, pCondSet);
- ScCellFormat::GetString(aCell, nFormat, aStr, &pColor, *pFormatter);
+ ScCellFormat::GetString(aCell, nFormat, aStr, &pColor, *pFormatter, pDocument);
// Store the real script type to the array.
rAttr.mnScriptType = pDocument->GetStringScriptType(aStr);
@@ -1491,7 +1491,7 @@ void ScColumn::GetFilterEntries(SCROW nStartRow, SCROW nEndRow, std::vector<ScTy
aCell.assign(*maItems[nIndex].pCell);
sal_uLong nFormat = GetNumberFormat( nRow );
- ScCellFormat::GetInputString(aCell, nFormat, aString, *pFormatter);
+ ScCellFormat::GetInputString(aCell, nFormat, aString, *pFormatter, pDocument);
if ( pDocument->HasStringData( nCol, nRow, nTab ) )
{
@@ -1711,7 +1711,7 @@ void ScColumn::GetString( SCROW nRow, OUString& rString ) const
aCell.mpFormula->MaybeInterpret();
sal_uLong nFormat = GetNumberFormat( nRow );
- ScCellFormat::GetString(aCell, nFormat, rString, &pColor, *(pDocument->GetFormatTable()));
+ ScCellFormat::GetString(aCell, nFormat, rString, &pColor, *(pDocument->GetFormatTable()), pDocument);
}
else
rString = EMPTY_OUSTRING;
@@ -1751,7 +1751,7 @@ void ScColumn::GetInputString( SCROW nRow, OUString& rString ) const
ScRefCellValue aCell;
aCell.assign(*maItems[nIndex].pCell);
sal_uLong nFormat = GetNumberFormat( nRow );
- ScCellFormat::GetInputString(aCell, nFormat, rString, *(pDocument->GetFormatTable()));
+ ScCellFormat::GetInputString(aCell, nFormat, rString, *(pDocument->GetFormatTable()), pDocument);
}
else
rString = OUString();
@@ -1929,7 +1929,7 @@ sal_Int32 ScColumn::GetMaxStringLen( SCROW nRowStart, SCROW nRowEnd, CharSet eCh
Color* pColor;
sal_uLong nFormat = (sal_uLong) ((SfxUInt32Item*) GetAttr(
nRow, ATTR_VALUE_FORMAT ))->GetValue();
- ScCellFormat::GetString(aCell, nFormat, aString, &pColor, *pNumFmt);
+ ScCellFormat::GetString(aCell, nFormat, aString, &pColor, *pNumFmt, pDocument);
sal_Int32 nLen;
if (bIsOctetTextEncoding)
{
@@ -1981,7 +1981,7 @@ xub_StrLen ScColumn::GetMaxNumberStringLen(
{
sal_uLong nFormat = (sal_uLong) ((SfxUInt32Item*) GetAttr(
nRow, ATTR_VALUE_FORMAT ))->GetValue();
- ScCellFormat::GetInputString(aCell, nFormat, aString, *pNumFmt);
+ ScCellFormat::GetInputString(aCell, nFormat, aString, *pNumFmt, pDocument);
xub_StrLen nLen = aString.getLength();
if ( nLen )
{
diff --git a/sc/source/core/data/conditio.cxx b/sc/source/core/data/conditio.cxx
index 88028cf317f3..ab1adc06d1eb 100644
--- a/sc/source/core/data/conditio.cxx
+++ b/sc/source/core/data/conditio.cxx
@@ -734,7 +734,8 @@ void ScConditionEntry::Interpret( const ScAddress& rPos )
bFirstRun = false;
}
-static bool lcl_GetCellContent( ScRefCellValue& rCell, bool bIsStr1, double& rArg, OUString& rArgStr )
+static bool lcl_GetCellContent( ScRefCellValue& rCell, bool bIsStr1, double& rArg, OUString& rArgStr,
+ const ScDocument* pDoc )
{
if (rCell.isEmpty())
@@ -762,7 +763,7 @@ static bool lcl_GetCellContent( ScRefCellValue& rCell, bool bIsStr1, double& rAr
if (rCell.meType == CELLTYPE_STRING)
rArgStr = *rCell.mpString;
else if (rCell.mpEditText)
- rArgStr = ScEditUtil::GetString(*rCell.mpEditText);
+ rArgStr = ScEditUtil::GetString(*rCell.mpEditText, pDoc);
break;
default:
;
@@ -806,7 +807,7 @@ void ScConditionEntry::FillCache() const
double nVal = 0.0;
OUString aStr;
- if (!lcl_GetCellContent(aCell, false, nVal, aStr))
+ if (!lcl_GetCellContent(aCell, false, nVal, aStr, mpDoc))
{
std::pair<ScConditionEntryCache::StringCacheType::iterator, bool> aResult =
mpCache->maStrings.insert(
@@ -1270,7 +1271,7 @@ bool ScConditionEntry::IsCellValid( ScRefCellValue& rCell, const ScAddress& rPos
double nArg = 0.0;
OUString aArgStr;
- bool bVal = lcl_GetCellContent( rCell, bIsStr1, nArg, aArgStr );
+ bool bVal = lcl_GetCellContent( rCell, bIsStr1, nArg, aArgStr, mpDoc );
if (bVal)
return IsValid( nArg, rPos );
else
diff --git a/sc/source/core/data/dociter.cxx b/sc/source/core/data/dociter.cxx
index 8f6d1c2eaa2f..f8ba16f5f433 100644
--- a/sc/source/core/data/dociter.cxx
+++ b/sc/source/core/data/dociter.cxx
@@ -1040,7 +1040,7 @@ CellType ScCellIterator::getType() const
OUString ScCellIterator::getString()
{
- return maCurCell.getString();
+ return maCurCell.getString(mpDoc);
}
const EditTextObject* ScCellIterator::getEditText() const
@@ -1478,7 +1478,7 @@ ScBaseCell* ScQueryCellIterator::BinarySearch()
OUString aCellStr;
sal_uLong nFormat = pCol->GetNumberFormat( pCol->maItems[nLo].nRow);
aCell.assign(*pCol->maItems[nLo].pCell);
- ScCellFormat::GetInputString(aCell, nFormat, aCellStr, rFormatter);
+ ScCellFormat::GetInputString(aCell, nFormat, aCellStr, rFormatter, pDoc);
sal_Int32 nTmp = pCollator->compareString(aCellStr, rEntry.GetQueryItem().maString);
if ((rEntry.eOp == SC_LESS_EQUAL && nTmp > 0) ||
(rEntry.eOp == SC_GREATER_EQUAL && nTmp < 0) ||
@@ -1508,7 +1508,7 @@ ScBaseCell* ScQueryCellIterator::BinarySearch()
{
sal_uLong nFormat = pCol->GetNumberFormat( pCol->maItems[nLastInRange].nRow);
OUString aStr;
- ScCellFormat::GetInputString(aCell, nFormat, aStr, rFormatter);
+ ScCellFormat::GetInputString(aCell, nFormat, aStr, rFormatter, pDoc);
aLastInRangeString = aStr;
}
else
@@ -1609,7 +1609,7 @@ ScBaseCell* ScQueryCellIterator::BinarySearch()
OUString aCellStr;
sal_uLong nFormat = pCol->GetNumberFormat( pCol->maItems[i].nRow);
aCell.assign(*pCol->maItems[i].pCell);
- ScCellFormat::GetInputString(aCell, nFormat, aCellStr, rFormatter);
+ ScCellFormat::GetInputString(aCell, nFormat, aCellStr, rFormatter, pDoc);
nRes = pCollator->compareString(aCellStr, rEntry.GetQueryItem().maString);
if (nRes < 0 && bLessEqual)
diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx
index e631307dcf3c..4933e5d59166 100644
--- a/sc/source/core/data/document.cxx
+++ b/sc/source/core/data/document.cxx
@@ -3194,7 +3194,7 @@ sal_uInt16 ScDocument::GetStringForFormula( const ScAddress& rPos, OUString& rSt
{
case CELLTYPE_STRING:
case CELLTYPE_EDIT:
- aStr = aCell.getString();
+ aStr = aCell.getString(this);
break;
case CELLTYPE_FORMULA:
{
diff --git a/sc/source/core/data/global.cxx b/sc/source/core/data/global.cxx
index 95084a94f71d..8c05b6aa4c6f 100644
--- a/sc/source/core/data/global.cxx
+++ b/sc/source/core/data/global.cxx
@@ -77,6 +77,7 @@
#include "scmod.hxx"
#include "appoptio.hxx"
#include "random.hxx"
+#include "editutil.hxx"
// -----------------------------------------------------------------------
@@ -117,6 +118,7 @@ ScFunctionMgr* ScGlobal::pStarCalcFunctionMgr = NULL;
ScUnitConverter* ScGlobal::pUnitConverter = NULL;
SvNumberFormatter* ScGlobal::pEnglishFormatter = NULL;
+ScFieldEditEngine* ScGlobal::pFieldEditEngine = NULL;
double ScGlobal::nScreenPPTX = 96.0;
double ScGlobal::nScreenPPTY = 96.0;
@@ -679,6 +681,7 @@ void ScGlobal::Clear()
DELETEZ(pStrClipDocName);
DELETEZ(pUnitConverter);
+ DELETEZ(pFieldEditEngine);
ScDocumentPool::DeleteVersionMaps();
@@ -1190,4 +1193,17 @@ IntlWrapper* ScGlobal::GetScIntlWrapper()
return pLocale;
}
+ScFieldEditEngine& ScGlobal::GetStaticFieldEditEngine()
+{
+ if (!pFieldEditEngine)
+ {
+ // Creating a ScFieldEditEngine with pDocument=NULL leads to document
+ // specific fields not being resolvable! See
+ // ScFieldEditEngine::CalcFieldValue(). pEnginePool=NULL lets
+ // EditEngine internally create and delete a default pool.
+ pFieldEditEngine = new ScFieldEditEngine( NULL, NULL);
+ }
+ return *pFieldEditEngine;
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/core/data/table3.cxx b/sc/source/core/data/table3.cxx
index d1ef841faaee..b61be80ce35b 100644
--- a/sc/source/core/data/table3.cxx
+++ b/sc/source/core/data/table3.cxx
@@ -1364,7 +1364,7 @@ public:
sal_uLong nFormat = mrTab.GetNumberFormat( static_cast<SCCOL>(rEntry.nField), nRow );
ScRefCellValue aCell;
aCell.assign(*pCell);
- ScCellFormat::GetInputString(aCell, nFormat, aCellStr, *mrDoc.GetFormatTable());
+ ScCellFormat::GetInputString(aCell, nFormat, aCellStr, *mrDoc.GetFormatTable(), &mrDoc);
}
}
else
diff --git a/sc/source/core/data/validat.cxx b/sc/source/core/data/validat.cxx
index 258e7e02b074..56902f818b32 100644
--- a/sc/source/core/data/validat.cxx
+++ b/sc/source/core/data/validat.cxx
@@ -492,7 +492,7 @@ bool ScValidationData::IsDataValid( ScRefCellValue& rCell, const ScAddress& rPos
break;
case CELLTYPE_EDIT:
if (rCell.mpEditText)
- aString = ScEditUtil::GetString(*rCell.mpEditText);
+ aString = ScEditUtil::GetString(*rCell.mpEditText, GetDocument());
bIsVal = false;
break;
case CELLTYPE_FORMULA:
diff --git a/sc/source/core/tool/cellform.cxx b/sc/source/core/tool/cellform.cxx
index a33405f9a05a..bc65f9199a39 100644
--- a/sc/source/core/tool/cellform.cxx
+++ b/sc/source/core/tool/cellform.cxx
@@ -34,14 +34,14 @@
const ScFormulaCell* pLastFormulaTreeTop = 0;
void ScCellFormat::GetString( ScRefCellValue& rCell, sal_uLong nFormat, OUString& rString,
- Color** ppColor, SvNumberFormatter& rFormatter,
+ Color** ppColor, SvNumberFormatter& rFormatter, const ScDocument* pDoc,
bool bNullVals, bool bFormula, ScForceTextFmt eForceTextFmt,
bool bUseStarFormat )
{
*ppColor = NULL;
if (&rFormatter==NULL)
{
- rString = OUString();
+ rString = EMPTY_OUSTRING;
return;
}
@@ -51,7 +51,7 @@ void ScCellFormat::GetString( ScRefCellValue& rCell, sal_uLong nFormat, OUString
rFormatter.GetOutputString(*rCell.mpString, nFormat, rString, ppColor, bUseStarFormat);
break;
case CELLTYPE_EDIT:
- rFormatter.GetOutputString(rCell.getString(), nFormat, rString, ppColor );
+ rFormatter.GetOutputString(rCell.getString(pDoc), nFormat, rString, ppColor );
break;
case CELLTYPE_VALUE:
{
@@ -223,7 +223,7 @@ OUString ScCellFormat::GetString(
}
void ScCellFormat::GetInputString(
- ScRefCellValue& rCell, sal_uLong nFormat, OUString& rString, SvNumberFormatter& rFormatter )
+ ScRefCellValue& rCell, sal_uLong nFormat, OUString& rString, SvNumberFormatter& rFormatter, const ScDocument* pDoc )
{
if (&rFormatter == NULL)
{
@@ -236,7 +236,7 @@ void ScCellFormat::GetInputString(
{
case CELLTYPE_STRING:
case CELLTYPE_EDIT:
- aString = rCell.getString();
+ aString = rCell.getString(pDoc);
break;
case CELLTYPE_VALUE:
rFormatter.GetInputLineString(rCell.mfValue, nFormat, aString );
diff --git a/sc/source/core/tool/chgtrack.cxx b/sc/source/core/tool/chgtrack.cxx
index 903d06bf1eca..5355df465f52 100644
--- a/sc/source/core/tool/chgtrack.cxx
+++ b/sc/source/core/tool/chgtrack.cxx
@@ -1501,15 +1501,15 @@ void ScChangeActionContent::SetOldValue( const OUString& rOld, ScDocument* pDoc
}
-void ScChangeActionContent::GetOldString( OUString& rStr ) const
+void ScChangeActionContent::GetOldString( OUString& rStr, const ScDocument* pDoc ) const
{
- GetValueString(rStr, maOldValue, maOldCell);
+ GetValueString(rStr, maOldValue, maOldCell, pDoc);
}
-void ScChangeActionContent::GetNewString( OUString& rStr ) const
+void ScChangeActionContent::GetNewString( OUString& rStr, const ScDocument* pDoc ) const
{
- GetValueString(rStr, maNewValue, maNewCell);
+ GetValueString(rStr, maNewValue, maNewCell, pDoc);
}
const ScCellValue& ScChangeActionContent::GetOldCell() const
@@ -1540,7 +1540,7 @@ void ScChangeActionContent::GetDescription(
nPos += aTmpStr.getLength();
}
- GetOldString( aTmpStr );
+ GetOldString( aTmpStr, pDoc );
if (aTmpStr.isEmpty())
aTmpStr = ScGlobal::GetRscString( STR_CHANGED_BLANK );
@@ -1551,7 +1551,7 @@ void ScChangeActionContent::GetDescription(
nPos += aTmpStr.getLength();
}
- GetNewString( aTmpStr );
+ GetNewString( aTmpStr, pDoc );
if (aTmpStr.isEmpty())
aTmpStr = ScGlobal::GetRscString( STR_CHANGED_BLANK );
@@ -1715,7 +1715,7 @@ void ScChangeActionContent::GetStringOfCell(
break;
case CELLTYPE_EDIT:
if (rCell.mpEditText)
- rStr = ScEditUtil::GetString(*rCell.mpEditText);
+ rStr = ScEditUtil::GetString(*rCell.mpEditText, pDoc);
break;
case CELLTYPE_FORMULA:
rCell.mpFormula->GetFormula(rStr);
@@ -1850,7 +1850,7 @@ void ScChangeActionContent::SetCell( OUString& rStr, ScCellValue& rCell, sal_uLo
void ScChangeActionContent::GetValueString(
- OUString& rStr, const OUString& rValue, const ScCellValue& rCell ) const
+ OUString& rStr, const OUString& rValue, const ScCellValue& rCell, const ScDocument* pDoc ) const
{
if (!rValue.isEmpty())
{
@@ -1865,7 +1865,7 @@ void ScChangeActionContent::GetValueString(
break;
case CELLTYPE_EDIT :
if (rCell.mpEditText)
- rStr = ScEditUtil::GetString(*rCell.mpEditText);
+ rStr = ScEditUtil::GetString(*rCell.mpEditText, pDoc);
break;
case CELLTYPE_VALUE : // ist immer in rValue
rStr = rValue;
@@ -4578,7 +4578,7 @@ ScChangeTrack* ScChangeTrack::Clone( ScDocument* pDocument ) const
ScCellValue aClonedNewCell;
aClonedNewCell.assign(rNewCell, *pDocument);
OUString aNewValue;
- pContent->GetNewString( aNewValue );
+ pContent->GetNewString( aNewValue, pDocument );
pClonedTrack->nGeneratedMin = pGenerated->GetActionNumber() + 1;
pClonedTrack->AddLoadedGenerated(aClonedNewCell, pGenerated->GetBigRange(), aNewValue);
}
@@ -4663,7 +4663,7 @@ ScChangeTrack* ScChangeTrack::Clone( ScDocument* pDocument ) const
ScCellValue aClonedOldCell;
aClonedOldCell.assign(rOldCell, *pDocument);
OUString aOldValue;
- pContent->GetOldString( aOldValue );
+ pContent->GetOldString( aOldValue, pDocument );
ScChangeActionContent* pClonedContent = new ScChangeActionContent(
pAction->GetActionNumber(),
diff --git a/sc/source/core/tool/editutil.cxx b/sc/source/core/tool/editutil.cxx
index a004d8650477..dc6f6a137a1e 100644
--- a/sc/source/core/tool/editutil.cxx
+++ b/sc/source/core/tool/editutil.cxx
@@ -68,40 +68,49 @@ String ScEditUtil::ModifyDelimiters( const String& rOld )
return aRet;
}
-static String lcl_GetDelimitedString( const EditEngine& rEngine, const sal_Char c )
+static OUString lcl_GetDelimitedString( const EditEngine& rEngine, const sal_Char c )
{
- String aRet;
sal_Int32 nParCount = rEngine.GetParagraphCount();
+ OUStringBuffer aRet( nParCount * 80 );
for (sal_Int32 nPar=0; nPar<nParCount; nPar++)
{
if (nPar > 0)
- aRet += c;
- aRet += rEngine.GetText( nPar );
+ aRet.append(c);
+ aRet.append( rEngine.GetText( nPar ));
}
- return aRet;
+ return aRet.makeStringAndClear();
}
-String ScEditUtil::GetSpaceDelimitedString( const EditEngine& rEngine )
+OUString ScEditUtil::GetSpaceDelimitedString( const EditEngine& rEngine )
{
return lcl_GetDelimitedString(rEngine, ' ');
}
-String ScEditUtil::GetMultilineString( const EditEngine& rEngine )
+OUString ScEditUtil::GetMultilineString( const EditEngine& rEngine )
{
return lcl_GetDelimitedString(rEngine, '\n');
}
-OUString ScEditUtil::GetString( const EditTextObject& rEditText )
+OUString ScEditUtil::GetString( const EditTextObject& rEditText, const ScDocument* pDoc )
{
- OUStringBuffer aRet;
- sal_Int32 n = rEditText.GetParagraphCount();
- for (sal_Int32 i = 0; i < n; ++i)
+ // ScFieldEditEngine is needed to resolve field contents.
+ if (pDoc)
{
- if (i > 0)
- aRet.append('\n');
- aRet.append(rEditText.GetText(i));
+ /* TODO: make ScDocument::GetEditEngine() const? Most likely it's only
+ * not const because of the pointer assignment, make that mutable, and
+ * then remove the ugly const_cast here. */
+ EditEngine& rEE = const_cast<ScDocument*>(pDoc)->GetEditEngine();
+ rEE.SetText( rEditText);
+ return GetMultilineString( rEE);
+ }
+ else
+ {
+ static osl::Mutex aMutex;
+ osl::MutexGuard aGuard( aMutex);
+ EditEngine& rEE = ScGlobal::GetStaticFieldEditEngine();
+ rEE.SetText( rEditText);
+ return GetMultilineString( rEE);
}
- return aRet.makeStringAndClear();
}
EditTextObject* ScEditUtil::CreateURLObjectFromURL( ScDocument& rDoc, const OUString& rURL, const OUString& rText )
@@ -791,6 +800,12 @@ OUString ScFieldEditEngine::CalcFieldValue( const SvxFieldItem& rField,
const SvxExtTimeField* pField = static_cast<const SvxExtTimeField*>(pFieldData);
if (mpDoc)
aRet = pField->GetFormatted(*mpDoc->GetFormatTable(), ScGlobal::eLnge);
+ else
+ {
+ /* TODO: quite expensive, we could have a global formatter? */
+ SvNumberFormatter aFormatter( comphelper::getProcessComponentContext(), ScGlobal::eLnge );
+ aRet = pField->GetFormatted( aFormatter, ScGlobal::eLnge);
+ }
}
break;
case text::textfield::Type::DATE:
@@ -801,10 +816,18 @@ OUString ScFieldEditEngine::CalcFieldValue( const SvxFieldItem& rField,
break;
case text::textfield::Type::DOCINFO_TITLE:
{
- SfxObjectShell* pDocShell = mpDoc->GetDocumentShell();
- aRet = pDocShell->getDocProperties()->getTitle();
+ if (mpDoc)
+ {
+ SfxObjectShell* pDocShell = mpDoc->GetDocumentShell();
+ if (pDocShell)
+ {
+ aRet = pDocShell->getDocProperties()->getTitle();
+ if (aRet.isEmpty())
+ aRet = pDocShell->GetTitle();
+ }
+ }
if (aRet.isEmpty())
- aRet = pDocShell->GetTitle();
+ aRet = "?";
}
break;
case text::textfield::Type::TABLE:
@@ -812,7 +835,7 @@ OUString ScFieldEditEngine::CalcFieldValue( const SvxFieldItem& rField,
const SvxTableField* pField = static_cast<const SvxTableField*>(pFieldData);
SCTAB nTab = pField->GetTab();
OUString aName;
- if (mpDoc->GetName(nTab, aName))
+ if (mpDoc && mpDoc->GetName(nTab, aName))
aRet = aName;
else
aRet = "?";
diff --git a/sc/source/core/tool/interpr4.cxx b/sc/source/core/tool/interpr4.cxx
index 5662baf5f2ac..4c6a8db32c87 100644
--- a/sc/source/core/tool/interpr4.cxx
+++ b/sc/source/core/tool/interpr4.cxx
@@ -491,7 +491,7 @@ double ScInterpreter::GetCellValueOrZero( const ScAddress& rPos, ScRefCellValue&
{
// SUM(A1:A2) differs from A1+A2. No good. But people insist on
// it ... #i5658#
- OUString aStr = rCell.getString();
+ OUString aStr = rCell.getString(pDok);
fValue = ConvertStringToValue( aStr );
}
break;
@@ -517,7 +517,7 @@ void ScInterpreter::GetCellString( OUString& rStr, ScRefCellValue& rCell )
{
case CELLTYPE_STRING:
case CELLTYPE_EDIT:
- rStr = rCell.getString();
+ rStr = rCell.getString(pDok);
break;
case CELLTYPE_FORMULA:
{
@@ -683,7 +683,7 @@ bool ScInterpreter::CreateStringArr(SCCOL nCol1, SCROW nRow1, SCTAB nTab1,
{
case CELLTYPE_STRING:
case CELLTYPE_EDIT:
- aStr = aCell.getString();
+ aStr = aCell.getString(pDok);
break;
case CELLTYPE_FORMULA:
if (!aCell.mpFormula->IsValue())
@@ -788,7 +788,7 @@ bool ScInterpreter::CreateCellArr(SCCOL nCol1, SCROW nRow1, SCTAB nTab1,
{
case CELLTYPE_STRING :
case CELLTYPE_EDIT :
- aStr = aCell.getString();
+ aStr = aCell.getString(pDok);
nType = 1;
break;
case CELLTYPE_VALUE :
@@ -3459,7 +3459,7 @@ bool ScInterpreter::SetSbxVariable( SbxVariable* pVar, const ScAddress& rPos )
break;
case CELLTYPE_STRING :
case CELLTYPE_EDIT :
- pVar->PutString(aCell.getString());
+ pVar->PutString(aCell.getString(pDok));
break;
case CELLTYPE_FORMULA :
nErr = aCell.mpFormula->GetErrCode();
diff --git a/sc/source/core/tool/rangeseq.cxx b/sc/source/core/tool/rangeseq.cxx
index a892eb408373..2339ff567f53 100644
--- a/sc/source/core/tool/rangeseq.cxx
+++ b/sc/source/core/tool/rangeseq.cxx
@@ -282,7 +282,7 @@ sal_Bool ScRangeToSequence::FillMixedArray( uno::Any& rAny, ScDocument* pDoc, co
else if (aCell.hasNumeric())
rElement <<= aCell.getValue();
else
- rElement <<= aCell.getString();
+ rElement <<= aCell.getString(pDoc);
}
pRowAry[nRow] = aColSeq;
}
diff --git a/sc/source/filter/dif/difexp.cxx b/sc/source/filter/dif/difexp.cxx
index e4b5a77dc123..91d6f9f70414 100644
--- a/sc/source/filter/dif/difexp.cxx
+++ b/sc/source/filter/dif/difexp.cxx
@@ -182,7 +182,7 @@ FltError ScFormatFilterPluginImpl::ScExportDif( SvStream& rOut, ScDocument* pDoc
break;
case CELLTYPE_EDIT:
case CELLTYPE_STRING:
- aString = aCell.getString();
+ aString = aCell.getString(pDoc);
bWriteStringData = true;
break;
case CELLTYPE_FORMULA:
diff --git a/sc/source/filter/html/htmlexp.cxx b/sc/source/filter/html/htmlexp.cxx
index 603dfee65738..5cbf833ca3b3 100644
--- a/sc/source/filter/html/htmlexp.cxx
+++ b/sc/source/filter/html/htmlexp.cxx
@@ -1141,7 +1141,7 @@ void ScHTMLExport::WriteCell( SCCOL nCol, SCROW nRow, SCTAB nTab )
break;
//! else: fallthru
default:
- ScCellFormat::GetString(aCell, nFormat, aStrOut, &pColor, *pFormatter);
+ ScCellFormat::GetString(aCell, nFormat, aStrOut, &pColor, *pFormatter, pDoc);
}
if ( !bFieldText )
diff --git a/sc/source/filter/xcl97/XclExpChangeTrack.cxx b/sc/source/filter/xcl97/XclExpChangeTrack.cxx
index 5e37df0c674b..e6a05fb90938 100644
--- a/sc/source/filter/xcl97/XclExpChangeTrack.cxx
+++ b/sc/source/filter/xcl97/XclExpChangeTrack.cxx
@@ -854,7 +854,7 @@ void XclExpChTrCellContent::GetCellData(
XclExpHyperlinkHelper aLinkHelper( rRoot, aPosition );
if (rScCell.mpEditText)
{
- sCellStr = ScEditUtil::GetString(*rScCell.mpEditText);
+ sCellStr = ScEditUtil::GetString(*rScCell.mpEditText, &GetDoc());
rpData->mpFormattedString = XclExpStringHelper::CreateCellString(
rRoot, *rScCell.mpEditText, NULL, aLinkHelper);
}
diff --git a/sc/source/filter/xml/XMLChangeTrackingExportHelper.cxx b/sc/source/filter/xml/XMLChangeTrackingExportHelper.cxx
index d6b60eb60231..551a2b2f440b 100644
--- a/sc/source/filter/xml/XMLChangeTrackingExportHelper.cxx
+++ b/sc/source/filter/xml/XMLChangeTrackingExportHelper.cxx
@@ -153,7 +153,7 @@ void ScChangeTrackingExportHelper::WriteGenerated(const ScChangeAction* pGenerat
SvXMLElementExport aElemPrev(rExport, XML_NAMESPACE_TABLE, XML_CELL_CONTENT_DELETION, true, true);
WriteBigRange(pGeneratedAction->GetBigRange(), XML_CELL_ADDRESS);
OUString sValue;
- static_cast<const ScChangeActionContent*>(pGeneratedAction)->GetNewString(sValue);
+ static_cast<const ScChangeActionContent*>(pGeneratedAction)->GetNewString(sValue, rExport.GetDocument());
WriteCell(static_cast<const ScChangeActionContent*>(pGeneratedAction)->GetNewCell(), sValue);
}
@@ -172,7 +172,7 @@ void ScChangeTrackingExportHelper::WriteDeleted(const ScChangeAction* pDeletedAc
if (static_cast<const ScChangeActionContent*>(pDeletedAction)->IsTopContent() && pDeletedAction->IsDeletedIn())
{
OUString sValue;
- pContentAction->GetNewString(sValue);
+ pContentAction->GetNewString(sValue, rExport.GetDocument());
WriteCell(pContentAction->GetNewCell(), sValue);
}
}
@@ -307,7 +307,7 @@ void ScChangeTrackingExportHelper::WriteEditCell(const ScCellValue& rCell)
OUString sString;
if (rCell.mpEditText)
- sString = ScEditUtil::GetString(*rCell.mpEditText);
+ sString = ScEditUtil::GetString(*rCell.mpEditText, rExport.GetDocument());
rExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_VALUE_TYPE, XML_STRING);
SvXMLElementExport aElemC(rExport, XML_NAMESPACE_TABLE, XML_CHANGE_TRACK_TABLE_CELL, true, true);
@@ -424,7 +424,7 @@ void ScChangeTrackingExportHelper::WriteContentChange(ScChangeAction* pAction)
rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_ID, GetChangeID(pPrevAction->GetActionNumber()));
SvXMLElementExport aElemPrev(rExport, XML_NAMESPACE_TABLE, XML_PREVIOUS, true, true);
OUString sValue;
- static_cast<ScChangeActionContent*>(pAction)->GetOldString(sValue);
+ static_cast<ScChangeActionContent*>(pAction)->GetOldString(sValue, rExport.GetDocument());
WriteCell(static_cast<ScChangeActionContent*>(pAction)->GetOldCell(), sValue);
}
}
diff --git a/sc/source/ui/docshell/docsh.cxx b/sc/source/ui/docshell/docsh.cxx
index d7003c956cdd..f33c16c081ce 100644
--- a/sc/source/ui/docshell/docsh.cxx
+++ b/sc/source/ui/docshell/docsh.cxx
@@ -1944,7 +1944,7 @@ void ScDocShell::AsciiSave( SvStream& rStream, const ScImportOptions& rAsciiOpt
}
else
{
- ScCellFormat::GetInputString(*pCell, nFormat, aString, rFormatter);
+ ScCellFormat::GetInputString(*pCell, nFormat, aString, rFormatter, &aDocument);
bString = false;
}
}
@@ -1994,7 +1994,7 @@ void ScDocShell::AsciiSave( SvStream& rStream, const ScImportOptions& rAsciiOpt
}
else
{
- ScCellFormat::GetInputString(*pCell, nFormat, aString, rFormatter);
+ ScCellFormat::GetInputString(*pCell, nFormat, aString, rFormatter, &aDocument);
bString = false;
}
}
diff --git a/sc/source/ui/docshell/docsh3.cxx b/sc/source/ui/docshell/docsh3.cxx
index afa49ba356b0..c07913f882fe 100644
--- a/sc/source/ui/docshell/docsh3.cxx
+++ b/sc/source/ui/docshell/docsh3.cxx
@@ -940,7 +940,7 @@ void ScDocShell::MergeDocument( ScDocument& rOtherDoc, bool bShared, bool bCheck
#if OSL_DEBUG_LEVEL > 0
OUString aValue;
if ( eSourceType == SC_CAT_CONTENT )
- ((const ScChangeActionContent*)pSourceAction)->GetNewString( aValue );
+ ((const ScChangeActionContent*)pSourceAction)->GetNewString( aValue, &aDocument );
OStringBuffer aError(OUStringToOString(aValue,
osl_getThreadTextEncoding()));
aError.append(RTL_CONSTASCII_STRINGPARAM(" weggelassen"));
@@ -1005,7 +1005,7 @@ void ScDocShell::MergeDocument( ScDocument& rOtherDoc, bool bShared, bool bCheck
OSL_ENSURE( aSourceRange.aStart == aSourceRange.aEnd, "huch?" );
ScAddress aPos = aSourceRange.aStart;
OUString aValue;
- ((const ScChangeActionContent*)pSourceAction)->GetNewString( aValue );
+ ((const ScChangeActionContent*)pSourceAction)->GetNewString( aValue, &aDocument );
sal_uInt8 eMatrix = MM_NONE;
const ScCellValue& rCell = ((const ScChangeActionContent*)pSourceAction)->GetNewCell();
if (rCell.meType == CELLTYPE_FORMULA)
diff --git a/sc/source/ui/docshell/externalrefmgr.cxx b/sc/source/ui/docshell/externalrefmgr.cxx
index b6f847b15237..8b5b40d9eb25 100644
--- a/sc/source/ui/docshell/externalrefmgr.cxx
+++ b/sc/source/ui/docshell/externalrefmgr.cxx
@@ -1273,7 +1273,7 @@ static FormulaToken* convertToToken( ScRefCellValue& rCell )
{
case CELLTYPE_EDIT:
case CELLTYPE_STRING:
- return new formula::FormulaStringToken(rCell.getString());
+ return new formula::FormulaStringToken(rCell.getString(NULL));
case CELLTYPE_VALUE:
return new formula::FormulaDoubleToken(rCell.mfValue);
case CELLTYPE_FORMULA:
@@ -1363,7 +1363,7 @@ static ScTokenArray* convertToTokenArray(
{
case CELLTYPE_EDIT:
case CELLTYPE_STRING:
- xMat->PutString(aCell.getString(), nC, nR);
+ xMat->PutString(aCell.getString(NULL), nC, nR);
break;
case CELLTYPE_VALUE:
xMat->PutDouble(aCell.mfValue, nC, nR);
diff --git a/sc/source/ui/miscdlgs/acredlin.cxx b/sc/source/ui/miscdlgs/acredlin.cxx
index 45809091a11b..7c5f54b8a280 100644
--- a/sc/source/ui/miscdlgs/acredlin.cxx
+++ b/sc/source/ui/miscdlgs/acredlin.cxx
@@ -663,7 +663,7 @@ SvTreeListEntry* ScAcceptChgDlg::InsertChangeActionContent(const ScChangeActionC
if(nSpecial==RD_SPECIAL_CONTENT)
{
OUString aTmp;
- pScChangeAction->GetOldString(aTmp);
+ pScChangeAction->GetOldString(aTmp, pDoc);
a2String = aTmp;
if(a2String.Len()==0) a2String=aStrEmpty;
@@ -677,7 +677,7 @@ SvTreeListEntry* ScAcceptChgDlg::InsertChangeActionContent(const ScChangeActionC
else
{
OUString aTmp;
- pScChangeAction->GetNewString(aTmp);
+ pScChangeAction->GetNewString(aTmp, pDoc);
a2String = aTmp;
if(a2String.Len()==0)
{
diff --git a/sc/source/ui/unoobj/cellsuno.cxx b/sc/source/ui/unoobj/cellsuno.cxx
index a3f5bdbfdbc1..a9c700a7d843 100644
--- a/sc/source/ui/unoobj/cellsuno.cxx
+++ b/sc/source/ui/unoobj/cellsuno.cxx
@@ -1379,7 +1379,7 @@ static OUString lcl_GetInputString( ScDocument* pDoc, const ScAddress& rPos, sal
}
}
else
- ScCellFormat::GetInputString(aCell, nNumFmt, aVal, *pFormatter);
+ ScCellFormat::GetInputString(aCell, nNumFmt, aVal, *pFormatter, pDoc);
// ggf. ein ' davorhaengen wie in ScTabViewShell::UpdateInputHandler
if ( eType == CELLTYPE_STRING || eType == CELLTYPE_EDIT )
@@ -2313,7 +2313,7 @@ void ScCellRangesBase::SetOnePropertyValue( const SfxItemPropertySimpleEntry* pE
ScRefCellValue aCell;
aCell.assign(*pDoc, aAddr);
- OUString aStr = aCell.getString();
+ OUString aStr = aCell.getString(pDoc);
EditEngine aEngine( pDoc->GetEnginePool() );
aEngine.SetEditTextObjectPool(pDoc->GetEditPool());
diff --git a/sc/source/ui/view/output2.cxx b/sc/source/ui/view/output2.cxx
index 565f7ec67084..8c6439355ddb 100644
--- a/sc/source/ui/view/output2.cxx
+++ b/sc/source/ui/view/output2.cxx
@@ -501,6 +501,7 @@ bool ScDrawStringsVars::SetText( ScRefCellValue& rCell )
ScCellFormat::GetString( rCell,
nFormat, aOUString, &pColor,
*pOutput->mpDoc->GetFormatTable(),
+ pOutput->mpDoc,
pOutput->mbShowNullValues,
pOutput->mbShowFormulas,
ftCheck, true );
@@ -2287,6 +2288,7 @@ bool ScOutputData::DrawEditParam::readCellContent(
ScCellFormat::GetString( maCell,
nFormat,aString, &pColor,
*pDoc->GetFormatTable(),
+ pDoc,
bShowNullValues,
bShowFormulas,
ftCheck );
@@ -4933,6 +4935,7 @@ void ScOutputData::DrawRotated(sal_Bool bPixelToLogic)
ScCellFormat::GetString( aCell,
nFormat,aString, &pColor,
*mpDoc->GetFormatTable(),
+ mpDoc,
mbShowNullValues,
mbShowFormulas,
ftCheck );