On 07/21/12 18:46, Dave Barton wrote:
-------- Original Message --------
To: Dave Barton <firstname.lastname@example.org>
Date: Sat, 21 Jul 2012 12:59:52 -0500
On 07/21/12 00:45, Dave Barton wrote:
-------- Original Message --------
Date: Fri, 20 Jul 2012 20:33:27 -0500
On 07/20/12 02:16, Dave Barton wrote:
-------- Original Message --------
Date: Thu, 19 Jul 2012 16:48:53 -0500
I'd like to create a macro for a user-defined date format
examples, 7:00 AM would display as 7:00a and 3:33 PM as 3:33p. I can
create the format manually, but I understand the LibreOffice format
can't save user-defined formats. So my thought is to create a macro
which creates the format each time the spreadsheet is opened. The
user-defined Format Code is for a saved Style.
The macro records without incident and the date format is correct.
However, running the saved macro doesn't change the format. It seems
this should work. Thoughts? The recorded macro is as follows:
8<-- code snip for brevity -->8
Sorry I can't help with your macro, but I like your idea.
An alternative approach I use, is to add my user defined date format
my Calc default template.
Thank you for responding; I admire your style. I manually changed the
date format of my spreadsheet, saved , then coded it as the default
template. The default template took, but unfortunately, again the
user-defined date format wasn't saved.
Do I understand you can save a user-defined date format in the default
template and it takes? I'm sure a macro would work and I can wade
through the code, but if there's an easier way I'm interested.
I am not sure what you mean by "coded it as the default template".
If you follow this procedure:
the ".ots" (Calc template) file will include your date format, as would
be the case for any ODF file.
I am sending you (off-list) an example template which has a DD.MM.YYYY
date format, which is not included in standard list of date formats.
Open it and you will find 31.12.1999 at the end of the Format => Date ->
Category format list.
Thank you again for responding. However, I think we're talking apples
and oranges. I opened your template and the DD.MM.YYYY user-defined
format works. My problem is I can't get the H:MMa/p user-defined Format
Code to take. While the document is opened I can change 1:11PM to 1:11p
for instance. However, after saving, closing, and reopening the
document the time appears as 1:11PM, not 1:11p, which is the format code
I wanted saved. I've always been able to save the user-defined code, I
just can't get the lower-case a/p to take. It does work with other file
That happens regardless of whether I save as an .ods or .ots file. I do
see the user-defined Format Code, but it always comes up as H:MMAM/PM
even though I save it as H:MMa/p. I believe I originally created a
default template correctly, but just redid the process with your
instructions. The same thing happens if I save the format in your
So, can you successfully save the H:MMa/p format code? That would
address the apples/oranges question. I'd appreciate your testing that
if possible. If it works for you I'm doing something wrong. It's not a
huge deal to manually change AM/PM to a/p each time I open the
spreadsheet, but not having to do so would be better.
Your "apples & oranges" analogy is correct. I was misled by your
original reference to "Date" format and although you spelled it out
quite clearly I overlooked the fact that your issue was with "Time"
I have now done some testing on this issue, with the following results:
* Saving from LO in ODF (".ods" or ".ots") format does not preserve the
user defined time format you want. (As you have already established.)
* Saving from LO in Excel (".xls") format and reopening it LO does
preserve the format. (As suggested by Pedro in another post to this
It may or may not be of importance to you, but opening the files saved
from LO and opening them in Excel 2010 I found:
* XLS File: Partially preserves the time format (ie. H:MM), but the
lower case p/m is becomes upper case P/M. The user defined cells are
"locked" (MS terminology) and "unlocking" them the format changes to
whatever MS deems to be appropriate.
* ODF File: Generates an error, which Excel generously offers to fix,
with the same result as for unlocking the cells in the XLS file.
Unless someone with a better knowledge of Star Basic than myself can
offer a solution to your macro problem, I suggest you file a bug/RFE
I understand your confusion as I should have titled the post "Time format
macro." Sloppy labeling on my part.
I have reported this as Bug 50923. That's why I believed it was/is an .ods
limitation and thought of the macro solution. Your suggestion of a template
piqued my interested as I thought (possibly) a .odt file might be different.
I'd always assumed the file format identical except a .odt extension saved
the file to the template directory, but it was worth a try.
I still think the macro solution is the best. I'll bite the bullet and do
some research as the macro recorder doesn't work. I do again thank you for
your interest and help.
There is a document called AndrewMacro.pdf (and there is an ODF
version too, called AndrewMacro.odt) somewhere. There are a lot of
explaining and a lot of examples, and I think date format examples are
included as well. However, I couldn't find it for download. I found
this page (http://www.pitonyak.org/oo.php/), but clicking on the links
only took me back to the page, and forcing download only downloaded an
18.3 kB document in HTML format…
Maybe someone else have a better link.
Here's the date format paragraph anyway (I removed a comment
containing the authors email address, just in case), might be of some
kind of help:
7.7.1. Insert a formatted date field into a Write document
This will insert the text “Today is <date> ” where the date is
formatted as “DD. MMM YYYY”. This will create the date format if it
does not exist. For more information on valid formats, see the help
contents on topic “number formats; formats”.
Listing 7.31: Insert a formatted date field into a Write document.
'Author: Andrew Pitonyak
Dim oDoc As Object
Dim oText As Object
Dim oVCurs As Object
Dim oTCurs As Object
Dim oDateTime As Object
oDoc = ThisComponent
If oDoc.SupportsService("com.sun.star.text.TextDocument") Then
oText = oDoc.Text
oVCurs = oDoc.CurrentController.getViewCursor()
oTCurs = oText.createTextCursorByRange(oVCurs.getStart())
oText.insertString(oTCurs, "Today is ", FALSE)
' Create the DateTime type.
ODateTime = oDoc.createInstance("com.sun.star.text.TextField.DateTime")
oDateTime.IsFixed = TRUE
oDateTime.NumberFormat = FindCreateNumberFormatStyle(_
"DD. MMMM YYYY", oDoc)
oText.insertString(oTCurs," ",FALSE) Else
MsgBox "Sorry, this macro requires a TextDocument"
For unsubscribe instructions e-mail to: email@example.com
Posting guidelines + more: http://wiki.documentfoundation.org/Netiquette
List archive: http://listarchives.libreoffice.org/global/users/
All messages sent to this list will be publicly archived and cannot be deleted
Impressum (Legal Info)
: 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