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

Kohei Yoshida kohei at kemper.freedesktop.org
Tue Apr 10 12:09:40 PDT 2012


 sc/source/filter/excel/excform.cxx |   36 +++++++++++++++++++-----------------
 sc/source/filter/excel/read.cxx    |   12 ++++++------
 sc/source/filter/inc/imp_op.hxx    |    4 ++--
 3 files changed, 27 insertions(+), 25 deletions(-)

New commits:
commit a7f07eab97d9f52431329cb96bc1bf5ebd7da13d
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date:   Tue Apr 10 15:01:19 2012 -0400

    bnc#755775: Set numeric formula results when importing xls document.
    
    Without this, calculation upon import may incorrectly show #VALUE!
    in some cells when the iterative calculation option is turned on.
    
    This is on par with what we do during the ods document import.

diff --git a/sc/source/filter/excel/excform.cxx b/sc/source/filter/excel/excform.cxx
index 02ba65f..4fcf976 100644
--- a/sc/source/filter/excel/excform.cxx
+++ b/sc/source/filter/excel/excform.cxx
@@ -158,7 +158,9 @@ void ImportExcel::Formula(
         {
             if( eErr != ConvOK )
                 ExcelToSc::SetError( *pCell, eErr );
-            (void)fCurVal;
+
+            if (!rtl::math::isNan(fCurVal))
+                pCell->SetHybridDouble(fCurVal);
         }
 
         GetXFRangeBuffer().SetXF( aScPos, nXF );
commit ff0314bf92cd300ddedad566ab0303ddf5e95c17
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date:   Tue Apr 10 14:46:02 2012 -0400

    Method signature cleanup.
    
    Taking a reference to double makes no sense here.  Plus the bool.

diff --git a/sc/source/filter/excel/excform.cxx b/sc/source/filter/excel/excform.cxx
index 0279b41..02ba65f 100644
--- a/sc/source/filter/excel/excform.cxx
+++ b/sc/source/filter/excel/excform.cxx
@@ -111,8 +111,8 @@ void ImportExcel::Formula4()
 }
 
 
