Kaydet (Commit) f139baa0 authored tarafından Eike Rathke's avatar Eike Rathke Kaydeden (comit) Caolán McNamara

do not parse range fragments as valid ranges

For example, "B2:" or ":B2" were accepted as valid range, with the
missing part set to A1, which resulted in a A1:B2 range.

An omitted sheet specifier always results in a valid relative sheet,
hence that flag is set, so testing flags for non-null before the final
result is available isn't sufficient.

Additionally this revealed a flaw in handling of external references
when loading documents if the original file name differs from the
resulting real file name due to relative paths.

Actually now the displayed file name matches the real file name when
such a document was loaded, where before the original file name was
displayed.

Probably such references didn't even work before if the reference
spanned more than one sheet, which is a rather rare case for external
references.

Change-Id: I38035f2e4b3a11c0280457498cf62b02f882d2a1
(cherry picked from commit 56238d58)
Reviewed-on: https://gerrit.libreoffice.org/18035Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarCaolán McNamara <caolanm@redhat.com>
Tested-by: 's avatarCaolán McNamara <caolanm@redhat.com>
üst 7fc38491
...@@ -1198,7 +1198,14 @@ static sal_uInt16 lcl_ScAddress_Parse_OOo( const sal_Unicode* p, ScDocument* pDo ...@@ -1198,7 +1198,14 @@ static sal_uInt16 lcl_ScAddress_Parse_OOo( const sal_Unicode* p, ScDocument* pDo
// Need document name if inherited. // Need document name if inherited.
if (bExtDocInherited) if (bExtDocInherited)
{ {
const OUString* pFileName = pRefMgr->getExternalFileName( pExtInfo->mnFileId); // The FileId was created using the original file name, so
// obtain that. Otherwise lcl_ScRange_External_TabSpan() would
// retrieve a FileId for the real name and bail out if that
// differed from pExtInfo->mnFileId, as is the case when
// loading documents that refer external files relative to the
// current own document but were saved from a different path
// than loaded.
const OUString* pFileName = pRefMgr->getExternalFileName( pExtInfo->mnFileId, true);
if (pFileName) if (pFileName)
aDocName = *pFileName; aDocName = *pFileName;
else else
...@@ -1521,7 +1528,7 @@ static sal_uInt16 lcl_ScRange_Parse_OOo( ScRange& rRange, ...@@ -1521,7 +1528,7 @@ static sal_uInt16 lcl_ScRange_Parse_OOo( ScRange& rRange,
nRes2 |= SCA_COL_ABSOLUTE; nRes2 |= SCA_COL_ABSOLUTE;
} }
} }
if (nRes1 && nRes2) if ((nRes1 & SCA_VALID) && (nRes2 & SCA_VALID))
{ {
// PutInOrder / Justify // PutInOrder / Justify
sal_uInt16 nMask, nBits1, nBits2; sal_uInt16 nMask, nBits1, nBits2;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment