tdf#121718 XLSX export: fix first page number

Changed code to not save 'useFirstPageNumber' and 'firstPageNumber'
if "First page number" is not checked.

It was needed because Excel does not care about 'useFirstPageNumber',
and blindly load 'firstPageNumber' even if that had an invalid value
(that could happen when useFirstPageNumber==false).

Co-authored-by: Tibor Nagy (NISZ)

Change-Id: I69c9ed0fd4fdca1794d4bbc197713ac687eb4005
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/100203
Tested-by: László Németh <nemeth@numbertext.org>
Reviewed-by: László Németh <nemeth@numbertext.org>
diff --git a/sc/qa/unit/data/ods/tdf121718_UseFirstPageNumber.ods b/sc/qa/unit/data/ods/tdf121718_UseFirstPageNumber.ods
new file mode 100644
index 0000000..0726e4c
--- /dev/null
+++ b/sc/qa/unit/data/ods/tdf121718_UseFirstPageNumber.ods
Binary files differ
diff --git a/sc/qa/unit/subsequent_export-test.cxx b/sc/qa/unit/subsequent_export-test.cxx
index 4a9e85e..c249322 100644
--- a/sc/qa/unit/subsequent_export-test.cxx
+++ b/sc/qa/unit/subsequent_export-test.cxx
@@ -255,6 +255,7 @@ public:
    void testTdf121716_ExportEvenHeaderFooterXLSX();
    void testTdf134459_HeaderFooterColorXLSX();
    void testTdf134817_HeaderFooterTextWith2SectionXLSX();
    void testTdf121718_UseFirstPageNumberXLSX();
    void testHeaderFontStyleXLSX();

    CPPUNIT_TEST_SUITE(ScExportTest);
@@ -409,6 +410,7 @@ public:
    CPPUNIT_TEST(testTdf121716_ExportEvenHeaderFooterXLSX);
    CPPUNIT_TEST(testTdf134459_HeaderFooterColorXLSX);
    CPPUNIT_TEST(testTdf134817_HeaderFooterTextWith2SectionXLSX);
    CPPUNIT_TEST(testTdf121718_UseFirstPageNumberXLSX);
    CPPUNIT_TEST(testHeaderFontStyleXLSX);

    CPPUNIT_TEST_SUITE_END();
@@ -5220,6 +5222,31 @@ void ScExportTest::testTdf134817_HeaderFooterTextWith2SectionXLSX()
    xDocSh->DoClose();
}

void ScExportTest::testTdf121718_UseFirstPageNumberXLSX()
{
    // If "First page number" is not checked then useFirstPageNumb, and firstPageNumber should not be exported.
    ScDocShellRef xShell = loadDoc("tdf121718_UseFirstPageNumber.", FORMAT_ODS);
    CPPUNIT_ASSERT(xShell.is());

    ScDocShellRef xDocSh = saveAndReload(&(*xShell), FORMAT_XLSX);
    CPPUNIT_ASSERT(xDocSh.is());

    std::shared_ptr<utl::TempFile> pXPathFile = ScBootstrapFixture::exportTo(&(*xDocSh), FORMAT_XLSX);
    xmlDocUniquePtr pDoc = XPathHelper::parseExport(pXPathFile, m_xSFactory, "xl/worksheets/sheet1.xml");
    CPPUNIT_ASSERT(pDoc);

    assertXPath(pDoc, "/x:worksheet/x:pageSetup", "useFirstPageNumber", "true");
    assertXPath(pDoc, "/x:worksheet/x:pageSetup", "firstPageNumber", "10");

    pDoc = XPathHelper::parseExport(pXPathFile, m_xSFactory, "xl/worksheets/sheet2.xml");
    CPPUNIT_ASSERT(pDoc);

    assertXPathNoAttribute(pDoc, "/x:worksheet/x:pageSetup", "useFirstPageNumber");
    assertXPathNoAttribute(pDoc, "/x:worksheet/x:pageSetup", "firstPageNumber");

    xDocSh->DoClose();
}

void ScExportTest::testHeaderFontStyleXLSX()
{
    ScDocShellRef xShell = loadDoc("tdf134826.", FORMAT_XLSX);
diff --git a/sc/source/filter/excel/xepage.cxx b/sc/source/filter/excel/xepage.cxx
index 3941bd1..64d671a 100644
--- a/sc/source/filter/excel/xepage.cxx
+++ b/sc/source/filter/excel/xepage.cxx
@@ -107,7 +107,6 @@ void XclExpSetup::SaveXml( XclExpXmlStream& rStrm )
        // pAttrList->add( XML_paperUnits,          "mm" );
    }
    pAttrList->add( XML_scale,              OString::number(  mrData.mnScaling ).getStr() );
    pAttrList->add( XML_firstPageNumber,    OString::number(  mrData.mnStartPage ).getStr() );
    pAttrList->add( XML_fitToWidth,         OString::number(  mrData.mnFitToWidth ).getStr() );
    pAttrList->add( XML_fitToHeight,        OString::number(  mrData.mnFitToHeight ).getStr() );
    pAttrList->add( XML_pageOrder,          mrData.mbPrintInRows ? "overThenDown" : "downThenOver" );
@@ -119,7 +118,12 @@ void XclExpSetup::SaveXml( XclExpXmlStream& rStrm )
    pAttrList->add( XML_blackAndWhite,      ToPsz( mrData.mbBlackWhite ) );
    pAttrList->add( XML_draft,              ToPsz( mrData.mbDraftQuality ) );
    pAttrList->add( XML_cellComments,       mrData.mbPrintNotes ? "atEnd" : "none" );         // OOXTODO: "asDisplayed"?
    pAttrList->add( XML_useFirstPageNumber, ToPsz( mrData.mbManualStart ) );

    if ( mrData.mbManualStart )
    {
        pAttrList->add( XML_firstPageNumber,    OString::number(  mrData.mnStartPage ).getStr() );
        pAttrList->add( XML_useFirstPageNumber, ToPsz( mrData.mbManualStart ) );
    }
    // OOXTODO: XML_errors, // == displayed|blank|dash|NA
    pAttrList->add( XML_horizontalDpi,      OString::number(  mrData.mnHorPrintRes ).getStr() );
    pAttrList->add( XML_verticalDpi,        OString::number(  mrData.mnVerPrintRes ).getStr() );