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.yosh...@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*/) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits