Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 :
21 : #include "xmloff/numehelp.hxx"
22 :
23 : #include <xmloff/nmspmap.hxx>
24 : #include "xmloff/xmlnmspe.hxx"
25 : #include <xmloff/xmluconv.hxx>
26 : #include <xmloff/xmltoken.hxx>
27 : #include <xmloff/xmlexp.hxx>
28 : #include <com/sun/star/uno/Reference.h>
29 : #include <rtl/ustring.hxx>
30 : #include <svl/zforlist.hxx>
31 : #include <com/sun/star/util/NumberFormat.hpp>
32 : #include <sax/tools/converter.hxx>
33 : #include <rtl/math.hxx>
34 : #include <rtl/ustrbuf.hxx>
35 :
36 : using namespace com::sun::star;
37 : using namespace xmloff::token;
38 :
39 : #define XML_TYPE "Type"
40 : #define XML_CURRENCYSYMBOL "CurrencySymbol"
41 : #define XML_CURRENCYABBREVIATION "CurrencyAbbreviation"
42 : #define XML_STANDARDFORMAT "StandardFormat"
43 :
44 16 : XMLNumberFormatAttributesExportHelper::XMLNumberFormatAttributesExportHelper(
45 : ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatsSupplier >& xTempNumberFormatsSupplier)
46 32 : : xNumberFormats(xTempNumberFormatsSupplier.is() ? xTempNumberFormatsSupplier->getNumberFormats() : ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormats > ()),
47 : pExport(NULL),
48 : sStandardFormat(RTL_CONSTASCII_USTRINGPARAM(XML_STANDARDFORMAT)),
49 : sType(RTL_CONSTASCII_USTRINGPARAM(XML_TYPE)),
50 : msCurrencySymbol(RTL_CONSTASCII_USTRINGPARAM(XML_CURRENCYSYMBOL)),
51 : msCurrencyAbbreviation(RTL_CONSTASCII_USTRINGPARAM(XML_CURRENCYABBREVIATION)),
52 32 : aNumberFormats()
53 : {
54 16 : }
55 :
56 2 : XMLNumberFormatAttributesExportHelper::XMLNumberFormatAttributesExportHelper(
57 : ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatsSupplier >& xTempNumberFormatsSupplier,
58 : SvXMLExport& rTempExport )
59 4 : : xNumberFormats(xTempNumberFormatsSupplier.is() ? xTempNumberFormatsSupplier->getNumberFormats() : ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormats > ()),
60 : pExport(&rTempExport),
61 : sStandardFormat(RTL_CONSTASCII_USTRINGPARAM(XML_STANDARDFORMAT)),
62 : sType(RTL_CONSTASCII_USTRINGPARAM(XML_TYPE)),
63 2 : sAttrValueType(rTempExport.GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_OFFICE, GetXMLToken(XML_VALUE_TYPE))),
64 2 : sAttrValue(rTempExport.GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_OFFICE, GetXMLToken(XML_VALUE))),
65 2 : sAttrDateValue(rTempExport.GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_OFFICE, GetXMLToken(XML_DATE_VALUE))),
66 2 : sAttrTimeValue(rTempExport.GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_OFFICE, GetXMLToken(XML_TIME_VALUE))),
67 2 : sAttrBooleanValue(rTempExport.GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_OFFICE, GetXMLToken(XML_BOOLEAN_VALUE))),
68 2 : sAttrStringValue(rTempExport.GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_OFFICE, GetXMLToken(XML_STRING_VALUE))),
69 2 : sAttrCurrency(rTempExport.GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_OFFICE, GetXMLToken(XML_CURRENCY))),
70 : msCurrencySymbol(RTL_CONSTASCII_USTRINGPARAM(XML_CURRENCYSYMBOL)),
71 : msCurrencyAbbreviation(RTL_CONSTASCII_USTRINGPARAM(XML_CURRENCYABBREVIATION)),
72 18 : aNumberFormats()
73 : {
74 2 : }
75 :
76 18 : XMLNumberFormatAttributesExportHelper::~XMLNumberFormatAttributesExportHelper()
77 : {
78 18 : }
79 :
80 59 : sal_Int16 XMLNumberFormatAttributesExportHelper::GetCellType(const sal_Int32 nNumberFormat, rtl::OUString& sCurrency, bool& bIsStandard)
81 : {
82 59 : XMLNumberFormat aFormat(sEmpty, nNumberFormat, 0);
83 59 : XMLNumberFormatSet::iterator aItr(aNumberFormats.find(aFormat));
84 59 : XMLNumberFormatSet::iterator aEndItr(aNumberFormats.end());
85 59 : if (aItr != aEndItr)
86 : {
87 27 : bIsStandard = aItr->bIsStandard;
88 27 : sCurrency = aItr->sCurrency;
89 27 : return aItr->nType;
90 : }
91 : else
92 : {
93 32 : aFormat.nType = GetCellType(nNumberFormat, bIsStandard);
94 32 : aFormat.bIsStandard = bIsStandard;
95 32 : if ((aFormat.nType & ~util::NumberFormat::DEFINED) == util::NumberFormat::CURRENCY)
96 1 : if (GetCurrencySymbol(nNumberFormat, aFormat.sCurrency))
97 1 : sCurrency = aFormat.sCurrency;
98 32 : aNumberFormats.insert(aFormat);
99 32 : return aFormat.nType;
100 59 : }
101 : }
102 :
103 0 : void XMLNumberFormatAttributesExportHelper::WriteAttributes(SvXMLExport& rXMLExport,
104 : const sal_Int16 nTypeKey,
105 : const double& rValue,
106 : const rtl::OUString& rCurrency,
107 : sal_Bool bExportValue)
108 : {
109 0 : sal_Bool bWasSetTypeAttribute = sal_False;
110 0 : switch(nTypeKey & ~util::NumberFormat::DEFINED)
111 : {
112 : case 0:
113 : case util::NumberFormat::NUMBER:
114 : case util::NumberFormat::SCIENTIFIC:
115 : case util::NumberFormat::FRACTION:
116 : {
117 0 : if (!bWasSetTypeAttribute)
118 : {
119 0 : rXMLExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_VALUE_TYPE, XML_FLOAT);
120 0 : bWasSetTypeAttribute = sal_True;
121 : }
122 : } // No Break
123 : case util::NumberFormat::PERCENT:
124 : {
125 0 : if (!bWasSetTypeAttribute)
126 : {
127 0 : rXMLExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_VALUE_TYPE, XML_PERCENTAGE);
128 0 : bWasSetTypeAttribute = sal_True;
129 : }
130 : } // No Break
131 : case util::NumberFormat::CURRENCY:
132 : {
133 0 : if (!bWasSetTypeAttribute)
134 : {
135 0 : rXMLExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_VALUE_TYPE, XML_CURRENCY);
136 0 : if (!rCurrency.isEmpty())
137 0 : rXMLExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_CURRENCY, rCurrency);
138 0 : bWasSetTypeAttribute = sal_True;
139 : }
140 :
141 0 : if (bExportValue)
142 : {
143 : rtl::OUString sValue( ::rtl::math::doubleToUString( rValue,
144 : rtl_math_StringFormat_Automatic,
145 0 : rtl_math_DecimalPlaces_Max, '.', sal_True));
146 0 : rXMLExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_VALUE, sValue);
147 : }
148 : }
149 0 : break;
150 : case util::NumberFormat::DATE:
151 : case util::NumberFormat::DATETIME:
152 : {
153 0 : if (!bWasSetTypeAttribute)
154 : {
155 0 : rXMLExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_VALUE_TYPE, XML_DATE);
156 0 : bWasSetTypeAttribute = sal_True;
157 : }
158 0 : if (bExportValue)
159 : {
160 0 : if ( rXMLExport.SetNullDateOnUnitConverter() )
161 : {
162 0 : rtl::OUStringBuffer sBuffer;
163 0 : rXMLExport.GetMM100UnitConverter().convertDateTime(sBuffer, rValue);
164 0 : rXMLExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_DATE_VALUE, sBuffer.makeStringAndClear());
165 : }
166 : }
167 : }
168 0 : break;
169 : case util::NumberFormat::TIME:
170 : {
171 0 : if (!bWasSetTypeAttribute)
172 : {
173 0 : rXMLExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_VALUE_TYPE, XML_TIME);
174 0 : bWasSetTypeAttribute = sal_True;
175 : }
176 0 : if (bExportValue)
177 : {
178 0 : rtl::OUStringBuffer sBuffer;
179 0 : ::sax::Converter::convertDuration(sBuffer, rValue);
180 0 : rXMLExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_TIME_VALUE, sBuffer.makeStringAndClear());
181 : }
182 : }
183 0 : break;
184 : case util::NumberFormat::LOGICAL:
185 : {
186 0 : if (!bWasSetTypeAttribute)
187 : {
188 0 : rXMLExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_VALUE_TYPE, XML_BOOLEAN);
189 0 : bWasSetTypeAttribute = sal_True;
190 : }
191 0 : if (bExportValue)
192 : {
193 0 : double fTempValue = rValue;
194 0 : if (::rtl::math::approxEqual( fTempValue, 1.0 ))
195 : {
196 0 : rXMLExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_BOOLEAN_VALUE, XML_TRUE);
197 : }
198 : else
199 : {
200 0 : if (::rtl::math::approxEqual( rValue, 0.0 ))
201 : {
202 0 : rXMLExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_BOOLEAN_VALUE, XML_FALSE);
203 : }
204 : else
205 : {
206 : rtl::OUString sValue( ::rtl::math::doubleToUString(
207 : fTempValue,
208 : rtl_math_StringFormat_Automatic,
209 : rtl_math_DecimalPlaces_Max, '.',
210 0 : sal_True));
211 0 : rXMLExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_BOOLEAN_VALUE, sValue);
212 : }
213 : }
214 : }
215 : }
216 0 : break;
217 : case util::NumberFormat::TEXT:
218 : {
219 0 : if (!bWasSetTypeAttribute)
220 : {
221 0 : rXMLExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_VALUE_TYPE, XML_FLOAT);
222 0 : bWasSetTypeAttribute = sal_True;
223 0 : if (bExportValue)
224 : {
225 : rtl::OUString sValue( ::rtl::math::doubleToUString( rValue,
226 : rtl_math_StringFormat_Automatic,
227 0 : rtl_math_DecimalPlaces_Max, '.', sal_True));
228 0 : rXMLExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_VALUE, sValue);
229 : }
230 : }
231 : }
232 0 : break;
233 : }
234 0 : }
235 :
236 0 : sal_Bool XMLNumberFormatAttributesExportHelper::GetCurrencySymbol(const sal_Int32 nNumberFormat, rtl::OUString& sCurrencySymbol,
237 : uno::Reference <util::XNumberFormatsSupplier>& xNumberFormatsSupplier)
238 : {
239 0 : if (xNumberFormatsSupplier.is())
240 : {
241 0 : uno::Reference <util::XNumberFormats> xNumberFormats(xNumberFormatsSupplier->getNumberFormats());
242 0 : if (xNumberFormats.is())
243 : {
244 : try
245 : {
246 0 : uno::Reference <beans::XPropertySet> xNumberPropertySet(xNumberFormats->getByKey(nNumberFormat));
247 0 : if ( xNumberPropertySet->getPropertyValue(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(XML_CURRENCYSYMBOL))) >>= sCurrencySymbol)
248 : {
249 0 : rtl::OUString sCurrencyAbbreviation;
250 0 : if ( xNumberPropertySet->getPropertyValue(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(XML_CURRENCYABBREVIATION))) >>= sCurrencyAbbreviation)
251 : {
252 0 : if ( !sCurrencyAbbreviation.isEmpty())
253 0 : sCurrencySymbol = sCurrencyAbbreviation;
254 : else
255 : {
256 0 : if ( sCurrencySymbol.getLength() == 1 && sCurrencySymbol.toChar() == NfCurrencyEntry::GetEuroSymbol() )
257 0 : sCurrencySymbol = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("EUR"));
258 : }
259 : }
260 0 : return sal_True;
261 0 : }
262 : }
263 0 : catch ( uno::Exception& )
264 : {
265 : OSL_FAIL("Numberformat not found");
266 : }
267 0 : }
268 : }
269 0 : return sal_False;
270 : }
271 :
272 :
273 0 : sal_Int16 XMLNumberFormatAttributesExportHelper::GetCellType(const sal_Int32 nNumberFormat, sal_Bool& bIsStandard,
274 : uno::Reference <util::XNumberFormatsSupplier>& xNumberFormatsSupplier)
275 : {
276 0 : if (xNumberFormatsSupplier.is())
277 : {
278 0 : uno::Reference <util::XNumberFormats> xNumberFormats(xNumberFormatsSupplier->getNumberFormats());
279 0 : if (xNumberFormats.is())
280 : {
281 : try
282 : {
283 0 : uno::Reference <beans::XPropertySet> xNumberPropertySet(xNumberFormats->getByKey(nNumberFormat));
284 0 : xNumberPropertySet->getPropertyValue(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(XML_STANDARDFORMAT))) >>= bIsStandard;
285 0 : sal_Int16 nNumberType = sal_Int16();
286 0 : if ( xNumberPropertySet->getPropertyValue(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(XML_TYPE))) >>= nNumberType )
287 : {
288 0 : return nNumberType;
289 0 : }
290 : }
291 0 : catch ( uno::Exception& )
292 : {
293 : OSL_FAIL("Numberformat not found");
294 : }
295 0 : }
296 : }
297 0 : return 0;
298 : }
299 :
300 0 : void XMLNumberFormatAttributesExportHelper::SetNumberFormatAttributes(SvXMLExport& rXMLExport,
301 : const sal_Int32 nNumberFormat, const double& rValue, sal_Bool bExportValue)
302 : {
303 : sal_Bool bIsStandard;
304 0 : sal_Int16 nTypeKey = GetCellType(nNumberFormat, bIsStandard, rXMLExport.GetNumberFormatsSupplier());
305 0 : rtl::OUString sCurrency;
306 0 : if ((nTypeKey & ~util::NumberFormat::DEFINED) == util::NumberFormat::CURRENCY)
307 0 : GetCurrencySymbol(nNumberFormat, sCurrency, rXMLExport.GetNumberFormatsSupplier());
308 0 : WriteAttributes(rXMLExport, nTypeKey, rValue, sCurrency, bExportValue);
309 0 : }
310 :
311 0 : void XMLNumberFormatAttributesExportHelper::SetNumberFormatAttributes(SvXMLExport& rXMLExport,
312 : const rtl::OUString& rValue, const rtl::OUString& rCharacters,
313 : sal_Bool bExportValue, sal_Bool bExportTypeAttribute)
314 : {
315 0 : if (bExportTypeAttribute)
316 0 : rXMLExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_VALUE_TYPE, XML_STRING);
317 0 : if (bExportValue && !rValue.isEmpty() && (rValue != rCharacters))
318 0 : rXMLExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_STRING_VALUE, rValue);
319 0 : }
320 :
321 1 : sal_Bool XMLNumberFormatAttributesExportHelper::GetCurrencySymbol(const sal_Int32 nNumberFormat, rtl::OUString& rCurrencySymbol)
322 : {
323 1 : if (!xNumberFormats.is() && pExport && pExport->GetNumberFormatsSupplier().is())
324 0 : xNumberFormats.set(pExport->GetNumberFormatsSupplier()->getNumberFormats());
325 :
326 1 : if (xNumberFormats.is())
327 : {
328 : try
329 : {
330 1 : uno::Reference <beans::XPropertySet> xNumberPropertySet(xNumberFormats->getByKey(nNumberFormat));
331 1 : if ( xNumberPropertySet->getPropertyValue(msCurrencySymbol) >>= rCurrencySymbol)
332 : {
333 1 : rtl::OUString sCurrencyAbbreviation;
334 1 : if ( xNumberPropertySet->getPropertyValue(msCurrencyAbbreviation) >>= sCurrencyAbbreviation)
335 : {
336 1 : if ( !sCurrencyAbbreviation.isEmpty())
337 1 : rCurrencySymbol = sCurrencyAbbreviation;
338 : else
339 : {
340 0 : if ( rCurrencySymbol.getLength() == 1 && rCurrencySymbol.toChar() == NfCurrencyEntry::GetEuroSymbol() )
341 0 : rCurrencySymbol = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("EUR"));
342 : }
343 : }
344 1 : return sal_True;
345 1 : }
346 : }
347 0 : catch ( uno::Exception& )
348 : {
349 : OSL_FAIL("Numberformat not found");
350 : }
351 : }
352 0 : return sal_False;
353 : }
354 :
355 32 : sal_Int16 XMLNumberFormatAttributesExportHelper::GetCellType(const sal_Int32 nNumberFormat, bool& bIsStandard)
356 : {
357 32 : if (!xNumberFormats.is() && pExport && pExport->GetNumberFormatsSupplier().is())
358 0 : xNumberFormats.set(pExport->GetNumberFormatsSupplier()->getNumberFormats());
359 :
360 32 : if (xNumberFormats.is())
361 : {
362 : try
363 : {
364 32 : uno::Reference <beans::XPropertySet> xNumberPropertySet(xNumberFormats->getByKey(nNumberFormat));
365 32 : if (xNumberPropertySet.is())
366 : {
367 32 : xNumberPropertySet->getPropertyValue(sStandardFormat) >>= bIsStandard;
368 32 : sal_Int16 nNumberType = sal_Int16();
369 32 : if ( xNumberPropertySet->getPropertyValue(sType) >>= nNumberType )
370 : {
371 32 : return nNumberType;
372 : }
373 32 : }
374 : }
375 0 : catch ( uno::Exception& )
376 : {
377 : OSL_FAIL("Numberformat not found");
378 : }
379 : }
380 0 : return 0;
381 : }
382 :
383 2 : void XMLNumberFormatAttributesExportHelper::WriteAttributes(
384 : const sal_Int16 nTypeKey,
385 : const double& rValue,
386 : const rtl::OUString& rCurrency,
387 : sal_Bool bExportValue)
388 : {
389 2 : if (!pExport)
390 2 : return;
391 :
392 2 : sal_Bool bWasSetTypeAttribute = sal_False;
393 2 : switch(nTypeKey & ~util::NumberFormat::DEFINED)
394 : {
395 : case 0:
396 : case util::NumberFormat::NUMBER:
397 : case util::NumberFormat::SCIENTIFIC:
398 : case util::NumberFormat::FRACTION:
399 : {
400 2 : if (!bWasSetTypeAttribute)
401 : {
402 2 : pExport->AddAttribute(sAttrValueType, XML_FLOAT);
403 2 : bWasSetTypeAttribute = sal_True;
404 : }
405 : } // No Break
406 : case util::NumberFormat::PERCENT:
407 : {
408 2 : if (!bWasSetTypeAttribute)
409 : {
410 0 : pExport->AddAttribute(sAttrValueType, XML_PERCENTAGE);
411 0 : bWasSetTypeAttribute = sal_True;
412 : }
413 : } // No Break
414 : case util::NumberFormat::CURRENCY:
415 : {
416 2 : if (!bWasSetTypeAttribute)
417 : {
418 0 : pExport->AddAttribute(sAttrValueType, XML_CURRENCY);
419 0 : if (!rCurrency.isEmpty())
420 0 : pExport->AddAttribute(sAttrCurrency, rCurrency);
421 0 : bWasSetTypeAttribute = sal_True;
422 : }
423 :
424 2 : if (bExportValue)
425 : {
426 : rtl::OUString sValue( ::rtl::math::doubleToUString( rValue,
427 : rtl_math_StringFormat_Automatic,
428 2 : rtl_math_DecimalPlaces_Max, '.', sal_True));
429 2 : pExport->AddAttribute(sAttrValue, sValue);
430 : }
431 : }
432 2 : break;
433 : case util::NumberFormat::DATE:
434 : case util::NumberFormat::DATETIME:
435 : {
436 0 : if (!bWasSetTypeAttribute)
437 : {
438 0 : pExport->AddAttribute(sAttrValueType, XML_DATE);
439 0 : bWasSetTypeAttribute = sal_True;
440 : }
441 0 : if (bExportValue)
442 : {
443 0 : if ( pExport->SetNullDateOnUnitConverter() )
444 : {
445 0 : rtl::OUStringBuffer sBuffer;
446 0 : pExport->GetMM100UnitConverter().convertDateTime(sBuffer, rValue);
447 0 : pExport->AddAttribute(sAttrDateValue, sBuffer.makeStringAndClear());
448 : }
449 : }
450 : }
451 0 : break;
452 : case util::NumberFormat::TIME:
453 : {
454 0 : if (!bWasSetTypeAttribute)
455 : {
456 0 : pExport->AddAttribute(sAttrValueType, XML_TIME);
457 0 : bWasSetTypeAttribute = sal_True;
458 : }
459 0 : if (bExportValue)
460 : {
461 0 : rtl::OUStringBuffer sBuffer;
462 0 : ::sax::Converter::convertDuration(sBuffer, rValue);
463 0 : pExport->AddAttribute(sAttrTimeValue, sBuffer.makeStringAndClear());
464 : }
465 : }
466 0 : break;
467 : case util::NumberFormat::LOGICAL:
468 : {
469 0 : if (!bWasSetTypeAttribute)
470 : {
471 0 : pExport->AddAttribute(sAttrValueType, XML_BOOLEAN);
472 0 : bWasSetTypeAttribute = sal_True;
473 : }
474 0 : if (bExportValue)
475 : {
476 0 : double fTempValue = rValue;
477 0 : if (::rtl::math::approxEqual( fTempValue, 1.0 ))
478 : {
479 0 : pExport->AddAttribute(sAttrBooleanValue, XML_TRUE);
480 : }
481 : else
482 : {
483 0 : if (::rtl::math::approxEqual( rValue, 0.0 ))
484 : {
485 0 : pExport->AddAttribute(sAttrBooleanValue, XML_FALSE);
486 : }
487 : else
488 : {
489 : rtl::OUString sValue( ::rtl::math::doubleToUString(
490 : fTempValue,
491 : rtl_math_StringFormat_Automatic,
492 : rtl_math_DecimalPlaces_Max, '.',
493 0 : sal_True));
494 0 : pExport->AddAttribute(sAttrBooleanValue, sValue);
495 : }
496 : }
497 : }
498 : }
499 0 : break;
500 : case util::NumberFormat::TEXT:
501 : {
502 0 : if (!bWasSetTypeAttribute)
503 : {
504 0 : pExport->AddAttribute(sAttrValueType, XML_FLOAT);
505 0 : bWasSetTypeAttribute = sal_True;
506 0 : if (bExportValue)
507 : {
508 : rtl::OUString sValue( ::rtl::math::doubleToUString( rValue,
509 : rtl_math_StringFormat_Automatic,
510 0 : rtl_math_DecimalPlaces_Max, '.', sal_True));
511 0 : pExport->AddAttribute(sAttrValue, sValue);
512 : }
513 : }
514 : }
515 0 : break;
516 : }
517 : }
518 :
519 2 : void XMLNumberFormatAttributesExportHelper::SetNumberFormatAttributes(
520 : const sal_Int32 nNumberFormat, const double& rValue, sal_Bool bExportValue)
521 : {
522 2 : if (pExport)
523 : {
524 : bool bIsStandard;
525 2 : rtl::OUString sCurrency;
526 2 : sal_Int16 nTypeKey = GetCellType(nNumberFormat, sCurrency, bIsStandard);
527 2 : WriteAttributes(nTypeKey, rValue, sCurrency, bExportValue);
528 : }
529 : else {
530 : OSL_FAIL("no SvXMLExport given");
531 : }
532 2 : }
533 :
534 0 : void XMLNumberFormatAttributesExportHelper::SetNumberFormatAttributes(
535 : const rtl::OUString& rValue, const rtl::OUString& rCharacters,
536 : sal_Bool bExportValue, sal_Bool bExportTypeAttribute)
537 : {
538 0 : if (pExport)
539 : {
540 0 : if (bExportTypeAttribute)
541 0 : pExport->AddAttribute(sAttrValueType, XML_STRING);
542 0 : if (bExportValue && !rValue.isEmpty() && (rValue != rCharacters))
543 0 : pExport->AddAttribute(sAttrStringValue, rValue);
544 : }
545 : else {
546 : OSL_FAIL("no SvXMLExport given");
547 : }
548 0 : }
549 :
550 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|