filter/source/config/fragments/filters/calc_MS_Excel_2007_VBA_XML.xcu      |   
 2 
 filter/source/config/fragments/filters/calc_MS_Excel_2007_XML.xcu          |   
 2 
 filter/source/config/fragments/filters/calc_MS_Excel_2007_XML_Template.xcu |   
 2 
 filter/source/config/fragments/filters/calc_OOXML.xcu                      |   
 4 
 filter/source/config/fragments/filters/calc_OOXML_Template.xcu             |   
 4 
 filter/source/config/fragments/types/MS_Excel_2007_VBA_XML.xcu             |   
 2 
 filter/source/config/fragments/types/MS_Excel_2007_XML.xcu                 |   
 2 
 filter/source/config/fragments/types/MS_Excel_2007_XML_Template.xcu        |   
 2 
 filter/source/config/fragments/types/calc_OOXML.xcu                        |   
 2 
 filter/source/config/fragments/types/calc_OOXML_Template.xcu               |   
 2 
 include/oox/core/filterdetect.hxx                                          |   
 1 
 oox/source/core/filterdetect.cxx                                           |   
55 +++++++++-
 sc/qa/uitest/calc_tests7/save_readonly_with_password.py                    |   
 2 
 sc/qa/uitest/calc_tests8/tdf147086_do_not_save_empty_password_OOXML.py     |   
 2 
 sc/qa/unit/subsequent_export_test2.cxx                                     |   
11 +-
 sc/source/filter/xml/xmlimprt.cxx                                          |   
 2 
 16 files changed, 78 insertions(+), 19 deletions(-)

New commits:
commit 0a0cf076a9acb83e247a2dc71fb3ef32c642169a
Author:     Justin Luth <[email protected]>
AuthorDate: Sat Nov 29 14:00:15 2025 -0500
Commit:     Justin Luth <[email protected]>
CommitDate: Fri Dec 12 00:44:00 2025 +0100

    tdf#165180 filter: rename XLSX filters to be less confusing
    
    This patch is basically a copy/paste of mstahl's DOCX patch
    LO 7.6 commit ed0476b0625c4361df5ff040a6661a9634588cea
        tdf#137883 filter: rename DOCX filters to be less confusing
        Reviewed-on: https://gerrit.libreoffice.org/c/core/+/147210
    
    Rename misleading "Excel 2007-365" filter
    which corresponds to the first pre-ISO version of OOXML
    (ECMA-365 1st edition)
    and is actually very specifically for Excel 2007.
    
    Stop confusing users with standardese like
    "Office Open XML Spreadsheet"
    and instead use the name of the appliction
    that the format is intended for, "Excel 2010–365".
    
    Hopefully users will now pick the latter filter over the former,
    although obviously it hasn't been highly tested in the wild...
    
    Also, the OOXML_Spreadsheet_Template was missing EXPORT flag,
    so didn't show up in the Save dialog.
    
    Also, the OOXML_Spreadsheet was missing SUPPORTSSIGNING flag
    which (for DOCX) vmiklos said was by accident.
    
    Notes:
    -I made sure to use the n-dash instead of a hyphen
    -did a diff to verify only missing EXPORT and SUPPORTSSIGNING
    -followup commit will make this default,
    so I already changed the corresponding unit tests to use 2010 filter.
    
    make -srj1 UITest_calc_tests7 \
            
UITEST_TEST_NAME=save_readonly_with_password.save_readonly_with_password.test_save_to_xlsx
 \
            SAL_USE_VCLPLUGIN=gen
    
    make -srj1 UITest_calc_tests8 \
            
UITEST_TEST_NAME=tdf147086_do_not_save_empty_password_OOXML.tdf147086.test_tdf147086
 \
            SAL_USE_VCLPLUGIN=gen
    
    Change-Id: I66d8029f28e96552c291edc532f01ec9cb695763
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195032
    Reviewed-by: Justin Luth <[email protected]>
    Tested-by: Jenkins

