summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2016-10-20 00:58:06 +0200
committerEike Rathke <erack@redhat.com>2016-10-26 22:52:42 +0000
commite2dc12fa1803d5e3d6a06b2533d04c1bc54c8113 (patch)
treef8fe98e7a3027cedfeb8058b13a5afa180aa0b16
parenta369b0a056ba121b00328a1dc74cd48d8735b361 (diff)
Resolves: tdf#85553 intern SharedString of cached external references result
(cherry picked from commit 0d2797fdb06f504e7213b3859a53c363f4f56bc9) Conflicts: sc/source/filter/excel/xilink.cxx Change-Id: I13f19b5bd5f2897eb48af69742be885803cca066 Reviewed-on: https://gerrit.libreoffice.org/30068 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Eike Rathke <erack@redhat.com>
-rw-r--r--sc/source/filter/excel/xilink.cxx12
1 files changed, 7 insertions, 5 deletions
diff --git a/sc/source/filter/excel/xilink.cxx b/sc/source/filter/excel/xilink.cxx
index 467cc99a5208..f779a5f593d3 100644
--- a/sc/source/filter/excel/xilink.cxx
+++ b/sc/source/filter/excel/xilink.cxx
@@ -71,7 +71,8 @@ public:
/** Reads a CRN record (external referenced cell) at the specified address. */
void ReadCrn( XclImpStream& rStrm, const XclAddress& rXclPos );
- void LoadCachedValues(const ScExternalRefCache::TableTypeRef& pCacheTable);
+ void LoadCachedValues( const ScExternalRefCache::TableTypeRef& pCacheTable,
+ svl::SharedStringPool& rPool );
private:
typedef std::shared_ptr< XclImpCrn > XclImpCrnRef;
@@ -574,7 +575,8 @@ void XclImpSupbookTab::ReadCrn( XclImpStream& rStrm, const XclAddress& rXclPos )
maCrnList.push_back( crnRef );
}
-void XclImpSupbookTab::LoadCachedValues(const ScExternalRefCache::TableTypeRef& pCacheTable)
+void XclImpSupbookTab::LoadCachedValues( const ScExternalRefCache::TableTypeRef& pCacheTable,
+ svl::SharedStringPool& rPool )
{
if (maCrnList.empty())
return;
@@ -608,8 +610,8 @@ void XclImpSupbookTab::LoadCachedValues(const ScExternalRefCache::TableTypeRef&
break;
case EXC_CACHEDVAL_STRING:
{
- const OUString& rStr = pCrn->GetString();
- ScExternalRefCache::TokenRef pToken(new formula::FormulaStringToken(rStr));
+ svl::SharedString aSS( rPool.intern( pCrn->GetString()));
+ ScExternalRefCache::TokenRef pToken(new formula::FormulaStringToken( aSS));
pCacheTable->setCell(rAddr.mnCol, rAddr.mnRow, pToken, 0, false);
}
break;
@@ -753,7 +755,7 @@ void XclImpSupbook::LoadCachedValues()
{
const OUString& rTabName = (*itTab)->GetTabName();
ScExternalRefCache::TableTypeRef pCacheTable = pRefMgr->getCacheTable(nFileId, rTabName, true);
- (*itTab)->LoadCachedValues(pCacheTable);
+ (*itTab)->LoadCachedValues( pCacheTable, GetSharedStringPool());
pCacheTable->setWholeTableCached();
}
}