-void ImportExcel::Formula( const XclAddress& rXclPos,
-    sal_uInt16 nXF, sal_uInt16 nFormLen, double& rCurVal, sal_Bool bShrFmla )
+void ImportExcel::Formula(
+    const XclAddress& rXclPos, sal_uInt16 nXF, sal_uInt16 nFormLen, double fCurVal, bool bShrFmla)
 {
     ConvErr eErr = ConvOK;
 
@@ -158,7 +158,7 @@ void ImportExcel::Formula( const XclAddress& rXclPos,
         {
             if( eErr != ConvOK )
                 ExcelToSc::SetError( *pCell, eErr );
-            (void)rCurVal;
+            (void)fCurVal;
         }
 
         GetXFRangeBuffer().SetXF( aScPos, nXF );
diff --git a/sc/source/filter/inc/imp_op.hxx b/sc/source/filter/inc/imp_op.hxx
index 57a3374..fc56de7 100644
--- a/sc/source/filter/inc/imp_op.hxx
+++ b/sc/source/filter/inc/imp_op.hxx
@@ -184,8 +184,8 @@ protected:
     void                    Bof5( void );                   // 0x0809
 
     // ---------------------------------------------------------------
-    void                    Formula( const XclAddress& rXclPos,
-                                sal_uInt16 nXF, sal_uInt16 nFormLen, double &rCurVal, sal_Bool bShrFmla );
+    void Formula(
+        const XclAddress& rXclPos, sal_uInt16 nXF, sal_uInt16 nFormLen, double fCurVal, bool bShrFmla);
                                             //      -> excform.cxx
 
     virtual void            EndSheet( void );
commit 8bc22acaa0825c734e4f2dda177ad93b61b488a2
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date:   Tue Apr 10 14:28:00 2012 -0400

    Zelle->Cell, Ergebnis->Result and bit of cleanup.

diff --git a/sc/source/filter/excel/excform.cxx b/sc/source/filter/excel/excform.cxx
index c5d2228..0279b41 100644
--- a/sc/source/filter/excel/excform.cxx
+++ b/sc/source/filter/excel/excform.cxx
@@ -120,25 +120,25 @@ void ImportExcel::Formula( const XclAddress& rXclPos,
     if( GetAddressConverter().ConvertAddress( aScPos, rXclPos, GetCurrScTab(), true ) )
     {
         // Formula will be read next, length in nFormLen
-        const ScTokenArray* pErgebnis = 0;
-        sal_Bool                bConvert;
+        const ScTokenArray* pResult = NULL;
+        bool bConvert = false;
 
         pFormConv->Reset( aScPos );
 
         if( bShrFmla )
-            bConvert = !pFormConv->GetShrFmla( pErgebnis, maStrm, nFormLen );
+            bConvert = !pFormConv->GetShrFmla( pResult, maStrm, nFormLen );
         else
-            bConvert = sal_True;
+            bConvert = true;
 
         if( bConvert )
-            eErr = pFormConv->Convert( pErgebnis, maStrm, nFormLen, true, FT_CellFormula);
+            eErr = pFormConv->Convert( pResult, maStrm, nFormLen, true, FT_CellFormula);
 
-        ScFormulaCell*      pZelle = NULL;
+        ScFormulaCell* pCell = NULL;
 
-        if( pErgebnis )
+        if (pResult)
         {
-            pZelle = new ScFormulaCell( pD, aScPos, pErgebnis );
-            pD->PutCell( aScPos.Col(), aScPos.Row(), aScPos.Tab(), pZelle, true );
+            pCell = new ScFormulaCell( pD, aScPos, pResult );
+            pD->PutCell( aScPos.Col(), aScPos.Row(), aScPos.Tab(), pCell, true );
         }
         else
         {
@@ -148,16 +148,16 @@ void ImportExcel::Formula( const XclAddress& rXclPos,
             if( eCellType == CELLTYPE_FORMULA )
             {
                 pD->GetCell( aScPos.Col(), aScPos.Row(), aScPos.Tab(), pBaseCell );
-                pZelle = ( ScFormulaCell* ) pBaseCell;
-                if( pZelle )
-                    pZelle->AddRecalcMode( RECALCMODE_ONLOAD_ONCE );
+                pCell = ( ScFormulaCell* ) pBaseCell;
+                if( pCell )
+                    pCell->AddRecalcMode( RECALCMODE_ONLOAD_ONCE );
             }
         }
 
-        if( pZelle )
+        if (pCell)
         {
             if( eErr != ConvOK )
-                ExcelToSc::SetError( *pZelle, eErr );
+                ExcelToSc::SetError( *pCell, eErr );
             (void)rCurVal;
         }
 
commit 65775b4e3fc7485ce42842abdd36eddc197bcd1d
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date:   Tue Apr 10 14:19:18 2012 -0400

    Let's use constants instead of raw values to make them more traceable.

diff --git a/sc/source/filter/excel/read.cxx b/sc/source/filter/excel/read.cxx
index 4f0ce42..08b56bc 100644
--- a/sc/source/filter/excel/read.cxx
+++ b/sc/source/filter/excel/read.cxx
@@ -664,9 +664,9 @@ FltError ImportExcel::Read( void )
                     case EXC_ID3_BOOLERR:       ReadBoolErr();          break;
                     case EXC_ID_RK:             ReadRk();               break;
 
-                    case 0x0006:
-                    case 0x0206:
-                    case 0x0406:  Formula25(); break;
+                    case EXC_ID2_FORMULA:
+                    case EXC_ID3_FORMULA:
+                    case EXC_ID4_FORMULA:       Formula25(); break;
                     case 0x0A:  Eof(); eAkt = Z_Biff5E;                 break;
                     case 0x14:
                     case 0x15:  rPageSett.ReadHeaderFooter( maStrm );   break;
@@ -1184,9 +1184,9 @@ FltError ImportExcel8::Read( void )
                     case EXC_ID3_BOOLERR:       ReadBoolErr();          break;
                     case EXC_ID_RK:             ReadRk();               break;
 
-                    case 0x0006:
-                    case 0x0206:
-                    case 0x0406:    Formula25();            break;  // FORMULA      [ 2  5   ]
+                    case EXC_ID2_FORMULA:
+                    case EXC_ID3_FORMULA:
+                    case EXC_ID4_FORMULA:       Formula25();            break;
                     case 0x000C:    Calccount();            break;  // CALCCOUNT
                     case 0x0010:    Delta();                break;  // DELTA
                     case 0x0011:    Iteration();            break;  // ITERATION


More information about the Libreoffice-commits mailing list