[Libreoffice-commits] .: 9 commits - sc/source

Jan Holesovsky kendy at kemper.freedesktop.org
Tue Nov 16 00:41:42 PST 2010


 sc/source/core/data/documen4.cxx     |    7 ++++++-
 sc/source/core/data/dptablecache.cxx |   18 ++++++++++++++----
 sc/source/filter/xcl97/xcl97rec.cxx  |    2 +-
 sc/source/ui/view/output2.cxx        |   13 +++++++++++--
 4 files changed, 32 insertions(+), 8 deletions(-)

New commits:
commit a5630fbea3e95775e717a437b8da23a7736de816
Merge: d56e3d0... 5a946db...
Author: Jan Holesovsky <kendy at suse.cz>
Date:   Tue Nov 16 09:17:30 2010 +0100

    Merge remote branch 'origin/libreoffice-3-3'
    
    Conflicts:
    	sc/source/core/data/dptablecache.cxx

diff --cc sc/source/core/data/dptablecache.cxx
index b9cdbe8,bc97696..d4a3e1b
--- a/sc/source/core/data/dptablecache.cxx
+++ b/sc/source/core/data/dptablecache.cxx
@@@ -29,10 -29,9 +29,9 @@@
   * for a copy of the LGPLv3 License.
   *
   ************************************************************************/
 - // MARKER(update_precomp.py): autogen include statement, do not remove
 +// MARKER(update_precomp.py): autogen include statement, do not remove
  #include "precompiled_sc.hxx"
 -// INCLUDE ---------------------------------------------------------------
 +
- // INCLUDE ---------------------------------------------------------------
  #include "dptablecache.hxx"
  #include "document.hxx"
  #include "cell.hxx"
@@@ -51,6 -49,6 +50,7 @@@
  #include <com/sun/star/sdbc/XRowSet.hpp>
  #include <com/sun/star/sdbc/XResultSetMetaData.hpp>
  #include <com/sun/star/sdbc/XResultSetMetaDataSupplier.hpp>
++
  const double D_TIMEFACTOR = 86400.0;
  
  using namespace ::com::sun::star;
@@@ -191,7 -202,11 +191,10 @@@ ScDPItemData::ScDPItemData( ScDocument
      ScBaseCell* pCell = pDoc->GetCell( aPos );
  
      if ( pCell && pCell->GetCellType() == CELLTYPE_FORMULA && ((ScFormulaCell*)pCell)->GetErrCode() )
+     {
 -        SetString ( aDocStr );      //[SODC_19347] add liyi
 -        //bErr = TRUE;              //[SODC_19347] del liyi
 +        SetString ( aDocStr );
+         mbFlag |= MK_ERR;
+     }
      else if ( pDoc->HasValueData( nCol, nRow, nDocTab ) )
      {
          double fVal = pDoc->GetValue(ScAddress(nCol, nRow, nDocTab));
@@@ -612,173 -649,182 +615,180 @@@ ULONG ScDPTableDataCache::GetDimNumType
          return GetNumType(mpTableDataValues[nDim][0]->nNumFormat);
  }
  
 -// -----------------------------------------------------------------------
 -bool ScDPTableDataCache::ValidQuery( SCROW nRow, const ScQueryParam &rParam, BOOL *pSpecial) 
 +bool ScDPTableDataCache::ValidQuery( SCROW nRow, const ScQueryParam &rParam, bool *pSpecial)
  { //Copied and modified from ScTable::ValidQuery
 -        if (!rParam.GetEntry(0).bDoQuery)
 -            return TRUE;
 -        BOOL	bMatchWholeCell = mpDoc->GetDocOptions().IsMatchWholeCell();
 -    
 -        //---------------------------------------------------------------
 -
 -        const SCSIZE nFixedBools = 32;
 -        BOOL aBool[nFixedBools];
 -        BOOL aTest[nFixedBools];
 -        SCSIZE nEntryCount = rParam.GetEntryCount();
 -        BOOL* pPasst = ( nEntryCount <= nFixedBools ? &aBool[0] : new BOOL[nEntryCount] );
 -        BOOL* pTest = ( nEntryCount <= nFixedBools ? &aTest[0] : new BOOL[nEntryCount] );
 -
 -        long	nPos = -1;
 -        SCSIZE	i	 = 0;
 -        CollatorWrapper* pCollator = (rParam.bCaseSens ? ScGlobal::GetCaseCollator() :
 -            ScGlobal::GetCollator() );
 -        ::utl::TransliterationWrapper* pTransliteration = (rParam.bCaseSens ?
 -            ScGlobal::GetCaseTransliteration() : ScGlobal::GetpTransliteration());
 -
 -        while ( (i < nEntryCount) && rParam.GetEntry(i).bDoQuery )
 +    if (!rParam.GetEntry(0).bDoQuery)
 +        return true;
-     bool    bMatchWholeCell = mpDoc->GetDocOptions().IsMatchWholeCell();
++    bool bMatchWholeCell = mpDoc->GetDocOptions().IsMatchWholeCell();
 +
 +    //---------------------------------------------------------------
 +
 +    const SCSIZE nFixedBools = 32;
 +    bool aBool[nFixedBools];
 +    bool aTest[nFixedBools];
 +    SCSIZE nEntryCount = rParam.GetEntryCount();
 +    bool* pPasst = ( nEntryCount <= nFixedBools ? &aBool[0] : new bool[nEntryCount] );
 +    bool* pTest = ( nEntryCount <= nFixedBools ? &aTest[0] : new bool[nEntryCount] );
 +
 +    long    nPos = -1;
 +    SCSIZE  i    = 0;
 +    CollatorWrapper* pCollator = (rParam.bCaseSens ? ScGlobal::GetCaseCollator() :
 +                                  ScGlobal::GetCollator() );
 +    ::utl::TransliterationWrapper* pTransliteration = (rParam.bCaseSens ?
 +                                                       ScGlobal::GetCaseTransliteration() : ScGlobal::GetpTransliteration());
 +
 +    while ((i < nEntryCount) && rParam.GetEntry(i).bDoQuery)
 +    {
 +        ScQueryEntry& rEntry = rParam.GetEntry(i);
 +        // we can only handle one single direct query
-         SCROW nId = GetItemDataId( (SCCOL)rEntry.nField, nRow, false );
-         const ScDPItemData* pCellData = GetItemDataById(  (SCCOL)rEntry.nField, nId);
++        // #i115431# nField in QueryParam is the sheet column, not the field within the source range
++        SCCOL nQueryCol = (SCCOL)rEntry.nField;
++        if ( nQueryCol < rParam.nCol1 )
++            nQueryCol = rParam.nCol1;
++        if ( nQueryCol > rParam.nCol2 )
++            nQueryCol = rParam.nCol2;
++        SCCOL nSourceField = nQueryCol - rParam.nCol1;
++        SCROW nId = GetItemDataId( nSourceField, nRow, FALSE );
++        const ScDPItemData* pCellData = GetItemDataById( nSourceField, nId );
 +
 +        bool bOk = false;
 +        bool bTestEqual = false;
 +
 +        if (pSpecial && pSpecial[i])
          {
 -            ScQueryEntry& rEntry = rParam.GetEntry(i);
 -            // we can only handle one single direct query
 -            // #i115431# nField in QueryParam is the sheet column, not the field within the source range
 -            SCCOL nQueryCol = (SCCOL)rEntry.nField;
 -            if ( nQueryCol < rParam.nCol1 )
 -                nQueryCol = rParam.nCol1;
 -            if ( nQueryCol > rParam.nCol2 )
 -                nQueryCol = rParam.nCol2;
 -            SCCOL nSourceField = nQueryCol - rParam.nCol1;
 -            SCROW nId = GetItemDataId( nSourceField, nRow, FALSE ); 
 -            const ScDPItemData* pCellData = GetItemDataById( nSourceField, nId ); 
 -
 -            BOOL bOk = FALSE;
 -            BOOL bTestEqual = FALSE;
 -
 -            if ( pSpecial && pSpecial[i] )
 +            if (rEntry.nVal == SC_EMPTYFIELDS)
 +                bOk = ! pCellData->IsHasData();
 +            else // if (rEntry.nVal == SC_NONEMPTYFIELDS)
 +                bOk =  pCellData->IsHasData();
 +        }
 +        else if (!rEntry.bQueryByString && pCellData->IsValue())
 +        {   // by Value
 +            double nCellVal = pCellData->GetValue();
 +
 +            switch (rEntry.eOp)
              {
 -                if (rEntry.nVal == SC_EMPTYFIELDS)
 -                    bOk = ! pCellData->IsHasData();
 -                else // if (rEntry.nVal == SC_NONEMPTYFIELDS)
 -                    bOk =  pCellData->IsHasData();
 +                case SC_EQUAL :
 +                    bOk = ::rtl::math::approxEqual( nCellVal, rEntry.nVal );
 +                    break;
 +                case SC_LESS :
 +                    bOk = (nCellVal < rEntry.nVal) && !::rtl::math::approxEqual( nCellVal, rEntry.nVal );
 +                    break;
 +                case SC_GREATER :
 +                    bOk = (nCellVal > rEntry.nVal) && !::rtl::math::approxEqual( nCellVal, rEntry.nVal );
 +                    break;
 +                case SC_LESS_EQUAL :
 +                    bOk = (nCellVal < rEntry.nVal) || ::rtl::math::approxEqual( nCellVal, rEntry.nVal );
 +                    break;
 +                case SC_GREATER_EQUAL :
 +                    bOk = (nCellVal > rEntry.nVal) || ::rtl::math::approxEqual( nCellVal, rEntry.nVal );
 +                    break;
 +                case SC_NOT_EQUAL :
 +                    bOk = !::rtl::math::approxEqual( nCellVal, rEntry.nVal );
 +                    break;
 +                default:
 +                    bOk= false;
 +                    break;
              }
 -            else if ( !rEntry.bQueryByString && pCellData->IsValue() )
 -            {	// by Value
 -                double nCellVal = pCellData->GetValue();
 -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
 -                switch (rEntry.eOp)
 -                {
 -                    case SC_EQUAL :
 -                        bOk = ::rtl::math::approxEqual( nCellVal, rEntry.nVal );
 -                        break;
 -                    case SC_LESS :
 -                        bOk = (nCellVal < rEntry.nVal) && !::rtl::math::approxEqual( nCellVal, rEntry.nVal );
 -                        break;
 -                    case SC_GREATER :
 -                        bOk = (nCellVal > rEntry.nVal) && !::rtl::math::approxEqual( nCellVal, rEntry.nVal );
 -                        break;
 -                    case SC_LESS_EQUAL :
 -                        bOk = (nCellVal < rEntry.nVal) || ::rtl::math::approxEqual( nCellVal, rEntry.nVal );
 -                        break;
 -                    case SC_GREATER_EQUAL :
 -                        bOk = (nCellVal > rEntry.nVal) || ::rtl::math::approxEqual( nCellVal, rEntry.nVal );
 -                        break;
 -                    case SC_NOT_EQUAL :
 -                        bOk = !::rtl::math::approxEqual( nCellVal, rEntry.nVal );
 -                        break;
 -                                 default:
 -                                    bOk= FALSE;
 -                                    break;
 -                }
 -            }
 -            else if ( (rEntry.eOp == SC_EQUAL || rEntry.eOp == SC_NOT_EQUAL)
 -                    || (rEntry.bQueryByString
 -                        && pCellData->HasStringData() )
 +        }
 +        else if ((rEntry.eOp == SC_EQUAL || rEntry.eOp == SC_NOT_EQUAL)
 +                 || (rEntry.bQueryByString
 +                     && pCellData->HasStringData() )
                  )
 -            {	// by String
 -                String	aCellStr = pCellData->GetString();
 +        {   // by String
 +            String  aCellStr = pCellData->GetString();
  
 -                BOOL bRealRegExp = (rParam.bRegExp && ((rEntry.eOp == SC_EQUAL)
 -                    || (rEntry.eOp == SC_NOT_EQUAL)));
 -                BOOL bTestRegExp = FALSE;
 -                if ( bRealRegExp || bTestRegExp )
 -                {
 -                    xub_StrLen nStart = 0;
 -                    xub_StrLen nEnd   = aCellStr.Len();
 -                    BOOL bMatch = (BOOL) rEntry.GetSearchTextPtr( rParam.bCaseSens )
 -                        ->SearchFrwrd( aCellStr, &nStart, &nEnd );
 -                    // from 614 on, nEnd is behind the found text
 -                    if ( bMatch && bMatchWholeCell
 -                            && (nStart != 0 || nEnd != aCellStr.Len()) )
 -                        bMatch = FALSE;    // RegExp must match entire cell string
 -                    if ( bRealRegExp )
 -                        bOk = ((rEntry.eOp == SC_NOT_EQUAL) ? !bMatch : bMatch);
 -                    else
 -                        bTestEqual = bMatch;
 -                }
 -                if ( !bRealRegExp )
 +            bool bRealRegExp = (rParam.bRegExp && ((rEntry.eOp == SC_EQUAL)
 +                                                   || (rEntry.eOp == SC_NOT_EQUAL)));
 +            bool bTestRegExp = false;
 +            if (bRealRegExp || bTestRegExp)
 +            {
 +                xub_StrLen nStart = 0;
 +                xub_StrLen nEnd   = aCellStr.Len();
 +                bool bMatch = (bool) rEntry.GetSearchTextPtr( rParam.bCaseSens )
 +                              ->SearchFrwrd( aCellStr, &nStart, &nEnd );
 +                // from 614 on, nEnd is behind the found text
 +                if (bMatch && bMatchWholeCell
 +                    && (nStart != 0 || nEnd != aCellStr.Len()))
 +                    bMatch = false;    // RegExp must match entire cell string
 +                if (bRealRegExp)
 +                    bOk = ((rEntry.eOp == SC_NOT_EQUAL) ? !bMatch : bMatch);
 +                else
 +                    bTestEqual = bMatch;
 +            }
 +            if (!bRealRegExp)
 +            {
 +                if (rEntry.eOp == SC_EQUAL || rEntry.eOp == SC_NOT_EQUAL)
                  {
 -                    if ( rEntry.eOp == SC_EQUAL || rEntry.eOp == SC_NOT_EQUAL )
 +                    if (bMatchWholeCell)
                      {
 -                        if ( bMatchWholeCell )
 +                        bOk = pTransliteration->isEqual( aCellStr, *rEntry.pStr );
 +                        //Added by zhaosz,for sodc_2702,20060808
 +                        String aStr = *rEntry.pStr;//"f*"
 +                        //modified by weihuaw,for SODC_16698
 +                        //use another way to find "*" in aStr
 +                        sal_Bool bHasStar = sal_False;
 +                        xub_StrLen nIndex;
 +                        if (( nIndex = aStr.Search('*') ) != STRING_NOTFOUND)
 +                            bHasStar = sal_True;
 +                        if (bHasStar && (nIndex>0))
                          {
 -                                        bOk = pTransliteration->isEqual( aCellStr, *rEntry.pStr );
 -                            //Added by zhaosz,for sodc_2702,20060808
 -                            String aStr = *rEntry.pStr;//"f*"
 -                            //modified by weihuaw,for SODC_16698
 -                            //use another way to find "*" in aStr
 -                            sal_Bool bHasStar = sal_False;
 -                            xub_StrLen nIndex;
 -                            if( ( nIndex = aStr.Search('*') ) != STRING_NOTFOUND )
 -                                bHasStar = sal_True;
 -                            if(bHasStar && (nIndex>0))
 +                            for (i=0;(i<nIndex) && (i< aCellStr.Len()) ; i++)
                              {
 -                                for(i=0;(i<nIndex) && (i< aCellStr.Len()) ; i++)
 +                                if (aCellStr.GetChar( (USHORT)i ) == aStr.GetChar((USHORT) i ))
                                  {
 -                                    if(aCellStr.GetChar( (USHORT)i ) == aStr.GetChar((USHORT) i ))
 -                                    {
 -                                        bOk=1;
 -                                    }
 -                                    else
 -                                    {
 -                                        bOk=0;
 -                                        break;
 -                                    }
 +                                    bOk=1;
 +                                }
 +                                else
 +                                {
 +                                    bOk=0;
 +                                    break;
                                  }
                              }
 -                            //end modified
 -                            //Added end,20060808
 -                        }
 -                        else
 -                        {
 -                            ::com::sun::star::uno::Sequence< sal_Int32 > xOff;
 -                            String aCell( pTransliteration->transliterate(
 -                                aCellStr, ScGlobal::eLnge, 0, aCellStr.Len(),
 -                                &xOff ) );
 -                            String aQuer( pTransliteration->transliterate(
 -                                *rEntry.pStr, ScGlobal::eLnge, 0, rEntry.pStr->Len(),
 -                                &xOff ) );
 -                            bOk = (aCell.Search( aQuer ) != STRING_NOTFOUND);
                          }
 -                        if ( rEntry.eOp == SC_NOT_EQUAL )
 -                            bOk = !bOk;
 +                        //end modified
 +                        //Added end,20060808
                      }
                      else
 -                    {   // use collator here because data was probably sorted
 -                        sal_Int32 nCompare = pCollator->compareString(
 -                            aCellStr, *rEntry.pStr );
 -                        switch (rEntry.eOp)
 -                        {
 -                            case SC_LESS :
 -                                bOk = (nCompare < 0);
 -                                break;
 -                            case SC_GREATER :
 -                                bOk = (nCompare > 0);
 -                                break;
 -                            case SC_LESS_EQUAL :
 -                                bOk = (nCompare <= 0);
 -                                break;
 -                            case SC_GREATER_EQUAL :
 -                                bOk = (nCompare >= 0);
 -                                break;
 -                            case SC_NOT_EQUAL:
 -                                DBG_ASSERT( false , "SC_NOT_EQUAL");
 -                                break;
 -                            case SC_TOPVAL:
 -                            case SC_BOTVAL:
 -                            case SC_TOPPERC:
 -                            case SC_BOTPERC:
 -                            default:
 -                                break;
 -                        }
 +                    {
 +                        ::com::sun::star::uno::Sequence< sal_Int32 > xOff;
 +                        String aCell( pTransliteration->transliterate(
 +                                                                     aCellStr, ScGlobal::eLnge, 0, aCellStr.Len(),
 +                                                                     &xOff ) );
 +                        String aQuer( pTransliteration->transliterate(
 +                                                                     *rEntry.pStr, ScGlobal::eLnge, 0, rEntry.pStr->Len(),
 +                                                                     &xOff ) );
 +                        bOk = (aCell.Search( aQuer ) != STRING_NOTFOUND);
 +                    }
 +                    if (rEntry.eOp == SC_NOT_EQUAL)
 +                        bOk = !bOk;
 +                }
 +                else
 +                {   // use collator here because data was probably sorted
 +                    sal_Int32 nCompare = pCollator->compareString(
 +                                                                 aCellStr, *rEntry.pStr );
 +                    switch (rEntry.eOp)
 +                    {
 +                        case SC_LESS :
 +                            bOk = (nCompare < 0);
 +                            break;
 +                        case SC_GREATER :
 +                            bOk = (nCompare > 0);
 +                            break;
 +                        case SC_LESS_EQUAL :
 +                            bOk = (nCompare <= 0);
 +                            break;
 +                        case SC_GREATER_EQUAL :
 +                            bOk = (nCompare >= 0);
 +                            break;
 +                        case SC_NOT_EQUAL:
 +                            DBG_ASSERT( false , "SC_NOT_EQUAL");
 +                            break;
 +                        case SC_TOPVAL:
 +                        case SC_BOTVAL:
 +                        case SC_TOPPERC:
 +                        case SC_BOTPERC:
 +                        default:
 +                            break;
                      }
                  }
              }
commit 5a946db883d73807253caafa44d197f7acfb48da
Merge: b4feaa9... b6ea51b...
Author: Jan Holesovsky <kendy at suse.cz>
Date:   Tue Nov 16 09:00:38 2010 +0100

    Merge commit 'ooo/OOO330_m15' into libreoffice-3-3

commit b4feaa937670e58b2a0a6209c0f76674af35dea4
Merge: 8f416ac... 4b11ada...
Author: Tor Lillqvist <tml at hemulen.(none)>
Date:   Fri Nov 12 15:07:18 2010 +0200

    Merge branch 'feature/pptx-export-ooxml11' into libreoffice-3-3

commit b6ea51bd625595ff923a1695b2137e476aaa0d52
Merge: c74ef57... e89b22d...
Author: obo <obo at openoffice.org>
Date:   Fri Nov 12 07:50:26 2010 +0100

    CWS-TOOLING: integrate CWS calc63

commit e89b22dab8ee99c494150d5ccd1f78ba0c8fe502
Author: Niklas Nebel <nn at openoffice.org>
Date:   Thu Nov 11 13:13:58 2010 +0100

    calc63: #i115512# RoundValueAsShown: don't round to -1 digits for unlimited precision

diff --git a/sc/source/core/data/documen4.cxx b/sc/source/core/data/documen4.cxx
index cbd55fd..d2cbca2 100644
--- a/sc/source/core/data/documen4.cxx
+++ b/sc/source/core/data/documen4.cxx
@@ -505,7 +505,7 @@ double ScDocument::RoundValueAsShown( double fVal, ULONG nFormat )
       && nType != NUMBERFORMAT_TIME && nType != NUMBERFORMAT_DATETIME )
     {
         short nPrecision;
-        if ( nFormat )
+        if ((nFormat % SV_COUNTRY_LANGUAGE_OFFSET) != 0)
         {
             nPrecision = (short)GetFormatTable()->GetFormatPrecision( nFormat );
             switch ( nType )
@@ -524,7 +524,12 @@ double ScDocument::RoundValueAsShown( double fVal, ULONG nFormat )
             }
         }
         else
+        {
             nPrecision = (short)GetDocOptions().GetStdPrecision();
+            // #i115512# no rounding for automatic decimals
+            if (nPrecision == static_cast<short>(SvNumberFormatter::UNLIMITED_PRECISION))
+                return fVal;
+        }
         double fRound = ::rtl::math::round( fVal, nPrecision );
         if ( ::rtl::math::approxEqual( fVal, fRound ) )
             return fVal;		// durch Rundung hoechstens Fehler
commit c74ef5767ef2f670aab7401bb331bf8a0ba83c17
Merge: 2d9884e... a92726b...
Author: obo <obo at openoffice.org>
Date:   Tue Nov 9 12:20:56 2010 +0100

    CWS-TOOLING: integrate CWS calc62

commit a92726be8f251b1cd4d8c0c9413308ee3011ef55
Author: Niklas Nebel <nn at openoffice.org>
Date:   Mon Nov 8 17:59:01 2010 +0100

    calc62: #i115431# if #VALUE! doesn't fit into the cell, always use hashes

diff --git a/sc/source/ui/view/output2.cxx b/sc/source/ui/view/output2.cxx
index e26056b..aff5a5a 100644
--- a/sc/source/ui/view/output2.cxx
+++ b/sc/source/ui/view/output2.cxx
@@ -529,9 +529,18 @@ void ScDrawStringsVars::SetTextToWidthOrHash( ScBaseCell* pCell, long nWidth )
         // must be a value or formula cell.
         return;
 
-    if (eType == CELLTYPE_FORMULA && !static_cast<ScFormulaCell*>(pCell)->IsValue())
+    if (eType == CELLTYPE_FORMULA)
+    {
+        ScFormulaCell* pFCell = static_cast<ScFormulaCell*>(pCell);
+        if (pFCell->GetErrCode() != 0)
+        {
+            SetHashText();      // If the error string doesn't fit, always use "###"
+            return;
+        }
         // If it's formula, the result must be a value.
-        return;
+        if (!pFCell->IsValue())
+            return;
+    }
 
     ULONG nFormat = GetValueFormat();
     if ((nFormat % SV_COUNTRY_LANGUAGE_OFFSET) != 0)
commit e939353f9c1486f149a481b25a2c57103189c9bb
Author: Niklas Nebel <nn at openoffice.org>
Date:   Mon Nov 8 16:24:12 2010 +0100

    calc62: #i115431# treat DataPilot filter field numbers as relative to the sheet, set MK_ERR bit for errors

diff --git a/sc/source/core/data/dptablecache.cxx b/sc/source/core/data/dptablecache.cxx
old mode 100755
new mode 100644
index f350e86..4f445e8
--- a/sc/source/core/data/dptablecache.cxx
+++ b/sc/source/core/data/dptablecache.cxx
@@ -201,8 +201,11 @@ ScDPItemData::ScDPItemData( ScDocument* pDoc, SCROW nRow, USHORT nCol, USHORT nD
     ScBaseCell* pCell = pDoc->GetCell( aPos );
 
     if ( pCell && pCell->GetCellType() == CELLTYPE_FORMULA && ((ScFormulaCell*)pCell)->GetErrCode() )
+    {
         SetString ( aDocStr );      //[SODC_19347] add liyi
         //bErr = TRUE;              //[SODC_19347] del liyi
+        mbFlag |= MK_ERR;
+    }
     else if ( pDoc->HasValueData( nCol, nRow, nDocTab ) )
     {
         double fVal = pDoc->GetValue(ScAddress(nCol, nRow, nDocTab));
@@ -672,8 +675,15 @@ bool ScDPTableDataCache::ValidQuery( SCROW nRow, const ScQueryParam &rParam, BOO
         {
             ScQueryEntry& rEntry = rParam.GetEntry(i);
             // we can only handle one single direct query
-            SCROW nId = GetItemDataId( (SCCOL)rEntry.nField, nRow, FALSE ); 
-            const ScDPItemData* pCellData = GetItemDataById(  (SCCOL)rEntry.nField, nId); 
+            // #i115431# nField in QueryParam is the sheet column, not the field within the source range
+            SCCOL nQueryCol = (SCCOL)rEntry.nField;
+            if ( nQueryCol < rParam.nCol1 )
+                nQueryCol = rParam.nCol1;
+            if ( nQueryCol > rParam.nCol2 )
+                nQueryCol = rParam.nCol2;
+            SCCOL nSourceField = nQueryCol - rParam.nCol1;
+            SCROW nId = GetItemDataId( nSourceField, nRow, FALSE ); 
+            const ScDPItemData* pCellData = GetItemDataById( nSourceField, nId ); 
 
             BOOL bOk = FALSE;
             BOOL bTestEqual = FALSE;
commit 4b11adaf8ae282636c1a7f400485dca90c7f8f3a
Author: Tor Lillqvist <tlillqvist at novell.com>
Date:   Sun Nov 7 23:14:30 2010 +0200

    Fix compilation error

diff --git a/sc/source/filter/xcl97/xcl97rec.cxx b/sc/source/filter/xcl97/xcl97rec.cxx
index 6564c7a..921e58a 100644
--- a/sc/source/filter/xcl97/xcl97rec.cxx
+++ b/sc/source/filter/xcl97/xcl97rec.cxx
@@ -1031,7 +1031,7 @@ void XclObjAny::SaveXml( XclExpXmlStream& rStrm )
 
     sax_fastparser::FSHelperPtr pDrawing = rStrm.GetCurrentStream();
 
-    ShapeExport aDML( XML_xdr, pDrawing, &rStrm, DrawingML::DOCUMENT_XLSX );
+    ShapeExport aDML( XML_xdr, pDrawing, NULL, &rStrm, DrawingML::DOCUMENT_XLSX );
 
     pDrawing->startElement( FSNS( XML_xdr, XML_twoCellAnchor ), // OOXTODO: oneCellAnchor, absoluteAnchor
             XML_editAs, GetEditAs( *this ),


More information about the Libreoffice-commits mailing list