diff --git 
a/filter/source/config/fragments/filters/calc_MS_Excel_2007_VBA_XML.xcu 
b/filter/source/config/fragments/filters/calc_MS_Excel_2007_VBA_XML.xcu
index ffeee2c630da..776bdd25afcb 100644
--- a/filter/source/config/fragments/filters/calc_MS_Excel_2007_VBA_XML.xcu
+++ b/filter/source/config/fragments/filters/calc_MS_Excel_2007_VBA_XML.xcu
@@ -25,6 +25,6 @@
     <prop oor:name="TemplateName"/>
     <prop 
oor:name="DocumentService"><value>com.sun.star.sheet.SpreadsheetDocument</value></prop>
     <prop oor:name="UIName">
-        <value xml:lang="en-US">Excel 2007–365 (macro-enabled)</value>
+        <value xml:lang="en-US">Excel 2007 (macro-enabled)</value>
     </prop>
 </node>
diff --git a/filter/source/config/fragments/filters/calc_MS_Excel_2007_XML.xcu 
b/filter/source/config/fragments/filters/calc_MS_Excel_2007_XML.xcu
index bc0ab95e2c8a..988cbeff75ad 100644
--- a/filter/source/config/fragments/filters/calc_MS_Excel_2007_XML.xcu
+++ b/filter/source/config/fragments/filters/calc_MS_Excel_2007_XML.xcu
@@ -25,6 +25,6 @@
     <prop oor:name="TemplateName"/>
     <prop 
oor:name="DocumentService"><value>com.sun.star.sheet.SpreadsheetDocument</value></prop>
     <prop oor:name="UIName">
-        <value xml:lang="en-US">Excel 2007–365</value>
+        <value xml:lang="en-US">Excel 2007</value>
     </prop>
 </node>
diff --git 
a/filter/source/config/fragments/filters/calc_MS_Excel_2007_XML_Template.xcu 
b/filter/source/config/fragments/filters/calc_MS_Excel_2007_XML_Template.xcu
index 515b89152b60..119b536ea8a1 100644
--- a/filter/source/config/fragments/filters/calc_MS_Excel_2007_XML_Template.xcu
+++ b/filter/source/config/fragments/filters/calc_MS_Excel_2007_XML_Template.xcu
@@ -25,6 +25,6 @@
     <prop oor:name="TemplateName"/>
     <prop 
oor:name="DocumentService"><value>com.sun.star.sheet.SpreadsheetDocument</value></prop>
     <prop oor:name="UIName">
-        <value xml:lang="en-US">Excel 2007–365 Template</value>
+        <value xml:lang="en-US">Excel 2007 Template</value>
     </prop>
     </node>
diff --git a/filter/source/config/fragments/filters/calc_OOXML.xcu 
b/filter/source/config/fragments/filters/calc_OOXML.xcu
index 2bc0981297d9..fbd3b2abaf7c 100644
--- a/filter/source/config/fragments/filters/calc_OOXML.xcu
+++ b/filter/source/config/fragments/filters/calc_OOXML.xcu
@@ -16,7 +16,7 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
 -->
 <node oor:name="Calc Office Open XML" oor:op="replace">
-    <prop oor:name="Flags"><value>IMPORT EXPORT ALIEN 3RDPARTYFILTER PREFERRED 
ENCRYPTION PASSWORDTOMODIFY</value></prop>
+    <prop oor:name="Flags"><value>IMPORT EXPORT ALIEN 3RDPARTYFILTER PREFERRED 
ENCRYPTION PASSWORDTOMODIFY SUPPORTSSIGNING</value></prop>
     <prop oor:name="UIComponent"/>
     <prop 
oor:name="FilterService"><value>com.sun.star.comp.oox.xls.ExcelFilter</value></prop>
     <prop oor:name="UserData"><value>OOXML</value></prop>
@@ -25,6 +25,6 @@
     <prop oor:name="TemplateName"/>
     <prop 
oor:name="DocumentService"><value>com.sun.star.sheet.SpreadsheetDocument</value></prop>
     <prop oor:name="UIName">
