summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2017-09-30 20:31:34 +0200
committerEike Rathke <erack@redhat.com>2017-09-30 20:32:21 +0200
commit5374c04a89e1720490a3625dfd95406c2d60c0cd (patch)
tree1dd548ac9ff161607072f77ffbb035dbea84e3db
parent625653c8d119e720fb93b0c9f6f50d1eb625b179 (diff)
Resolves: tdf#100822 use sax::Converter::parseDateTime() for 'd' ISO 8601 date
Instead of squeezing the string through the locale dependent number parser (which should force '.' Time100SecSeparator for 'T' ISO 8601 but apparently doesn't yet) that is a bottle neck anyway. Change-Id: I70f74e680322a715c9cc658c8be033620d9798e3
-rw-r--r--sc/source/filter/oox/sheetdatabuffer.cxx19
1 files changed, 11 insertions, 8 deletions
diff --git a/sc/source/filter/oox/sheetdatabuffer.cxx b/sc/source/filter/oox/sheetdatabuffer.cxx
index 67c768c0a10a..93bfb74c473b 100644
--- a/sc/source/filter/oox/sheetdatabuffer.cxx
+++ b/sc/source/filter/oox/sheetdatabuffer.cxx
@@ -48,6 +48,7 @@
#include "documentimport.hxx"
#include "formulabuffer.hxx"
#include <numformat.hxx>
+#include <sax/tools/converter.hxx>
namespace oox {
namespace xls {
@@ -206,15 +207,17 @@ void SheetDataBuffer::setErrorCell( const CellModel& rModel, sal_uInt8 nErrorCod
void SheetDataBuffer::setDateCell( const CellModel& rModel, const OUString& rDateString )
{
- ScDocument& rDoc = getScDocument();
- SvNumberFormatter* pFormatter = rDoc.GetFormatTable();
-
- double fValue = 0.0;
- sal_uInt32 nFormatIndex = 0;
- bool bValid = pFormatter->IsNumberFormat( rDateString, nFormatIndex, fValue );
+ css::util::DateTime aDateTime;
+ if (!sax::Converter::parseDateTime( aDateTime, nullptr, rDateString))
+ {
+ SAL_WARN("sc.filter", "SheetDataBuffer::setDateCell - could not parse: " << rDateString);
+ // At least don't lose data.
+ setStringCell( rModel, rDateString);
+ return;
+ }
- if(bValid)
- setValueCell( rModel, fValue );
+ double fSerial = getUnitConverter().calcSerialFromDateTime( aDateTime);
+ setValueCell( rModel, fSerial);
}
void SheetDataBuffer::createSharedFormula(const ScAddress& rAddr, const ApiTokenSequence& rTokens)