sc/qa/unit/subsequent_export-test2.cxx |    6 ++++++
 sc/source/filter/excel/xeescher.cxx    |    5 ++++-
 2 files changed, 10 insertions(+), 1 deletion(-)

New commits:
commit d67085cd86dc1e74941c8337d1eba39981117977
Author:     Miklos Vajna <vmik...@collabora.com>
AuthorDate: Thu Jul 8 10:15:29 2021 +0200
Commit:     Miklos Vajna <vmik...@collabora.com>
CommitDate: Thu Jul 8 11:06:31 2021 +0200

    XSLX export, button form control: fix handling of no macros
    
    Turns out that in case there is no macro, then the attribute should be
    omitted, leaving it empty is not OK. Excel warns about this.
    
    Change-Id: I2dbc4d837bd585674e013eb3ce6b898f12498c4d
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/118600
    Reviewed-by: Miklos Vajna <vmik...@collabora.com>
    Tested-by: Jenkins

diff --git a/sc/qa/unit/subsequent_export-test2.cxx 
b/sc/qa/unit/subsequent_export-test2.cxx
index 0a44090734ab..74e795709b0e 100644
--- a/sc/qa/unit/subsequent_export-test2.cxx
+++ b/sc/qa/unit/subsequent_export-test2.cxx
@@ -2367,6 +2367,12 @@ void ScExportTest2::testButtonFormControlXlsxExport()
     assertXPathContent(pDoc, "//x:anchor/x:from/xdr:row", "3");
     assertXPathContent(pDoc, "//x:anchor/x:to/xdr:col", "3");
     assertXPathContent(pDoc, "//x:anchor/x:to/xdr:row", "7");
+
+    // Also make sure that an empty macro attribute is not written.
+    // Without the fix in place, this test would have failed with:
+    // - XPath '//x:controlPr' unexpected 'macro' attribute
+    // i.e. macro in an xlsx file was not omitted, which is considered invalid 
by Excel.
+    assertXPathNoAttribute(pDoc, "//x:controlPr", "macro");
 }
 
 void ScExportTest2::testInvalidNamedRange()
diff --git a/sc/source/filter/excel/xeescher.cxx 
b/sc/source/filter/excel/xeescher.cxx
index eafc30de8b0a..2f92384c25b4 100644
--- a/sc/source/filter/excel/xeescher.cxx
+++ b/sc/source/filter/excel/xeescher.cxx
@@ -1481,9 +1481,12 @@ void XclExpTbxControlObj::SaveSheetXml(XclExpXmlStream& 
rStrm, const OUString& a
             rWorksheet->startElement(XML_control, XML_shapeId, 
OString::number(mnShapeId).getStr(),
                                      FSNS(XML_r, XML_id), aIdFormControlPr, 
XML_name, msCtrlName);
 
+            OString aMacroName = GetMacroName().toUtf8();
+            // Omit the macro attribute if it would be empty.
+            const char* pMacroName = aMacroName.isEmpty() ? nullptr : 
aMacroName.getStr();
             rWorksheet->startElement(XML_controlPr, XML_defaultSize, "0", 
XML_print,
                                      mbPrint ? "true" : "false", XML_autoFill, 
"0", XML_autoPict,
-                                     "0", XML_macro, GetMacroName());
+                                     "0", XML_macro, pMacroName);
 
             rWorksheet->startElement(XML_anchor, XML_moveWithCells, "true", 
XML_sizeWithCells,
                                      "false");
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to