-        <value xml:lang="en-US">Office Open XML Spreadsheet</value>
+        <value xml:lang="en-US">Excel 2010–365 Spreadsheet</value>
     </prop>
     </node>
diff --git a/filter/source/config/fragments/filters/calc_OOXML_Template.xcu 
b/filter/source/config/fragments/filters/calc_OOXML_Template.xcu
index b65a756088be..c6dc4732dcb8 100644
--- a/filter/source/config/fragments/filters/calc_OOXML_Template.xcu
+++ b/filter/source/config/fragments/filters/calc_OOXML_Template.xcu
@@ -16,7 +16,7 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
 -->
 <node oor:name="Calc Office Open XML Template" oor:op="replace">
-    <prop oor:name="Flags"><value>IMPORT ALIEN 3RDPARTYFILTER TEMPLATE 
TEMPLATEPATH</value></prop>
+    <prop oor:name="Flags"><value>IMPORT EXPORT ALIEN 3RDPARTYFILTER TEMPLATE 
TEMPLATEPATH</value></prop>
     <prop oor:name="UIComponent"/>
     <prop 
oor:name="FilterService"><value>com.sun.star.comp.oox.xls.ExcelFilter</value></prop>
     <prop oor:name="UserData"><value>OOXML</value></prop>
@@ -25,6 +25,6 @@
     <prop oor:name="TemplateName"/>
     <prop 
oor:name="DocumentService"><value>com.sun.star.sheet.SpreadsheetDocument</value></prop>
     <prop oor:name="UIName">
-        <value xml:lang="en-US">Office Open XML Spreadsheet Template</value>
+        <value xml:lang="en-US">Excel 2010–365 Template</value>
     </prop>
     </node>
diff --git a/filter/source/config/fragments/types/MS_Excel_2007_VBA_XML.xcu 
b/filter/source/config/fragments/types/MS_Excel_2007_VBA_XML.xcu
index 70c99bbf7dbd..c26dab582711 100644
--- a/filter/source/config/fragments/types/MS_Excel_2007_VBA_XML.xcu
+++ b/filter/source/config/fragments/types/MS_Excel_2007_VBA_XML.xcu
@@ -22,6 +22,6 @@
     <prop 
oor:name="MediaType"><value>application/vnd.ms-excel.sheet.macroEnabled.12</value></prop>
     <prop oor:name="Preferred"><value>false</value></prop>
     <prop oor:name="PreferredFilter"><value>Calc MS Excel 2007 VBA 
XML</value></prop>
-    <prop oor:name="UIName"><value xml:lang="en-US">Microsoft Excel 2007–365 
VBA XML</value></prop>
+    <prop oor:name="UIName"><value xml:lang="en-US">Microsoft Excel 2007 VBA 
XML</value></prop>
     <prop oor:name="ClipboardFormat"/>
 </node>
diff --git a/filter/source/config/fragments/types/MS_Excel_2007_XML.xcu 
b/filter/source/config/fragments/types/MS_Excel_2007_XML.xcu
index 73d2daee354c..a6c06c34a4ac 100644
--- a/filter/source/config/fragments/types/MS_Excel_2007_XML.xcu
+++ b/filter/source/config/fragments/types/MS_Excel_2007_XML.xcu
@@ -22,6 +22,6 @@
     <prop 
oor:name="MediaType"><value>application/vnd.openxmlformats-officedocument.spreadsheetml.sheet</value></prop>
     <prop oor:name="Preferred"><value>false</value></prop>
     <prop oor:name="PreferredFilter"><value>Calc MS Excel 2007 
XML</value></prop>
-    <prop oor:name="UIName"><value xml:lang="en-US">Excel 
2007–365</value></prop>
+    <prop oor:name="UIName"><value xml:lang="en-US">Excel 2007</value></prop>
     <prop oor:name="ClipboardFormat"/>
 </node>
