[Libreoffice-commits] core.git: Branch 'feature/orcus-update' - sc/source

Kohei Yoshida kohei.yoshida at gmail.com
Wed Apr 10 12:03:13 PDT 2013


 sc/source/filter/inc/orcusinterface.hxx |    3 ++-
 sc/source/filter/orcus/interface.cxx    |   27 ++++++++++++++++++++++++---
 2 files changed, 26 insertions(+), 4 deletions(-)

New commits:
commit 474649a7393c5ac8288902eecabbcf3b7c75176f
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date:   Wed Apr 10 15:03:12 2013 -0400

    Properly implement date / time value import from orcus.
    
    Change-Id: Icaf310182dcdd2a5d06c2d4bcbb98e3850fb2d80

diff --git a/sc/source/filter/inc/orcusinterface.hxx b/sc/source/filter/inc/orcusinterface.hxx
index 69e123b..4cb03fa 100644
--- a/sc/source/filter/inc/orcusinterface.hxx
+++ b/sc/source/filter/inc/orcusinterface.hxx
@@ -62,7 +62,8 @@ public:
     virtual void set_string(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, size_t sindex);
     virtual void set_value(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, double value);
     virtual void set_bool(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, bool value);
-    virtual void set_date(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, const char* p, size_t n);
+    virtual void set_date_time(
+        orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, int year, int month, int day, int hour, int minute, double second);
 
     virtual void set_format(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, size_t xf_index);
 
diff --git a/sc/source/filter/orcus/interface.cxx b/sc/source/filter/orcus/interface.cxx
index 5c00e56..06d03ba 100644
--- a/sc/source/filter/orcus/interface.cxx
+++ b/sc/source/filter/orcus/interface.cxx
@@ -15,7 +15,10 @@
 #include "tokenarray.hxx"
 #include "stringutil.hxx"
 
-#include <formula/token.hxx>
+#include "formula/token.hxx"
+#include "tools/datetime.hxx"
+
+#define D_TIMEFACTOR              86400.0
 
 using orcus::spreadsheet::row_t;
 using orcus::spreadsheet::col_t;
@@ -148,9 +151,27 @@ void ScOrcusSheet::set_bool(row_t row, col_t col, bool value)
     mrDoc.SetValue(col, row, mnTab, value ? 1.0 : 0.0);
 }
 
-void ScOrcusSheet::set_date(row_t row, col_t col, const char* p, size_t n)
+void ScOrcusSheet::set_date_time(
+    row_t row, col_t col, int year, int month, int day, int hour, int minute, double second)
 {
-    set_auto(row, col, p, n);
+    SvNumberFormatter* pFormatter = mrDoc.GetFormatTable();
+
+    Date aDate(day, month, year);
+    sal_uIntPtr nSec = floor(second);
+    sal_uIntPtr nSec100 = (second - nSec) * 100;
+    Time aTime(hour, minute, nSec, nSec100);
+    Date aNullDate(*pFormatter->GetNullDate());
+    long nDateDiff = aDate - aNullDate;
+
+    double fTime =
+        static_cast<double>(aTime.Get100Sec()) / 100.0 +
+        aTime.GetSec() +
+        aTime.GetMin() * 60.0 +
+        aTime.GetHour() * 3600.0;
+
+    fTime /= D_TIMEFACTOR;
+
+    mrDoc.SetValue(col, row, mnTab, nDateDiff + fTime);
 }
 
 void ScOrcusSheet::set_format(row_t /*row*/, col_t /*col*/, size_t /*xf_index*/)


More information about the Libreoffice-commits mailing list