tdf#135987 xlsx vml export: retain checkbox link to cell
The checkbox can be linked to a cell, so that the cell's value
is toggled between true and false.
This was lost on a round-trip.
Change-Id: I4f2d44a594a92caedb29ded9b2c292006c803115
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145962
Tested-by: Justin Luth <jluth@mail.com>
Reviewed-by: Justin Luth <jluth@mail.com>
diff --git a/sc/qa/unit/subsequent_export_test2.cxx b/sc/qa/unit/subsequent_export_test2.cxx
index 3093e63..81df3cb 100644
--- a/sc/qa/unit/subsequent_export_test2.cxx
+++ b/sc/qa/unit/subsequent_export_test2.cxx
@@ -1075,6 +1075,10 @@ void ScExportTest2::testTdf106181()
pDrawing,
"/xdr:wsDr/mc:AlternateContent/mc:Choice/xdr:twoCellAnchor/xdr:sp/xdr:nvSpPr/xdr:cNvPr",
"hidden", "0");
xmlDocUniquePtr pVmlDrawing = parseExport("xl/drawings/vmlDrawing1.vml");
CPPUNIT_ASSERT(pVmlDrawing);
assertXPathContent(pVmlDrawing, "//xx:ClientData/xx:FmlaLink", "$D$9");
}
void ScExportTest2::testTdf145057()
diff --git a/sc/source/filter/excel/xeescher.cxx b/sc/source/filter/excel/xeescher.cxx
index c0c15fda..4e9491c 100644
--- a/sc/source/filter/excel/xeescher.cxx
+++ b/sc/source/filter/excel/xeescher.cxx
@@ -1094,13 +1094,14 @@ class VmlFormControlExporter : public oox::vml::VMLExport
tools::Rectangle m_aAreaFrom;
tools::Rectangle m_aAreaTo;
OUString m_sControlName;
OUString m_sFmlaLink;
OUString m_aLabel;
OUString m_aMacroName;
public:
VmlFormControlExporter(const sax_fastparser::FSHelperPtr& p, sal_uInt16 nObjType,
const tools::Rectangle& rAreaFrom, const tools::Rectangle& rAreaTo,
const OUString& sControlName,
const OUString& sControlName, const OUString& sFmlaLink,
OUString aLabel, OUString aMacroName);
protected:
@@ -1115,12 +1116,14 @@ VmlFormControlExporter::VmlFormControlExporter(const sax_fastparser::FSHelperPtr
const tools::Rectangle& rAreaFrom,
const tools::Rectangle& rAreaTo,
const OUString& sControlName,
const OUString& sFmlaLink,
OUString aLabel, OUString aMacroName)
: VMLExport(p)
, m_nObjType(nObjType)
, m_aAreaFrom(rAreaFrom)
, m_aAreaTo(rAreaTo)
, m_sControlName(sControlName)
, m_sFmlaLink(sFmlaLink)
, m_aLabel(std::move(aLabel))
, m_aMacroName(std::move(aMacroName))
{
@@ -1178,6 +1181,9 @@ void VmlFormControlExporter::EndShape(sal_Int32 nShapeElement)
}
XclXmlUtils::WriteElement(pVmlDrawing, FSNS(XML_x, XML_TextVAlign), "Center");
if (!m_sFmlaLink.isEmpty())
XclXmlUtils::WriteElement(pVmlDrawing, FSNS(XML_x, XML_FmlaLink), m_sFmlaLink);
pVmlDrawing->endElement(FSNS(XML_x, XML_ClientData));
VMLExport::EndShape(nShapeElement);
}
@@ -1192,8 +1198,15 @@ void XclExpTbxControlObj::SaveVml(XclExpXmlStream& rStrm)
tools::Rectangle aAreaTo;
// Unlike XclExpTbxControlObj::SaveXml(), this is not calculated in EMUs.
lcl_GetFromTo(mrRoot, pObj->GetLogicRect(), GetTab(), aAreaFrom, aAreaTo);
const OUString sCellLink
= mxCellLinkAddress.IsValid()
? mxCellLinkAddress.Format(ScRefFlags::ADDR_ABS, &GetDoc(),
ScAddress::Details(formula::FormulaGrammar::CONV_XL_A1))
: OUString();
VmlFormControlExporter aFormControlExporter(rStrm.GetCurrentStream(), GetObjType(), aAreaFrom,
aAreaTo, msCtrlName, msLabel, GetMacroName());
aAreaTo, msCtrlName, sCellLink, msLabel, GetMacroName());
aFormControlExporter.SetSkipwzName(true); // use XML_id for legacyid, not XML_ID
aFormControlExporter.OverrideShapeIDGen(true, "_x0000_s");
aFormControlExporter.AddSdrObject(*pObj, /*bIsFollowingTextFlow=*/false, /*eHOri=*/-1,