summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sc/qa/unit/data/xlsx/protectedRange.xlsxbin0 -> 8828 bytes
-rw-r--r--sc/qa/unit/subsequent_export_test2.cxx11
-rw-r--r--sc/source/core/tool/rangelst.cxx4
-rw-r--r--sc/source/filter/excel/xestream.cxx3
4 files changed, 17 insertions, 1 deletions
diff --git a/sc/qa/unit/data/xlsx/protectedRange.xlsx b/sc/qa/unit/data/xlsx/protectedRange.xlsx
new file mode 100644
index 000000000000..a185ac3598d0
--- /dev/null
+++ b/sc/qa/unit/data/xlsx/protectedRange.xlsx
Binary files differ
diff --git a/sc/qa/unit/subsequent_export_test2.cxx b/sc/qa/unit/subsequent_export_test2.cxx
index 9f281928c732..c0b17e11aeb8 100644
--- a/sc/qa/unit/subsequent_export_test2.cxx
+++ b/sc/qa/unit/subsequent_export_test2.cxx
@@ -1263,6 +1263,17 @@ CPPUNIT_TEST_FIXTURE(ScExportTest2, testTdf126024XLSX)
"External");
}
+CPPUNIT_TEST_FIXTURE(ScExportTest2, testProtectedRange)
+{
+ createScDoc("xlsx/protectedRange.xlsx");
+ save("Calc Office Open XML");
+
+ xmlDocUniquePtr pDoc = parseExport("xl/worksheets/sheet1.xml");
+ CPPUNIT_ASSERT(pDoc);
+ // entire row was being exported as shorthand 'B:B' which LO couldn't read back
+ assertXPath(pDoc, "//x:protectedRanges/x:protectedRange"_ostr, "sqref"_ostr, "B1:B1048576");
+}
+
CPPUNIT_TEST_FIXTURE(ScExportTest2, testTdf91332)
{
createScDoc("xlsx/tdf91332.xlsx");
diff --git a/sc/source/core/tool/rangelst.cxx b/sc/source/core/tool/rangelst.cxx
index f84c92c7a7ae..998187b42996 100644
--- a/sc/source/core/tool/rangelst.cxx
+++ b/sc/source/core/tool/rangelst.cxx
@@ -133,6 +133,10 @@ void ScRangeList::Format( OUString& rStr, ScRefFlags nFlags, const ScDocument& r
formula::FormulaGrammar::AddressConvention eConv,
sal_Unicode cDelimiter, bool bFullAddressNotation ) const
{
+ // LO's AddressConverter::parseOoxAddress2d cannot import a short-hand address,
+ // so definitely do not export that way.
+ assert(eConv != FormulaGrammar::CONV_XL_OOX || bFullAddressNotation);
+
if (!cDelimiter)
cDelimiter = ScCompiler::GetNativeSymbolChar(ocSep);
diff --git a/sc/source/filter/excel/xestream.cxx b/sc/source/filter/excel/xestream.cxx
index 32cecf352de3..c93cf6f5f34d 100644
--- a/sc/source/filter/excel/xestream.cxx
+++ b/sc/source/filter/excel/xestream.cxx
@@ -748,7 +748,8 @@ OString XclXmlUtils::ToOString( const ScDocument& rDoc, const ScRange& rRange, b
OString XclXmlUtils::ToOString( const ScDocument& rDoc, const ScRangeList& rRangeList )
{
OUString s;
- rRangeList.Format(s, ScRefFlags::VALID, rDoc, FormulaGrammar::CONV_XL_OOX, ' ');
+ rRangeList.Format(s, ScRefFlags::VALID, rDoc, FormulaGrammar::CONV_XL_OOX, ' ',
+ /*FullAddressNotation=*/true);
return s.toUtf8();
}