diff --git 
a/filter/source/config/fragments/types/MS_Excel_2007_XML_Template.xcu 
b/filter/source/config/fragments/types/MS_Excel_2007_XML_Template.xcu
index d0a828def722..db6849e29b25 100644
--- a/filter/source/config/fragments/types/MS_Excel_2007_XML_Template.xcu
+++ b/filter/source/config/fragments/types/MS_Excel_2007_XML_Template.xcu
@@ -22,6 +22,6 @@
     <prop 
oor:name="MediaType"><value>application/vnd.openxmlformats-officedocument.spreadsheetml.template</value></prop>
     <prop oor:name="Preferred"><value>false</value></prop>
     <prop oor:name="PreferredFilter"><value>Calc MS Excel 2007 XML 
Template</value></prop>
-    <prop oor:name="UIName"><value xml:lang="en-US">Excel 2007–365 
Template</value></prop>
+    <prop oor:name="UIName"><value xml:lang="en-US">Excel 2007 
Template</value></prop>
     <prop oor:name="ClipboardFormat"/>
 </node>
diff --git a/filter/source/config/fragments/types/calc_OOXML.xcu 
b/filter/source/config/fragments/types/calc_OOXML.xcu
index 8e2b073ccc3a..2dce88af0c22 100644
--- a/filter/source/config/fragments/types/calc_OOXML.xcu
+++ b/filter/source/config/fragments/types/calc_OOXML.xcu
@@ -22,6 +22,6 @@
     <prop 
oor:name="MediaType"><value>application/vnd.openxmlformats-officedocument.spreadsheetml.sheet</value></prop>
     <prop oor:name="Preferred"><value>true</value></prop>
     <prop oor:name="PreferredFilter"><value>Calc Office Open XML</value></prop>
-    <prop oor:name="UIName"><value xml:lang="en-US">Office Open XML 
Spreadsheet</value></prop>
+    <prop oor:name="UIName"><value xml:lang="en-US">Excel 2010–365 
Spreadsheet</value></prop>
     <prop oor:name="ClipboardFormat"/>
 </node>
diff --git a/filter/source/config/fragments/types/calc_OOXML_Template.xcu 
b/filter/source/config/fragments/types/calc_OOXML_Template.xcu
index 1d002d08f143..566ce55f443b 100644
--- a/filter/source/config/fragments/types/calc_OOXML_Template.xcu
+++ b/filter/source/config/fragments/types/calc_OOXML_Template.xcu
@@ -22,6 +22,6 @@
     <prop 
oor:name="MediaType"><value>application/vnd.openxmlformats-officedocument.spreadsheetml.template</value></prop>
     <prop oor:name="Preferred"><value>true</value></prop>
     <prop oor:name="PreferredFilter"><value>Calc Office Open XML 
Template</value></prop>
-    <prop oor:name="UIName"><value xml:lang="en-US">Office Open XML 
Spreadsheet Template</value></prop>
+    <prop oor:name="UIName"><value xml:lang="en-US">Excel 2010–365 Spreadsheet 
Template</value></prop>
     <prop oor:name="ClipboardFormat"/>
 </node>
diff --git a/sc/qa/uitest/calc_tests7/save_readonly_with_password.py 
b/sc/qa/uitest/calc_tests7/save_readonly_with_password.py
index 211060822f88..add5890cc325 100644
--- a/sc/qa/uitest/calc_tests7/save_readonly_with_password.py
+++ b/sc/qa/uitest/calc_tests7/save_readonly_with_password.py
@@ -29,7 +29,7 @@ class save_readonly_with_password(UITestCase):
                     xFileName.executeAction("TYPE", 
mkPropertyValues({"KEYCODE":"BACKSPACE"}))
                     xFileName.executeAction("TYPE", mkPropertyValues({"TEXT": 
xFilePath}))
                     xFileTypeCombo = xSaveDialog.getChild("file_type")
