diff options
author | Tünde Tóth <toth.tunde@nisz.hu> | 2021-07-14 14:57:00 +0200 |
---|---|---|
committer | László Németh <nemeth@numbertext.org> | 2021-07-26 13:54:57 +0200 |
commit | 3c3b9ad8886da916027f0fb940a2df822d63d4d7 (patch) | |
tree | ef205ef64406962b81b5f2e3524eea730501752d /sc | |
parent | 057191fb50ea2ae9cca42ef84329581094047db8 (diff) |
tdf#143220 XLSX export: fix hyperlink to sheet target
Hyperlink to another sheet didn't work in Excel.
Change-Id: Ic63e581d5de8f7ff1eac50a5e56a51d7ba2e72ce
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/118935
Tested-by: Jenkins
Tested-by: László Németh <nemeth@numbertext.org>
Reviewed-by: László Németh <nemeth@numbertext.org>
Diffstat (limited to 'sc')
-rw-r--r-- | sc/qa/unit/data/ods/tdf143220.ods | bin | 0 -> 9597 bytes | |||
-rw-r--r-- | sc/qa/unit/subsequent_export-test2.cxx | 15 | ||||
-rw-r--r-- | sc/source/filter/excel/xecontent.cxx | 8 |
3 files changed, 20 insertions, 3 deletions
diff --git a/sc/qa/unit/data/ods/tdf143220.ods b/sc/qa/unit/data/ods/tdf143220.ods Binary files differnew file mode 100644 index 000000000000..6aa1536eae8e --- /dev/null +++ b/sc/qa/unit/data/ods/tdf143220.ods diff --git a/sc/qa/unit/subsequent_export-test2.cxx b/sc/qa/unit/subsequent_export-test2.cxx index 030e4a4ae7df..6ee07223a824 100644 --- a/sc/qa/unit/subsequent_export-test2.cxx +++ b/sc/qa/unit/subsequent_export-test2.cxx @@ -194,6 +194,7 @@ public: void testButtonFormControlXlsxExport(); void testTdf142929_filterLessThanXLSX(); void testInvalidNamedRange(); + void testTdf143220XLSX(); CPPUNIT_TEST_SUITE(ScExportTest2); @@ -296,6 +297,7 @@ public: CPPUNIT_TEST(testButtonFormControlXlsxExport); CPPUNIT_TEST(testTdf142929_filterLessThanXLSX); CPPUNIT_TEST(testInvalidNamedRange); + CPPUNIT_TEST(testTdf143220XLSX); CPPUNIT_TEST_SUITE_END(); @@ -2460,6 +2462,19 @@ void ScExportTest2::testInvalidNamedRange() CPPUNIT_ASSERT(!xNamedRanges->hasByName("myname")); } +void ScExportTest2::testTdf143220XLSX() +{ + ScDocShellRef xDocSh = loadDoc(u"tdf143220.", FORMAT_ODS); + CPPUNIT_ASSERT(xDocSh.is()); + + xmlDocUniquePtr pDoc = XPathHelper::parseExport2(*this, *xDocSh, m_xSFactory, + "xl/worksheets/sheet1.xml", FORMAT_XLSX); + CPPUNIT_ASSERT(pDoc); + assertXPath(pDoc, "/x:worksheet/x:hyperlinks/x:hyperlink", "location", "Sheet2!A1"); + + xDocSh->DoClose(); +} + CPPUNIT_TEST_SUITE_REGISTRATION(ScExportTest2); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sc/source/filter/excel/xecontent.cxx b/sc/source/filter/excel/xecontent.cxx index 0848745b8d4a..0a7a3baeb953 100644 --- a/sc/source/filter/excel/xecontent.cxx +++ b/sc/source/filter/excel/xecontent.cxx @@ -428,15 +428,17 @@ XclExpHyperlink::XclExpHyperlink( const XclExpRoot& rRoot, const SvxURLField& rU aTextMark = aTextMark.replaceAt( nSepPos, 1, "!" ); } - if(nSepPos != -1) + if (nSepPos != -1) { - OUString aSheetName( aTextMark.copy(0, nSepPos)); + OUString aSheetName(aTextMark.copy(0, nSepPos)); - if ( aSheetName.indexOf(' ') != -1 && aSheetName[0] != '\'') + if (aSheetName.indexOf(' ') != -1 && aSheetName[0] != '\'') { aTextMark = "'" + aTextMark.replaceAt(nSepPos, 0, "'"); } } + else + aTextMark += "!A1"; // tdf#143220 link to sheet not valid without cell reference mxTextMark.reset( new XclExpString( aTextMark, XclStrFlags::ForceUnicode, 255 ) ); } |