Date: prev next · Thread: first prev next last
2012 Archives by date, by thread · List index


Hi Winfried,

On Thursday, 2012-04-26 13:55:14 +0200, Winfried Donkers wrote:

I have added the formula 'datedif', as defined in ODF 1.2 to calc (see diff).

Hey, great!

But there are some items I would like to get advise on:
1. parameter fmt in datedif( date1; date2; fmt ) defines the output
(d, m, y, yd, ym, md for days, months etc). In my code, the users
needs to enter "d" (i.e. use the double quotes around). IMHO, that is
not user-friendly. Can anyone tell me how to solve that?

Well, this is how the function is defined, the unit/format parameter is
a text string.

2. the calculation in DateDif(..) uses mean values for days in year
(365.2425) and for days in month (30.4369). That will in some
instances lead to -seemingly?- incorrect results. Should I do
something about that, i.e make the code date-concious?

Yes please, make it leap year aware and use correct values for days in
months.

3. The various defined values for paramter fmt (d, m, y, yd, ym, md)
are 'hard' in the code ("d", "m", "y", "yd", "ym", "md"). This does
not look neat to me. is there a preferred way of doing such things?

No, hard coded is fine in this case as the values are not to be
translated. However, string comparison should be case insensitive to
allow also upper case values. IMHO Excel does that. Btw, do you have
access to an Excel version to compare?

4. Currently, when an undefined value of parameter fmt is passed, the
function returns 0 instead of an error message tp the user. Can anyone
tell me how to implement a correct and user-friendly handling of
incorrect parameter values?

Throw a lang::IllegalArgumentException, the interpreter handles that.

5. ODF 1.2 defines DATEDIF, but the languages I've seen using this
function use DATEDIFF. Why is ODF different (or isn't it)?

The function originates from Lotus 1-2-3 where it was called DATEDIF,
MS-Excel called it the same, and ODF just adopted that name. The
DATEDIFF function you mention is something different (VBA?).


Now some nitpicks on your code ;)

+++ b/sc/source/core/tool/addinhelpid.cxx

Is there a specific reason why you implemented this in the
Analysis-AddIn? I don't recall exactly whether this function was
provided in Excel as an AddIn or built-in. If as AddIn it makes sense to
implement it in our AddIn for import/export from/to Excel, if not then
a built-in function may be easier.


+++ b/sc/source/filter/oox/formulabase.cxx
+    { "DATEDIF",                "DATEDIF",              485,    NOID,   3,  3,  V, { RR }, 
FUNCFLAG_EXTERNAL },

How did you determine the BIFF12 function identifier value 485?


+++ b/scaddins/source/analysis/analysis.cxx
+long SAL_CALL AnalysisAddIn::getDateDif( sal_Int32 nStartDate, sal_Int32 nEndDate, const STRING& 
aFormat ) THROWDEF_RTE_IAE
+{
+    long lRet = GetDateDif( nStartDate, nEndDate, aFormat );
+    RETURN_FINITE( lRet );
+}

Please don't use machine specific type long in API calls, use sal_Int32 instead.


+++ b/scaddins/source/analysis/analysis.hxx
+    virtual long SAL_CALL     getDateDif( sal_Int32 nStartDate, sal_Int32 nEndDate, const 
STRING& aFormat ) THROWDEF_RTE_IAE;

Here as well, use sal_Int32 instead of long.


+++ b/scaddins/source/analysis/analysis_deffuncnames.src
+    StringArray ANALYSIS_DEFFUNCNAME_DateDif
+    {
+        ItemList =
+        {
+            < "DATUMDIFFERENZ"; >;
+            < "DATEDIF"; >;
+        };
+    };

Is DATUMDIFFERENZ the name in a localized German Excel? I didn't find
anything on that. These names should exactly match what Excel uses to be
able to import localized AddIn names (which unfortunately they were in
Excel). This is a reason why I asked if it was necessary to implement
this function as an AddIn.

Btw, when referring freedesktop.org bug numbers in commit summaries or
source code please use our convention fdo#..., so fdo#44456 here.

Thanks
  Eike

-- 
LibreOffice Calc developer. Number formatter stricken i18n transpositionizer.
GnuPG key 0x293C05FD : 997A 4C60 CE41 0149 0DB3  9E96 2F1A D073 293C 05FD

Attachment: pgpEpthU7vas5.pgp
Description: PGP signature


Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.