sc/inc/address.hxx | 5 sc/source/core/tool/address.cxx | 192 +++++++++++++++--------------------- sc/source/filter/excel/xeroot.cxx | 2 sc/source/filter/excel/xestream.cxx | 14 -- sc/source/filter/excel/xetable.cxx | 6 - sc/source/filter/excel/xeview.cxx | 6 - sc/source/filter/inc/xestream.hxx | 2 7 files changed, 94 insertions(+), 133 deletions(-)
New commits: commit f0152b737d9a196e83752a546154735efee5c2be Author: László Németh <laszlo.nem...@collabora.com> Date: Thu Jan 29 21:12:12 2015 +0100 tdf#88810 XLSX export: more cleanup Change-Id: I2a4ddb2e3a3ff629243dba46880b8c986dfde2dc diff --git a/sc/inc/address.hxx b/sc/inc/address.hxx index a745c73..6bf55340 100644 --- a/sc/inc/address.hxx +++ b/sc/inc/address.hxx @@ -326,9 +326,10 @@ public: ExternalInfo* pExtInfo = NULL, const css::uno::Sequence<css::sheet::ExternalLinkInfo>* pExternalLinks = NULL ); - SC_DLLPUBLIC bool TryFormat( OStringBuffer& s, sal_uInt16 nFlags = 0, + SC_DLLPUBLIC void Format( OStringBuffer& r, sal_uInt16 nFlags = 0, const ScDocument* pDocument = NULL, const Details& rDetails = detailsOOOa1) const; + SC_DLLPUBLIC OUString Format( sal_uInt16 nFlags = 0, const ScDocument* pDocument = NULL, const Details& rDetails = detailsOOOa1) const; @@ -892,8 +893,6 @@ bool ConvertDoubleRef( ScDocument* pDocument, const OUString& rRefString, /// append alpha representation of column to buffer SC_DLLPUBLIC void ScColToAlpha( OUStringBuffer& rBuffer, SCCOL nCol); -SC_DLLPUBLIC void ScColToAlpha( OStringBuffer& rBuffer, SCCOL nCol); - inline void ScColToAlpha( OUString& rStr, SCCOL nCol) { OUStringBuffer aBuf(2); diff --git a/sc/source/core/tool/address.cxx b/sc/source/core/tool/address.cxx index 36cdb92..8fd08fa 100644 --- a/sc/source/core/tool/address.cxx +++ b/sc/source/core/tool/address.cxx @@ -1672,50 +1672,93 @@ sal_uInt16 ScRange::ParseRows( const OUString& rStr, ScDocument* pDoc, return (p != NULL && *p == '\0') ? nRes : 0; } -static inline void lcl_a1_append_c ( OUStringBuffer &rString, int nCol, bool bIsAbs ) +template<typename T > static inline void lcl_ScColToAlpha( T& rBuf, SCCOL nCol ) +{ + if (nCol < 26*26) + { + if (nCol < 26) + rBuf.append( static_cast<char>( 'A' + nCol )); + else + { + rBuf.append( static_cast<char>( 'A' + nCol / 26 - 1 )); + rBuf.append( static_cast<char>( 'A' + nCol % 26 )); + } + } + else + { + sal_Int32 nInsert = rBuf.getLength(); + while (nCol >= 26) + { + SCCOL nC = nCol % 26; + rBuf.insert(nInsert, static_cast<char> ( 'A' + nC )); + nCol = sal::static_int_cast<SCCOL>( nCol - nC ); + nCol = nCol / 26 - 1; + } + rBuf.insert(nInsert, static_cast<char> ( 'A' + nCol )); + } +} + +void ScColToAlpha( OUStringBuffer& rBuf, SCCOL nCol) +{ + lcl_ScColToAlpha(rBuf, nCol); +} + +template <typename T > static inline void lcl_a1_append_c ( T &rString, int nCol, bool bIsAbs ) { if( bIsAbs ) rString.append("$"); - ScColToAlpha( rString, sal::static_int_cast<SCCOL>(nCol) ); + lcl_ScColToAlpha( rString, sal::static_int_cast<SCCOL>(nCol) ); } -static inline void lcl_a1_append_r ( OUStringBuffer &rString, int nRow, bool bIsAbs ) +static inline void lcl_string_append_number(OUStringBuffer &rString, int nNumber) +{ + rString.append(OUString::number( nNumber )); +} + +static inline void lcl_string_append_number(OStringBuffer &rString, int nNumber) +{ + rString.append(OString::number( nNumber )); +} + +template <typename T > static inline void lcl_a1_append_r ( T &rString, int nRow, bool bIsAbs ) { if ( bIsAbs ) rString.append("$"); - rString.append(OUString::number( nRow+1 )); + lcl_string_append_number(rString, nRow+1 ); } -static inline void lcl_r1c1_append_c ( OUStringBuffer &rString, int nCol, bool bIsAbs, +template <typename T > static inline void lcl_r1c1_append_c ( T &rString, int nCol, bool bIsAbs, const ScAddress::Details& rDetails ) { rString.append("C"); if (bIsAbs) { - rString.append(OUString::number( nCol + 1 )); + lcl_string_append_number(rString, nCol + 1 ); } else { nCol -= rDetails.nCol; if (nCol != 0) { - rString.append("[").append(OUString::number( nCol )).append("]"); + lcl_string_append_number(rString.append("["), nCol ); + rString.append("]"); } } } -static inline void lcl_r1c1_append_r ( OUStringBuffer &rString, int nRow, bool bIsAbs, +template <typename T > static inline void lcl_r1c1_append_r ( T &rString, int nRow, bool bIsAbs, const ScAddress::Details& rDetails ) { rString.append("R"); if (bIsAbs) { - rString.append(OUString::number( nRow + 1 )); + lcl_string_append_number(rString, nRow + 1 ); } else { nRow -= rDetails.nRow; if (nRow != 0) { - rString.append("[").append(OUString::number( nRow )).append("]"); + lcl_string_append_number(rString.append("["), nRow); + rString.append("]"); } } } @@ -1745,51 +1788,29 @@ static OUString getFileNameFromDoc( const ScDocument* pDoc ) return sFileName; } -/** Tries to obtain a simple address without OUString/OString allocation - * - * @returns TRUE at success (it is enough to call OUString Format() at FALSE) - * - */ -bool ScAddress::TryFormat(OStringBuffer& s, sal_uInt16 nFlags, const ScDocument* pDoc, - const Details& rDetails) const +static inline void lcl_string_append(OUStringBuffer &rString, const OUString &sString) { - if( nFlags & SCA_VALID ) - nFlags |= ( SCA_VALID_ROW | SCA_VALID_COL | SCA_VALID_TAB ); - if(( pDoc && (nFlags & SCA_VALID_TAB ) && ( nTab >= pDoc->GetTableCount() || ( nFlags & SCA_TAB_3D ))) || - ! (nFlags & SCA_VALID_COL) || ! (nFlags & SCA_VALID_ROW) || - (nFlags & SCA_COL_ABSOLUTE) != 0 || (nFlags & SCA_ROW_ABSOLUTE) != 0 ) - { - return false; - } + rString.append(sString); +} - switch( rDetails.eConv ) - { - default : - case formula::FormulaGrammar::CONV_OOO: - case formula::FormulaGrammar::CONV_XL_A1: - case formula::FormulaGrammar::CONV_XL_OOX: - ScColToAlpha( s, nCol ); - s.append( OString::number(nRow+1) ); - break; - case formula::FormulaGrammar::CONV_XL_R1C1: - // not used in XLSX export - return false; - } - return true; +static inline void lcl_string_append(OStringBuffer &rString, const OUString &sString) +{ + rString.append(OUStringToOString( sString, RTL_TEXTENCODING_UTF8 )); } -OUString ScAddress::Format(sal_uInt16 nFlags, const ScDocument* pDoc, - const Details& rDetails) const +template<typename T > inline void lcl_Format( T& r, SCTAB nTab, SCROW nRow, SCCOL nCol, sal_uInt16 nFlags, + const ScDocument* pDoc, + const ScAddress::Details& rDetails) { - OUStringBuffer r; if( nFlags & SCA_VALID ) nFlags |= ( SCA_VALID_ROW | SCA_VALID_COL | SCA_VALID_TAB ); if( pDoc && (nFlags & SCA_VALID_TAB ) ) { if ( nTab >= pDoc->GetTableCount() ) { - return ScGlobal::GetRscString( STR_NOREF_STR ); + lcl_string_append(r, ScGlobal::GetRscString( STR_NOREF_STR )); + return; } if( nFlags & SCA_TAB_3D ) { @@ -1820,10 +1841,10 @@ OUString ScAddress::Format(sal_uInt16 nFlags, const ScDocument* pDoc, { default : case formula::FormulaGrammar::CONV_OOO: - r.append(aDocName); + lcl_string_append(r, aDocName); if( nFlags & SCA_TAB_ABSOLUTE ) r.append("$"); - r.append(aTabName); + lcl_string_append(r, aTabName); r.append("."); break; @@ -1832,9 +1853,10 @@ OUString ScAddress::Format(sal_uInt16 nFlags, const ScDocument* pDoc, case formula::FormulaGrammar::CONV_XL_OOX: if (!aDocName.isEmpty()) { - r.append("[").append(aDocName).append("]"); + lcl_string_append(r.append("["), aDocName); + r.append("]"); } - r.append(aTabName); + lcl_string_append(r, aTabName); r.append("!"); break; } @@ -1859,6 +1881,20 @@ OUString ScAddress::Format(sal_uInt16 nFlags, const ScDocument* pDoc, lcl_r1c1_append_c ( r, nCol, (nFlags & SCA_COL_ABSOLUTE) != 0, rDetails ); break; } +} + +void ScAddress::Format( OStringBuffer& r, sal_uInt16 nFlags, + const ScDocument* pDoc, + const Details& rDetails) const +{ + lcl_Format(r, nTab, nRow, nCol, nFlags, pDoc, rDetails); +} + +OUString ScAddress::Format(sal_uInt16 nFlags, const ScDocument* pDoc, + const Details& rDetails) const +{ + OUStringBuffer r; + lcl_Format(r, nTab, nRow, nCol, nFlags, pDoc, rDetails); return r.makeStringAndClear(); } @@ -2064,7 +2100,7 @@ OUString ScAddress::GetColRowString( bool bAbsolute, if (bAbsolute) aString.append("$"); - ScColToAlpha( aString, nCol); + lcl_ScColToAlpha( aString, nCol); if ( bAbsolute ) aString.append("$"); @@ -2104,66 +2140,6 @@ OUString ScRefAddress::GetRefString( ScDocument* pDoc, SCTAB nActTab, return aAdr.Format(nFlags, pDoc, rDetails); } -void ScColToAlpha( OUStringBuffer& rBuf, SCCOL nCol ) -{ - if (nCol < 26*26) - { - if (nCol < 26) - rBuf.append( static_cast<sal_Unicode>( 'A' + - static_cast<sal_uInt16>(nCol))); - else - { - rBuf.append( static_cast<sal_Unicode>( 'A' + - (static_cast<sal_uInt16>(nCol) / 26) - 1)); - rBuf.append( static_cast<sal_Unicode>( 'A' + - (static_cast<sal_uInt16>(nCol) % 26))); - } - } - else - { - OUString aStr; - while (nCol >= 26) - { - SCCOL nC = nCol % 26; - aStr += OUString( static_cast<sal_Unicode>( 'A' + - static_cast<sal_uInt16>(nC))); - nCol = sal::static_int_cast<SCCOL>( nCol - nC ); - nCol = nCol / 26 - 1; - } - aStr += OUString(static_cast<sal_Unicode>( 'A' + - static_cast<sal_uInt16>(nCol))); - rBuf.append(comphelper::string::reverseString(aStr)); - } -} - -void ScColToAlpha( OStringBuffer& rBuf, SCCOL nCol ) -{ - if (nCol < 26*26) - { - if (nCol < 26) - rBuf.append( static_cast<char>( 'A' + nCol )); - else - { - rBuf.append( static_cast<char>( 'A' + nCol / 26 - 1 )); - rBuf.append( static_cast<char>( 'A' + nCol % 26 )); - } - } - else - { - OString aStr; - while (nCol >= 26) - { - SCCOL nC = nCol % 26; - aStr += OString( static_cast<char> ( 'A' + nC )); - nCol = sal::static_int_cast<SCCOL>( nCol - nC ); - nCol = nCol / 26 - 1; - } - aStr += OString( static_cast<char> ( 'A' + nCol )); - rBuf.append(comphelper::string::reverseString(aStr)); - } -} - - bool AlphaToCol( SCCOL& rCol, const OUString& rStr) { SCCOL nResult = 0; diff --git a/sc/source/filter/excel/xeroot.cxx b/sc/source/filter/excel/xeroot.cxx index 29f6551..96f5085 100644 --- a/sc/source/filter/excel/xeroot.cxx +++ b/sc/source/filter/excel/xeroot.cxx @@ -57,7 +57,7 @@ XclExpRootData::XclExpRootData( XclBiff eBiff, SfxMedium& rMedium, { SvtSaveOptions aSaveOpt; mbRelUrl = mrMedium.IsRemote() ? aSaveOpt.IsSaveRelINet() : aSaveOpt.IsSaveRelFSys(); - maStringBuf = OStringBuffer(10); // for simple addresses, like ABC1000000 + maStringBuf = OStringBuffer(); } XclExpRootData::~XclExpRootData() diff --git a/sc/source/filter/excel/xestream.cxx b/sc/source/filter/excel/xestream.cxx index 57792ea..48153eb 100644 --- a/sc/source/filter/excel/xestream.cxx +++ b/sc/source/filter/excel/xestream.cxx @@ -720,17 +720,10 @@ OString XclXmlUtils::ToOString( const OUString& s ) OStringBuffer& XclXmlUtils::ToOString( OStringBuffer& s, const ScAddress& rAddress ) { - if (!rAddress.TryFormat(s, SCA_VALID, NULL, ScAddress::Details( FormulaGrammar::CONV_XL_A1))) - s.append(ToOString(rAddress)); + rAddress.Format(s, SCA_VALID, NULL, ScAddress::Details( FormulaGrammar::CONV_XL_A1)); return s; } -OString XclXmlUtils::ToOString( const ScAddress& rAddress ) -{ - OUString sAddress(rAddress.Format(SCA_VALID, NULL, ScAddress::Details( FormulaGrammar::CONV_XL_A1))); - return ToOString( sAddress ); -} - OString XclXmlUtils::ToOString( const ScfUInt16Vec& rBuffer ) { if(rBuffer.empty()) @@ -772,11 +765,6 @@ OStringBuffer& XclXmlUtils::ToOString( OStringBuffer& s, const XclAddress& rAddr return ToOString( s, lcl_ToAddress( rAddress )); } -OString XclXmlUtils::ToOString( const XclAddress& rAddress ) -{ - return ToOString( lcl_ToAddress( rAddress ) ); -} - OString XclXmlUtils::ToOString( const XclExpString& s ) { OSL_ENSURE( !s.IsRich(), "XclXmlUtils::ToOString(XclExpString): rich text string found!" ); diff --git a/sc/source/filter/excel/xetable.cxx b/sc/source/filter/excel/xetable.cxx index 6f01de7..25130af 100644 --- a/sc/source/filter/excel/xetable.cxx +++ b/sc/source/filter/excel/xetable.cxx @@ -663,7 +663,7 @@ void XclExpBooleanCell::SaveXml( XclExpXmlStream& rStrm ) { sax_fastparser::FSHelperPtr& rWorksheet = rStrm.GetCurrentStream(); rWorksheet->startElement( XML_c, - XML_r, XclXmlUtils::ToOString( GetXclPos() ).getStr(), + XML_r, XclXmlUtils::ToOString( rStrm.GetRoot().GetStringBuf(), GetXclPos() ).getStr(), XML_s, lcl_GetStyleId( rStrm, *this ).getStr(), XML_t, "b", // OOXTODO: XML_cm, XML_vm, XML_ph @@ -766,7 +766,7 @@ void XclExpLabelCell::SaveXml( XclExpXmlStream& rStrm ) { sax_fastparser::FSHelperPtr& rWorksheet = rStrm.GetCurrentStream(); rWorksheet->startElement( XML_c, - XML_r, XclXmlUtils::ToOString( GetXclPos() ).getStr(), + XML_r, XclXmlUtils::ToOString( rStrm.GetRoot().GetStringBuf(), GetXclPos() ).getStr(), XML_s, lcl_GetStyleId( rStrm, *this ).getStr(), XML_t, "s", // OOXTODO: XML_cm, XML_vm, XML_ph @@ -1276,7 +1276,7 @@ void XclExpBlankCell::WriteXmlContents( XclExpXmlStream& rStrm, const XclAddress { sax_fastparser::FSHelperPtr& rWorksheet = rStrm.GetCurrentStream(); rWorksheet->singleElement( XML_c, - XML_r, XclXmlUtils::ToOString( rAddress ).getStr(), + XML_r, XclXmlUtils::ToOString( rStrm.GetRoot().GetStringBuf(), rAddress ).getStr(), XML_s, lcl_GetStyleId( rStrm, nXFId ).getStr(), FSEND ); } diff --git a/sc/source/filter/excel/xeview.cxx b/sc/source/filter/excel/xeview.cxx index faa3bb0..e3104ff 100644 --- a/sc/source/filter/excel/xeview.cxx +++ b/sc/source/filter/excel/xeview.cxx @@ -182,7 +182,7 @@ void XclExpPane::SaveXml( XclExpXmlStream& rStrm ) rStrm.GetCurrentStream()->singleElement( XML_pane, XML_xSplit, OString::number( mnSplitX ).getStr(), XML_ySplit, OString::number( mnSplitY ).getStr(), - XML_topLeftCell, XclXmlUtils::ToOString( maSecondXclPos ).getStr(), + XML_topLeftCell, XclXmlUtils::ToOString( rStrm.GetRoot().GetStringBuf(), maSecondXclPos ).getStr(), XML_activePane, lcl_GetActivePane( mnActivePane ), XML_state, mbFrozenPanes ? "frozen" : "split", FSEND ); @@ -225,7 +225,7 @@ void XclExpSelection::SaveXml( XclExpXmlStream& rStrm ) { rStrm.GetCurrentStream()->singleElement( XML_selection, XML_pane, lcl_GetActivePane( mnPane ), - XML_activeCell, XclXmlUtils::ToOString( maSelData.maXclCursor ).getStr(), + XML_activeCell, XclXmlUtils::ToOString( rStrm.GetRoot().GetStringBuf(), maSelData.maXclCursor ).getStr(), XML_activeCellId, OString::number( maSelData.mnCursorIdx ).getStr(), XML_sqref, XclXmlUtils::ToOString( maSelData.maXclSelection ).getStr(), FSEND ); @@ -426,7 +426,7 @@ void XclExpTabViewSettings::SaveXml( XclExpXmlStream& rStrm ) XML_defaultGridColor, mnGridColorId == XclExpPalette::GetColorIdFromIndex( EXC_COLOR_WINDOWTEXT ) ? "true" : "false", // OOXTODO: XML_showWhiteSpace, XML_view, maData.mbPageMode ? "pageBreakPreview" : "normal", // OOXTODO: pageLayout - XML_topLeftCell, XclXmlUtils::ToOString( maData.maFirstXclPos ).getStr(), + XML_topLeftCell, XclXmlUtils::ToOString( rStrm.GetRoot().GetStringBuf(), maData.maFirstXclPos ).getStr(), XML_colorId, OString::number( rStrm.GetRoot().GetPalette().GetColorIndex( mnGridColorId ) ).getStr(), XML_zoomScale, lcl_GetZoom( maData.mnCurrentZoom ).getStr(), XML_zoomScaleNormal, lcl_GetZoom( maData.mnNormalZoom ).getStr(), diff --git a/sc/source/filter/inc/xestream.hxx b/sc/source/filter/inc/xestream.hxx index 71aea1d..5bb2b20 100644 --- a/sc/source/filter/inc/xestream.hxx +++ b/sc/source/filter/inc/xestream.hxx @@ -268,11 +268,9 @@ public: static OString ToOString( const OUString& s ); static OString ToOString( const ScfUInt16Vec& rBuffer ); static OStringBuffer& ToOString( OStringBuffer& s, const ScAddress& rRange ); - static OString ToOString( const ScAddress& rRange ); static OString ToOString( const ScRange& rRange ); static OString ToOString( const ScRangeList& rRangeList ); static OStringBuffer& ToOString( OStringBuffer& s, const XclAddress& rAddress ); - static OString ToOString( const XclAddress& rAddress ); static OString ToOString( const XclExpString& s ); static OString ToOString( const XclRange& rRange ); static OString ToOString( const XclRangeList& rRangeList );
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits