sc/source/filter/excel/xelink.cxx | 39 +++++++++++++++----- sc/source/ui/condformat/condformatdlgentry.cxx | 47 +++++++++++++++++++++---- 2 files changed, 70 insertions(+), 16 deletions(-)
New commits: commit 9f1be6c65210e600baee5c63480df58e8b8ce7b1 Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Sat Apr 4 15:54:44 2015 +0200 save at least some of the external range name stuff to XLSX Change-Id: If08968487f62d0bc4c827bb69be25db6f9d5a0ee diff --git a/sc/source/filter/excel/xelink.cxx b/sc/source/filter/excel/xelink.cxx index ace55e4..9ea0822 100644 --- a/sc/source/filter/excel/xelink.cxx +++ b/sc/source/filter/excel/xelink.cxx @@ -63,7 +63,7 @@ private: @descr Derived classes should overwrite this function to write their data. */ virtual void WriteAddData( XclExpStream& rStrm ); -private: +protected: OUString maName; /// Calc name (title) of the external name. XclExpStringRef mxName; /// Excel name (title) of the external name. sal_uInt16 mnFlags; /// Flags for record export. @@ -104,6 +104,8 @@ public: explicit XclExpExtName( const XclExpRoot& rRoot, const XclExpSupbook& rSupbook, const OUString& rName, const ScExternalRefCache::TokenArrayRef& rArray ); + virtual void SaveXml(XclExpXmlStream& rStrm) SAL_OVERRIDE; + private: /** Writes additional record contents. */ virtual void WriteAddData( XclExpStream& rStrm ) SAL_OVERRIDE; @@ -135,6 +137,8 @@ public: /** Writes the EXTERNNAME record list. */ virtual void Save( XclExpStream& rStrm ) SAL_OVERRIDE; + virtual void SaveXml(XclExpXmlStream& rStrm) SAL_OVERRIDE; + private: typedef XclExpRecordList< XclExpExtNameBase > XclExpExtNameList; typedef XclExpExtNameList::RecordRefType XclExpExtNameRef; @@ -1045,6 +1049,19 @@ void XclExpExtName::WriteAddData( XclExpStream& rStrm ) rStrm << static_cast<sal_uInt16>(2) << EXC_TOKID_ERR << EXC_ERR_REF; } +void XclExpExtName::SaveXml(XclExpXmlStream& rStrm) +{ + sax_fastparser::FSHelperPtr pExternalLink = rStrm.GetCurrentStream(); + + pExternalLink->startElement(XML_definedName, + XML_name, XclXmlUtils::ToOString(maName).getStr(), + XML_refersTo, NULL, + XML_sheetId, NULL, + FSEND); + + pExternalLink->endElement(XML_definedName); +} + // List of external names ===================================================== XclExpExtNameBuffer::XclExpExtNameBuffer( const XclExpRoot& rRoot ) : @@ -1098,6 +1115,11 @@ void XclExpExtNameBuffer::Save( XclExpStream& rStrm ) maNameList.Save( rStrm ); } +void XclExpExtNameBuffer::SaveXml(XclExpXmlStream& rStrm) +{ + maNameList.SaveXml(rStrm); +} + sal_uInt16 XclExpExtNameBuffer::GetIndex( const OUString& rName ) const { for( size_t nPos = 0, nSize = maNameList.GetSize(); nPos < nSize; ++nPos ) diff --git a/sc/source/ui/condformat/condformatdlgentry.cxx b/sc/source/ui/condformat/condformatdlgentry.cxx index a7ea722..b89b3b0 100644 --- a/sc/source/ui/condformat/condformatdlgentry.cxx +++ b/sc/source/ui/condformat/condformatdlgentry.cxx @@ -272,6 +272,26 @@ ScFormatEntry* ScConditionFrmtEntry::createConditionEntry() const return pEntry; } +namespace { + +bool containsOnlyColumnLabel(Edit* pEdit, ScTokenArray* pArr) +{ + formula::FormulaToken* token = pArr->First(); + formula::StackVar t = token->GetType(); + OpCode op = token->GetOpCode(); + if( ( op == ocColRowName ) || + ( ( op == ocBad ) && ( t == formula::svString ) ) + ) + { + pEdit->SetControlBackground(COL_YELLOW); + return true; + } + + return false; +} + +} + IMPL_LINK(ScConditionFrmtEntry, OnEdChanged, Edit*, pEdit) { OUString aFormula = pEdit->GetText(); @@ -295,14 +315,27 @@ IMPL_LINK(ScConditionFrmtEntry, OnEdChanged, Edit*, pEdit) } // Recognized col/row name or string token, warn the user - formula::FormulaToken* token = ta->First(); - formula::StackVar t = token->GetType(); - OpCode op = token->GetOpCode(); - if( ( op == ocColRowName ) || - ( ( op == ocBad ) && ( t == formula::svString ) ) - ) + bool bContainsColumnLabel = containsOnlyColumnLabel(pEdit, ta.get());; + if (!bContainsColumnLabel) + { + ScCompiler aComp2( mpDoc, maPos ); + aComp2.SetGrammar( mpDoc->GetGrammar() ); + if (&maEdVal1 == pEdit) + { + OUString aFormula2 = maEdVal2.GetText(); + boost::scoped_ptr<ScTokenArray> pArr2(aComp2.CompileString(aFormula2)); + bContainsColumnLabel = containsOnlyColumnLabel(&maEdVal2, pArr2.get()); + } + else + { + OUString aFormula1 = maEdVal1.GetText(); + boost::scoped_ptr<ScTokenArray> pArr1(aComp2.CompileString(aFormula1)); + bContainsColumnLabel = containsOnlyColumnLabel(&maEdVal1, pArr1.get()); + } + } + + if (bContainsColumnLabel) { - pEdit->SetControlBackground(COL_YELLOW); maFtVal.SetText(ScGlobal::GetRscString(STR_UNQUOTED_STRING)); return 0; } commit de90039b9f04233a87b8dffb9a00ea3f534bc22c Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Sat Apr 4 10:33:30 2015 +0200 actually make the exported file valid, related tdf#59663 Change-Id: Icc432d6d3e40be9a6e1956c2d0c1dd2250c273a9 diff --git a/sc/source/filter/excel/xelink.cxx b/sc/source/filter/excel/xelink.cxx index 7962745..ace55e4 100644 --- a/sc/source/filter/excel/xelink.cxx +++ b/sc/source/filter/excel/xelink.cxx @@ -1389,19 +1389,18 @@ void XclExpXct::Save( XclExpStream& rStrm ) void XclExpXct::SaveXml( XclExpXmlStream& rStrm ) { XclExpCrnList aCrnRecs; - if (!BuildCrnList( aCrnRecs)) - { - SAL_WARN("sc", "generating invalid OOXML files: sheetDataSet without sheetData child element"); - return; - } sax_fastparser::FSHelperPtr pFS = rStrm.GetCurrentStream(); + bool bValid = BuildCrnList( aCrnRecs); pFS->startElement( XML_sheetData, - XML_sheetId, OString::number( mnSBTab).getStr(), + XML_sheetId, OString::number( mnSBTab).getStr(), FSEND); - // row elements - aCrnRecs.SaveXml( rStrm ); + if (bValid) + { + // row elements + aCrnRecs.SaveXml( rStrm ); + } pFS->endElement( XML_sheetData); } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits