[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [libreoffice-users] Make field time format HH:MM instead of HH:MM:SS


Den lör 2 maj 2020 kl 10:07 skrev Johnny Rosenberg <gurus.knugum@gmail.com>:

> I accidentally replied to you directly, I'm sorry for that. Here's another
> one, this time sent to the right destination, see below.
>
> Den lör 2 maj 2020 kl 07:49 skrev Ken Heard <kenslists@teksavvy.com>:
>
>> On 01/05/20 11:31 PM, Johnny Rosenberg wrote:
>> > Den fre 1 maj 2020 kl 18:11 skrev Ken Heard <kenslists@teksavvy.com>:
>> >
>> >> On 01/05/20 06:21 PM, Johnny Rosenberg wrote:
>> >>> Den fre 1 maj 2020 kl 12:27 skrev Ken Heard <kenslists@teksavvy.com>:
>> >>>
>> >>>> How does one make the default time format for the 'time' field HH:MM
>> >>>> instead of HH:MM:SS?
>> >>>>
>> >>>
>> >>> In Writer?
>> >>
>> >> Yes
>> >>
>> >>> Right click the field and click ”Edit Fields…”.
>> >>> Select the format you want, I believe the first one is the one you are
>> >>> looking for. If it's not in the list, click ”Additional Formats…” and
>> in
>> >>> the new dialogue that opens you can set your field to whatever format
>> you
>> >>> like.
>> >>
>> >> I followed your instructions, but as far as I can see they will only
>> >> change the format of the time field for that use of the field, What I
>> >> want to do is to change the *default* of the time field to HH:MM from
>> >> HH:MM:SS.
>> >>
>> >> Regards, Ken Heard
>> >>
>> >
>> > Have a look here then:
>> >
>> https://ask.libreoffice.org/en/question/158048/how-do-i-change-the-default-datetime-format/
>> >
>> > I'll quote the important part, in case that page is removed at some
>> point:
>> > ”*The default formats (date/time, currency, fixed/scientific/percent; in
>> > long/medium/short variants where applicable) depend on cell/field/...
>> > language, and are hardcoded in the corresponding locale data (see
>> > i18npool/source/localedata/data
>> > <
>> https://opengrok.libreoffice.org/xref/core/i18npool/source/localedata/data/
>> >
>> > for the locale data definitions). They are not configurable (unless you
>> > rebuild LibreOffice).*
>> >
>> > *You may want to create a macro to automate insertion of fields with
>> > desired format; please see this question
>> > <
>> https://ask.libreoffice.org/en/question/136467/how-to-create-a-macro-to-insert-the-current-date-in-the-current-language/
>> >
>> > for details.*”
>>
>> Thank you Johnny for this information. So I now have really two
>> options, One is to learn all about LibreOffice macros and create a
>> macro to give the result I want, OR simply type in the time wherever I
>> want it. While I do want sometime to learn all about macros, for the
>> time being I will choose the second option!
>>
>> Regards, Ken Heard
>>
>>
>
> 1. If you click the link in the macro paragraph above, you will at
> least see a few macro examples that are claimed to work (I didn't test them
> though, so I don't know) and they don't seem to be very hard to edit to
> suit the needs of this specific situation.
> 2. If you instead are going to insert many time fields in the same
> document, or even in different documents that are all open at the same
> time, you can just insert the first one, change its format to HH:MM, then
> highlight the field, press Ctrl+c (copy) and then insert it with Ctrl+v
> (paste) wherever you want. That way you don't need to change it's format
> every time.
> 3. What kind of time field do you want to insert? ”Time (fixed)” or
> ”Time”? If ”Time” (time is updated on field update), there's an easy way:
> Use Autocorrection! First create the field and edit it to your liking. Then
> highlight and copy (Ctrl+c) it, then click ”Tools” → ”AutoCorrect”
> →”AutoCorrect Options…” → enter your trigger text (let's try ”.tm” in the
> ”Replace” field, then hit ”OK”. Now, every time you type ”.tm” in your
> document (any document, actually, as long as they are opened with
> LibreOffice Writer), the ”.tm” text will be replaced by a time field with
> the current time. This can't be done if you want the field to be setup as
> ”Time (fixed)”, since there would always be the same time in that field,
> that is the time when you first created the AutoCorrect record.
> 4. Do you really need to insert time as a field? If not, you could use
> an external program for it, such as AutoKey (on Linux) or AutoHotKey (on
> Windows). I use AutoKey for that and all I have to do to insert current
> time is to type ”ti”. When I do that, the text ”ti” is replaced with the
> current time as soon as I hit a space, ⇥ or ↵.
>
> 5. The macro approach:
I had a look at Andrew Pitonyak's macro document and I was fiddling with it
a bit. This seems to work for inserting a fixed time field:





































































*REM ***** BASIC *****Option Explicit'
———————————————————————————————————————————————————————————————————————————————————————————————'Original
author: Andrew Pitonyak'Email: andrew@pitonyak.org
<andrew@pitonyak.org>'Uses: FindCreateNumberFormatStyle'Edits: Johnny
RosenbergSub InsertTimeField 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()) ' Create the DateTime
type. ODateTime =
oDoc.createInstance("com.sun.star.text.TextField.DateTime")
oDateTime.IsFixed = TRUE oDateTime.NumberFormat =
FindCreateNumberFormatStyle("HH:MM", oDoc)
oText.insertTextContent(oTCurs,oDateTime,FALSE)
oText.insertString(oTCurs," ",FALSE) Else MsgBox "Sorry, this macro
requires a TextDocument" End IfEnd Sub'
———————————————————————————————————————————————————————————————————————————————————————————————'Original
author: Andrew Pitonyak'Email: andrew@pitonyak.org
<andrew@pitonyak.org>'Edits: Johnny RosenbergFunction
FindCreateNumberFormatStyle(sFormat As String, Optional doc As object,
Optional locale) Dim oDoc As Object Dim aLocale As New
com.sun.star.lang.Locale Dim oFormats As Object Dim formatNum As Integer
oDoc = IIf(IsMissing(doc), ThisComponent, doc) oFormats =
oDoc.getNumberFormats() 'If you choose to query on types, you need to use
the type 'com.sun.star.util.NumberFormat.DATE 'I could set the locale
from values stored at
'http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt
<http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt>
'http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html
<http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html> 'I use a NULL
locale and let it use what ever it likes. 'First, see if the number
format exists If (IsMissing(locale)) Then With aLocale
.Language="en" .Country="US" End With Else aLocale =
locale End If formatNum = oFormats.queryKey (sFormat, aLocale, TRUE)
'If the number format does not exist then add it If (formatNum = -1) Then
formatNum = oFormats.addNew(sFormat, aLocale) If (formatNum = -1) Then
formatNum = 0 End If FindCreateNumberFormatStyle = formatNumEnd Function*

Now you only have to associate this macro with a keyboard shortcut, menu
option or toolbar button. I prefer keyboard shortcuts and I associated mine
with Ctrl+t, which was free. Here's the whole process:

1. Highlight the code above, all of it.
2. Ctrl+c
3. In LibreOffice Writer, click Tools → Macros → Edit Macros
4. A new window pops up. Click Tools in the new window, then Organize
Macros → Basic…
5. Click Organizer…
6. In the Modules tab, click the ▸ in front of ”My Macros”, making it a
▾.
7. Click Standard to highlight it.
8. Click New…
9. You will now create a new module, so give it a name. I'll name it
”Insert”.
10. Click Edit.
11. The big field to the right now has some text in it, such as ”Sub
Main” and ”End Sub”. Click somewhere in there, and hit Ctrl+a Ctrl+v to
insert the code you copied in step 2.
12. Now, let's associate InsertTimeField with a the keyboard shortcut
Ctrl+t. Here's how:
13. In the same window, click Tools → Customize…
14. Click the Keyboard tab if it's not already selected.
15. In the Category field, scroll down and click the ▸ in front of
”LibreOffice Macros”.
16. Do the same for ”My Macros” and ”Standard”.
17. Click ”Insert”.
18. In the Function field, click InsertTimeField.
19. In the Shortcut Keys field, look for Ctrl+t and click it.
20. Click Modify. In Keys field, Ctrl+T should now be displayed.
21. Click OK.
22. In your main window, place the cursor somewhere and hit Ctrl+t. A
new field with the current time in HH:MM format should now appear at the
cursor.
23. Done.
24. This should now work in any document as long as LibreOffice Writer
is used.
25. If there is a problem, make sure you inserted ALL of the code above.
I tested the code myself and it works perfectly on my system, so there
should not be any problems, if these instructions are followed in detail,
but we are only human…


Kind regards

Johnny Rosenberg



> Kind regards
>
> Johnny Rosenberg
>
>
>> --
>> To unsubscribe e-mail to: users+unsubscribe@global.libreoffice.org
>> Problems?
>> https://www.libreoffice.org/get-help/mailing-lists/how-to-unsubscribe/
>> Posting guidelines + more: https://wiki.documentfoundation.org/Netiquette
>> List archive: https://listarchives.libreoffice.org/global/users/
>> Privacy Policy: https://www.documentfoundation.org/privacy
>>
>

--
To unsubscribe e-mail to: users+unsubscribe@global.libreoffice.org
Problems? https://www.libreoffice.org/get-help/mailing-lists/how-to-unsubscribe/
Posting guidelines + more: https://wiki.documentfoundation.org/Netiquette
List archive: https://listarchives.libreoffice.org/global/users/
Privacy Policy: https://www.documentfoundation.org/privacy

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.