summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sc/source/core/tool/compiler.cxx3
-rw-r--r--sc/source/filter/excel/xecontent.cxx12
-rw-r--r--sc/source/filter/excel/xelink.cxx2
-rw-r--r--sc/source/filter/inc/xecontent.hxx5
-rw-r--r--sc/source/ui/unoobj/linkuno.cxx8
5 files changed, 18 insertions, 12 deletions
diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx
index 69b6fcc8a2af..40f1de7b7dde 100644
--- a/sc/source/core/tool/compiler.cxx
+++ b/sc/source/core/tool/compiler.cxx
@@ -4161,8 +4161,7 @@ void ScCompiler::CreateStringFromExternal(OUStringBuffer& rBuffer, FormulaToken*
{
vector<OUString> aTabNames;
pRefMgr->getAllCachedTableNames(nFileId, aTabNames);
- if (aTabNames.empty())
- return;
+ assert(!aTabNames.empty()); // something is seriously wrong, but continue
pConv->makeExternalRefStr(
rBuffer, GetPos(), nFileId, *pFileName, aTabNames, t->GetString().getString(),
diff --git a/sc/source/filter/excel/xecontent.cxx b/sc/source/filter/excel/xecontent.cxx
index 521d1a95f81e..47de3806fe80 100644
--- a/sc/source/filter/excel/xecontent.cxx
+++ b/sc/source/filter/excel/xecontent.cxx
@@ -353,7 +353,9 @@ XclExpHyperlink::XclExpHyperlink( const XclExpRoot& rRoot, const SvxURLField& rU
{
sal_uInt16 nLevel;
bool bRel;
- OUString aFileName( BuildFileName( nLevel, bRel, rUrl, rRoot ) );
+ /* TODO: should we differentiate between BIFF and OOXML and write IURI
+ * encoded for OOXML? */
+ OUString aFileName( BuildFileName( nLevel, bRel, rUrl, rRoot, false ) );
if( eProtocol == INET_PROT_SMB )
{
@@ -444,9 +446,10 @@ XclExpHyperlink::~XclExpHyperlink()
}
OUString XclExpHyperlink::BuildFileName(
- sal_uInt16& rnLevel, bool& rbRel, const OUString& rUrl, const XclExpRoot& rRoot )
+ sal_uInt16& rnLevel, bool& rbRel, const OUString& rUrl, const XclExpRoot& rRoot, bool bEncoded )
{
- OUString aDosName( INetURLObject( rUrl ).getFSysPath( INetURLObject::FSYS_DOS ) );
+ INetURLObject aURLObject( rUrl );
+ OUString aDosName( bEncoded ? aURLObject.GetURLPath() : aURLObject.getFSysPath( INetURLObject::FSYS_DOS ) );
rnLevel = 0;
rbRel = rRoot.IsRelUrl();
@@ -455,7 +458,8 @@ OUString XclExpHyperlink::BuildFileName(
// try to convert to relative file name
OUString aTmpName( aDosName );
aDosName = INetURLObject::GetRelURL( rRoot.GetBasePath(), rUrl,
- INetURLObject::WAS_ENCODED, INetURLObject::DECODE_WITH_CHARSET );
+ INetURLObject::WAS_ENCODED,
+ (bEncoded ? INetURLObject::DECODE_TO_IURI : INetURLObject::DECODE_WITH_CHARSET));
if (aDosName.startsWith(INET_FILE_SCHEME))
{
diff --git a/sc/source/filter/excel/xelink.cxx b/sc/source/filter/excel/xelink.cxx
index fe43ee7d2fd8..3c8dffcd483f 100644
--- a/sc/source/filter/excel/xelink.cxx
+++ b/sc/source/filter/excel/xelink.cxx
@@ -1655,7 +1655,7 @@ void XclExpSupbook::SaveXml( XclExpXmlStream& rStrm )
bool bRel = true;
OUString sId = rStrm.addRelation( pExternalLink->getOutputStream(),
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLinkPath",
- XclExpHyperlink::BuildFileName( nLevel, bRel, maUrl, GetRoot()),
+ XclExpHyperlink::BuildFileName( nLevel, bRel, maUrl, GetRoot(), true),
true );
pExternalLink->startElement( XML_externalLink,
diff --git a/sc/source/filter/inc/xecontent.hxx b/sc/source/filter/inc/xecontent.hxx
index 214229397860..f2e8ee939dcf 100644
--- a/sc/source/filter/inc/xecontent.hxx
+++ b/sc/source/filter/inc/xecontent.hxx
@@ -113,10 +113,11 @@ public:
/** Builds file name from the passed file URL. Tries to convert to relative file name.
@param rnLevel (out-param) The parent directory level.
- @param rbRel (out-param) true = path is relative. */
+ @param rbRel (out-param) true = path is relative.
+ @param bEncoded if true return an IURI encoded name, not a DOS name. */
static OUString BuildFileName(
sal_uInt16& rnLevel, bool& rbRel,
- const OUString& rUrl, const XclExpRoot& rRoot );
+ const OUString& rUrl, const XclExpRoot& rRoot, bool bEncoded );
private:
/** Writes the body of the HLINK record. */
diff --git a/sc/source/ui/unoobj/linkuno.cxx b/sc/source/ui/unoobj/linkuno.cxx
index df41763763ff..7afd3a20a06b 100644
--- a/sc/source/ui/unoobj/linkuno.cxx
+++ b/sc/source/ui/unoobj/linkuno.cxx
@@ -1711,7 +1711,8 @@ Reference< sheet::XExternalDocLink > SAL_CALL ScExternalDocLinksObj::addDocLink(
throw (RuntimeException, std::exception)
{
SolarMutexGuard aGuard;
- sal_uInt16 nFileId = mpRefMgr->getExternalFileId(aDocName);
+ OUString aDocUrl( ScGlobal::GetAbsDocName( aDocName, mpDocShell));
+ sal_uInt16 nFileId = mpRefMgr->getExternalFileId(aDocUrl);
Reference< sheet::XExternalDocLink > aDocLink(new ScExternalDocLinkObj(mpDocShell, mpRefMgr, nFileId));
return aDocLink;
}
@@ -1720,10 +1721,11 @@ Any SAL_CALL ScExternalDocLinksObj::getByName(const OUString &aName)
throw (container::NoSuchElementException, lang::WrappedTargetException, RuntimeException, std::exception)
{
SolarMutexGuard aGuard;
- if (!mpRefMgr->hasExternalFile(aName))
+ OUString aDocUrl( ScGlobal::GetAbsDocName( aName, mpDocShell));
+ if (!mpRefMgr->hasExternalFile(aDocUrl))
throw container::NoSuchElementException();
- sal_uInt16 nFileId = mpRefMgr->getExternalFileId(aName);
+ sal_uInt16 nFileId = mpRefMgr->getExternalFileId(aDocUrl);
Reference< sheet::XExternalDocLink > aDocLink(new ScExternalDocLinkObj(mpDocShell, mpRefMgr, nFileId));
Any aAny;