-                    select_by_text(xFileTypeCombo, "Excel 2007–365 (.xlsx)")
+                    select_by_text(xFileTypeCombo, "Excel 2010–365 Spreadsheet 
(.xlsx)")
                     xPasswordCheckButton = xSaveDialog.getChild("password")
                     xPasswordCheckButton.executeAction("CLICK", tuple())
                     xOpen = xSaveDialog.getChild("open")
diff --git 
a/sc/qa/uitest/calc_tests8/tdf147086_do_not_save_empty_password_OOXML.py 
b/sc/qa/uitest/calc_tests8/tdf147086_do_not_save_empty_password_OOXML.py
index 85c7eb42e408..d2144c80d566 100755
--- a/sc/qa/uitest/calc_tests8/tdf147086_do_not_save_empty_password_OOXML.py
+++ b/sc/qa/uitest/calc_tests8/tdf147086_do_not_save_empty_password_OOXML.py
@@ -31,7 +31,7 @@ class tdf147086(UITestCase):
                     xFileName.executeAction("TYPE", 
mkPropertyValues({"KEYCODE":"BACKSPACE"}))
                     xFileName.executeAction("TYPE", mkPropertyValues({"TEXT": 
xFilePath}))
                     xFileTypeCombo = xSaveDialog.getChild("file_type")
-                    select_by_text(xFileTypeCombo, "Excel 2007–365 (.xlsx)")
+                    select_by_text(xFileTypeCombo, "Excel 2010–365 Spreadsheet 
(.xlsx)")
                     xPasswordCheckButton = xSaveDialog.getChild("password")
                     xPasswordCheckButton.executeAction("CLICK", tuple())
                     xOpen = xSaveDialog.getChild("open")
diff --git a/sc/source/filter/xml/xmlimprt.cxx 
b/sc/source/filter/xml/xmlimprt.cxx
index 501deb66de35..dd4fc2e27a1d 100644
--- a/sc/source/filter/xml/xmlimprt.cxx
+++ b/sc/source/filter/xml/xmlimprt.cxx
@@ -1789,7 +1789,7 @@ extern "C" SAL_DLLPUBLIC_EXPORT bool 
TestFODSExportXLS(SvStream &rStream)
         uno::Sequence<beans::PropertyValue> 
aFilterData(comphelper::InitPropertySequence({
         }));
         uno::Sequence<beans::PropertyValue> 
aDescriptor(comphelper::InitPropertySequence({
-            { "FilterName", uno::Any(u"Excel 2007–365"_ustr) },
+            { "FilterName", uno::Any(u"Excel 2010–365 Spreadsheet"_ustr) },
             { "OutputStream", uno::Any(xOutputStream) },
             { "FilterData", uno::Any(aFilterData) }
         }));
commit ee0e7b2b78f9024bd9e2fe18c75bb0cb2dfea769
Author:     Justin Luth <[email protected]>
AuthorDate: Fri Dec 5 20:25:47 2025 -0500
Commit:     Justin Luth <[email protected]>
CommitDate: Fri Dec 12 00:43:48 2025 +0100

    tdf#165180 xlsx import: detect lowestEdited > 4 as 2010+ filter
    
    WARNING: this patch instantly flips LO
    to importing/exporting most xlsx documents with the Excel 2010 filter.
    Prior to this, everything used Excel 2007 filter for import or export.
    
    xl/workbook.xml contains a fileVersion element
    that has a lowestEdited value (similar to DOCX's compatibilityMode).
    
    Although undocumented, lowestEdited in practice seems to mean:
    - 4 is Excel 2007
    - 5 is Excel 2010
    - 6 is (probably) Excel 2013
    - 7 is Excel 2019 (probably also 2016)
    
    My Excel 2024 produced this:
    <fileVersion appName="xl" lastEdited="7" lowestEdited="7"
                 rupBuild="27928"/>
    
    If there is no lowestEdited, then just use lastEdited.
    There apparently is no default value for lowestEdited or lastEdited
    (unlike compatibilityMode - which is treated as 12 when not specified).
    
    make CppunitTest_sc_subsequent_export_test2 \
        CPPUNIT_TEST_NAME=testGroupShape
    
    Change-Id: I83b093279949214cbf819d0597cb923347cfb04d
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195118
    Reviewed-by: Justin Luth <[email protected]>
    Tested-by: Jenkins

diff --git a/include/oox/core/filterdetect.hxx 
b/include/oox/core/filterdetect.hxx
index 2d2b50260b95..436e91cce909 100644
--- a/include/oox/core/filterdetect.hxx
+++ b/include/oox/core/filterdetect.hxx
@@ -77,6 +77,7 @@ public:
 
 private:
     void parseSettings(const AttributeList& rAttribs);
+    void parseWorkbook(const AttributeList& rAttribs);
     void                parseRelationship( const AttributeList& rAttribs );
 
     OUString            getFilterNameFromContentType( std::u16string_view 
rContentType, std::u16string_view rFileName );
diff --git a/oox/source/core/filterdetect.cxx b/oox/source/core/filterdetect.cxx
index 8ee4fc1a179b..eb7d2182566a 100644
--- a/oox/source/core/filterdetect.cxx
+++ b/oox/source/core/filterdetect.cxx
@@ -98,6 +98,14 @@ void SAL_CALL FilterDetectDocHandler::startFastElement(
                 parseSettings(aAttribs);
             break;
 
+        // cases for xl/workbook.xml
+        case XLS_TOKEN(workbook):
+            break;
+        case XLS_TOKEN(fileVersion):
+            if (!maContextStack.empty() && (maContextStack.back() == 
XLS_TOKEN(workbook)))
+                parseWorkbook(aAttribs);
+            break;
+
         // cases for _rels/.rels
         case PR_TOKEN( Relationships ):
         break;
@@ -164,6 +172,19 @@ void FilterDetectDocHandler::parseSettings(const 
AttributeList& rAttribs)
     }
 }
 
+void FilterDetectDocHandler::parseWorkbook(const AttributeList& rAttribs)
+{
+    if (maOOXMLVariant != OOXMLVariant::ECMA_Transitional)
+        return;
+
+    // tdf#165180 Remember filter when opening file as 'Office Open XML 
Spreadsheet'
+    // (fileVersion can only exist once, and lowestEdited can only be defined 
once - else corrupt)
+    // lowestEdited: 4 is 2007, 5 is 2010, 6 is 201?, 7 is 201?-2024
+    const sal_Int32 nDefaultValue = rAttribs.getInteger(XML_lastEdited, 99);
+    if (rAttribs.getInteger(XML_lowestEdited, nDefaultValue) > 4)
+        maOOXMLVariant = OOXMLVariant::ISO_Transitional; // Excel 2010+
+}
+
 void FilterDetectDocHandler::parseRelationship( const AttributeList& rAttribs )
 {
     OUString aType = rAttribs.getStringDefaulted( XML_Type);
@@ -230,14 +251,32 @@ OUString 
FilterDetectDocHandler::getFilterNameFromContentType( std::u16string_vi
     }
 
     if( rContentType == 
u"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml")
-        return u"MS Excel 2007 XML"_ustr;
+    {
+        switch (maOOXMLVariant)
+        {
+            case OOXMLVariant::ISO_Transitional:
+            case OOXMLVariant::ISO_Strict: // Not supported, map to ISO 
transitional
+                return u"Office Open XML Spreadsheet"_ustr; // Excel 2010+
+            case OOXMLVariant::ECMA_Transitional:
+                return u"MS Excel 2007 XML"_ustr;
+        }
+    }
 
     if (rContentType == 
u"application/vnd.ms-excel.sheet.macroEnabled.main+xml")
         return u"MS Excel 2007 VBA XML"_ustr;
 
     if( rContentType == 
u"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml"
 ||
         rContentType == 
u"application/vnd.ms-excel.template.macroEnabled.main+xml" )
-        return u"MS Excel 2007 XML Template"_ustr;
+    {
+        switch (maOOXMLVariant)
+        {
+            case OOXMLVariant::ISO_Transitional:
+            case OOXMLVariant::ISO_Strict: // Not supported, map to ISO 
transitional
+                return u"Office Open XML Spreadsheet Template"_ustr; // Excel 
2010+
+            case OOXMLVariant::ECMA_Transitional:
+                return u"MS Excel 2007 XML Template"_ustr;
+        }
+    }
 
     if ( rContentType == 
u"application/vnd.ms-excel.sheet.binary.macroEnabled.main" )
         return u"MS Excel 2007 Binary"_ustr;
@@ -458,6 +497,7 @@ OUString SAL_CALL FilterDetect::detect( Sequence< 
PropertyValue >& rMediaDescSeq
             aParser.registerNamespace( NMSP_officeRel );
             aParser.registerNamespace( NMSP_packageContentTypes );
             aParser.registerNamespace(NMSP_doc); // for W_TOKEN
+            aParser.registerNamespace(NMSP_xls); // for XLS_TOKEN
 
             OUString aFileName;
             aMediaDescriptor[utl::MediaDescriptor::PROP_URL] >>= aFileName;
@@ -470,11 +510,20 @@ OUString SAL_CALL FilterDetect::detect( Sequence< 
PropertyValue >& rMediaDescSeq
             try
             {
                 // Text documents can't use .rels to determine maOOXMLVariant. 
Use compatibilityMode
-                 aParser.parseStream(aZipStorage, u"word/settings.xml"_ustr);
+                aParser.parseStream(aZipStorage, u"word/settings.xml"_ustr);
             }
             catch(const Exception&)
             {
                 // not a MS Word text document, or file might not exist
+                try
+                {
+                    // Spreadsheets distinguish maOOXMLVariant using 
fileVersion lowestEdited
+                    aParser.parseStream(aZipStorage, u"xl/workbook.xml"_ustr);
+                }
+                catch(const Exception&)
+                {
+                    // not a MS Excel spreadsheet document, or file might not 
exist
+                }
             }
             // Order is critical: .rels and then settings.xml must be parsed 
before [Content_Types]
             aParser.parseStream( aZipStorage, u"[Content_Types].xml"_ustr );
diff --git a/sc/qa/unit/subsequent_export_test2.cxx 
b/sc/qa/unit/subsequent_export_test2.cxx
index 6dae813457f9..3753d531bbcf 100644
--- a/sc/qa/unit/subsequent_export_test2.cxx
+++ b/sc/qa/unit/subsequent_export_test2.cxx
@@ -21,6 +21,8 @@
 #include <comphelper/propertyvalue.hxx>
 #include <unotools/syslocaleoptions.hxx>
 #include <formula/grammar.hxx>
+#include <sfx2/docfilt.hxx>
+#include <sfx2/fcontnr.hxx>
 #include <svl/numformat.hxx>
 #include <svl/zformat.hxx>
 #include <svx/svdograf.hxx>
@@ -45,8 +47,15 @@ ScExportTest2::ScExportTest2()
 CPPUNIT_TEST_FIXTURE(ScExportTest2, testGroupShape)
 {
     createScDoc("xlsx/groupShape.xlsx");
-    save(TestFilter::XLSX);
 
+    // tdf#165180: should be recognized as a 2010+ XLSX format when loaded 
(and resaved...)
+    SfxMedium* pMedium = getScDocShell()->GetMedium();
+    SfxFilterMatcher aMatcher(u"com.sun.star.sheet.SpreadsheetDocument"_ustr);
+    std::shared_ptr<const SfxFilter> pFilter;
+    aMatcher.DetectFilter(*pMedium, pFilter);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("import", u"Calc Office Open XML"_ustr, 
pFilter->GetFilterName());
+
+    save(TestFilter::XLSX);
     xmlDocUniquePtr pDoc = parseExport(u"xl/drawings/drawing1.xml"_ustr);
     CPPUNIT_ASSERT(pDoc);
     assertXPath(pDoc, "/xdr:wsDr/xdr:twoCellAnchor/xdr:grpSp/xdr:grpSpPr");

Reply via email to