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


Hi Noel,

Sorry, this took too long..

On Wednesday, 2012-04-18 21:01:41 +0100, Noel Power wrote:

I've been looking at providing support for the repeating character
in number formats. I've been playing abit with the code and what I
have sofar seems to work reasonably well ( no doubt there are plenty
of edge cases still to be discovered )  But.. life would be simpler
I think if we had just stored a plain format code like docx seems to
rather than the fancy pants xml that's there now :/

Well, try to exactly specify that format code syntax for an open
standard, with all it's quirks MS may have hidden.. ironically even
OOXML didn't attempt that. Yes, _they_ got away with that..

thus I need
some input at the very least on persisting the format code to odf.

Note that Excel's '*' definition is a bit "unsharp":

http://office.microsoft.com/en-us/excel-help/number-format-codes-HP005198679.aspx
Text and spacing, Repeating characters:

| To repeat the next character in the format to fill the column width,
| include an asterisk (*) in the number format. For example, type 0*- to
| include enough dashes after a number to fill the cell, or type *0 before
| any format to include leading zeros.

So "fill the column width" actually knows (I guess?) three conditions:
* start of text: fill from left border to text
* in text: split text in two, left justify first part, right justify
  second part, fill with character in between
* end of text: fill from text to right border
  (this I only guess, does Excel do that?)

Whatever Excel does nowadays if more than one * are present, I hope it
still bails out with an error. And what if it occurs in date/time format
codes?

I assume also left/centered/right justification affects things for
leading/trailing fills.

Given that I think we'd need a number:fill-character or some such
attribute to go with
16.27 Data Styles
http://docs.oasis-open.org/office/v1.2/cs01/OpenDocument-v1.2-cs01-part1.html#__RefHeading__1416346_253892949
with the limitation that it can be present only once (if that is what
Excel does) and specyfing what happens in these three conditions.

Your number:repeated does fine, but may not survive ODF-speak (neither
may my number:fill-character ;-) as someone might ask "how many times to
be repeated".


Currently I have implemented a pretty simple change that introduces
a new child element to the number-style definition ( see
0002-xxxxx.patch attached ) Talking to Kohei he says that you
investigated those special financial formats that use the repeat
code at some point and I wondered if you had any input, ideas or
comments.

Well, yes, some years ago.. ;) but not specifically related to those
spread/filled financial formats. Btw, IIRC this is not restricted to
currency formats but a general feature in Excel format codes. (is it?)

I'm not at all sure about the xml choice I made and would
be happy to take on board any suggestions for that or.... perhaps
you might have a sneaky way to avoid an odf change/addition
altogether.  Also I worry a little that there seemed to be at one
point support for the '*' format code, I wonder what the history was
or is it just a case of unfinished business?

That is a remainder of old times.. the format code scanner is able to
handle that (and it should), but support at view level never existed in
this constellation. I think there was back in early 90s Pascal times..
when the formatter was part of StarCalc 1.0 ...

Note: I partially
re-enabled that for the basic xls import support ( see 
http://cgit.freedesktop.org/libreoffice/core/commit/?id=46e18bc915ac94a81462642cc9d56d29c04d0c46
and follow up patch 
http://cgit.freedesktop.org/libreoffice/core/commit/?id=808dd658a265f565a638556322250a0957e8e535
)

Seems to be ok so far.

sofar the results can be probably best explained by a simple
screencast http://users.freedesktop.org/~noelp/fillformat/financial-cell-format.ogv

Thanks :-)

Looks good.


+        if ( nNumCharsToInsert )
+        {
+            for ( int i = 0; i < nNumCharsToInsert; ++i )
+                aTmpStr.Insert( mnChar, mnPos );
+        }

In case that turns out to be a bottleneck for wide columns with many
rows of data displayed we could use

    String aFill;
    aFill.Expand( nNumCharsToInsert, mnChar);
    aTmpStr.Insert( aFill, mnPos);

to avoid multiple reallocations with character-based Insert.


+    SfxObjectShell* pDocSh  = SfxObjectShell::Current();
+    if ( pDocSh )
+    {
+        // is this a calc document
+        Reference< XServiceInfo > xSI( pDocSh->GetModel(), UNO_QUERY );
+        if ( xSI.is() )
+            bUseStarFormat = xSI->supportsService( rtl::OUString( 
"com.sun.star.sheet.SpreadsheetDocument" ) );
+    }

Heh, that's clever :-)

  Eike

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

Attachment: pgp8wkafTcXe_.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.