diff options
author | Eike Rathke <erack@redhat.com> | 2016-10-20 00:58:06 +0200 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2016-10-26 22:52:42 +0000 |
commit | e2dc12fa1803d5e3d6a06b2533d04c1bc54c8113 (patch) | |
tree | f8fe98e7a3027cedfeb8058b13a5afa180aa0b16 /sc | |
parent | a369b0a056ba121b00328a1dc74cd48d8735b361 (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>
Diffstat (limited to 'sc')
-rw-r--r-- | sc/source/filter/excel/xilink.cxx | 12 |
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(); } } |