How to write the output of a function into a table cell - macros

I am using a macro in LibreOffice Calc sheet that gives date using function "=NOW()+14" into a cell. How can I permanently write the output of the function to the cell so it does not generate new date every time I open the sheet?

Copy the cell. Edit->Paste Special; make sure the "Text" box is SELECTED and the "Formulas" box is NOT. Hit OK. You may need to format the cell as "date" or "time" (otherwise it shows time as a decimal fraction of 24 hours and date as days since December 31, 1899).
Although if you're already using a macro, why don't you calculate the time in the macro and put the time into the cell instead of a formula?
Dim CalcTime : CalcTime = Now + 14
oCell.setString(CalcTime)

Related

How to automatically enter date separator on libreoffice calc

How to automatically enter date separator on libreoffice calc?
e.g.: I type 26112020 on a cell and when I hit Enter or leave the cell I would like this value to be automatically formatted/changed to 26/11/2020. This date format is DD/MM/YYYY (but I think it doesn't matter, right?).
Also, it would be nice if I could do the same with time, e.g.: entering 1235 would automatically format/change to 12:35.
I think I just need to put a / or a : in the entered value.
Thanks

How do I change the date format from MM/DD/YYYY to DD/MM/YYYY in libreoffice calc?

I have a spreadsheet with existing date values that I'd like to convert from MM/DD/YYYY to DD/MM/YYYY format. Is there any way of doing this?
The spreadsheet comes from a csv file from someone else that i have opened in calc.
Select the cells with the dates and in Cell -> Format, choose the date format you wish (DD/MM/YYYY)
Making sure the cells are selected, go to Data -> Text to columns choose "Separated by" and "Tab" and click "OK"
Cells should now have the desired format
Cut (or copy then erase) all values from the column (CTRL + X).
Choose Edit -> Paste Special -> Unformatted text (MAJ + CTRL + ALT + V).
On "Fields", click on your column, then select "Date (MDY)". It is important here to select the format the data currently is, NOT the format you want it to be.
If date is still not OK, you will need to follow this additional step (response above from #cybernetic.nomad):
Select the cells with the dates and in Cell -> Format, choose the date format you wish (DD/MM/YYYY).
NB: Note that my LibreOffice Calc is not in english so I am not 100% sure about the option names.
You select the cells to format, then you press Ctrl-1 (or choose "Format" - "Cells..." from the menu, or any other way) to open the dialog to format cells. There is a text field "Format code" where you enter "DD/MM/YYYY" without the quotation marks. Click "OK".
If that does not format the date like you want, the value in the cell is not interpretable as a date. Investigate the cell's value, you might have a text marker (a single apostrophe ') as the first character.
To check this out and experiment with the formats, choose "Insert" - "Date" from the menu. It puts the current date into the current cell.
Disclaimer: Since my Calc is not set to English, the names of menus and their entries might be different. I just guessed how they could be named.
EDIT:
If you can't change the cell format because the date is constantly recognized as "text", you might like to try this:
Insert a column right from the date column. This produces in your case the column O. All columns right of it are pushed to the right.
Put this formula in cell O2 on the right of the first date text:
=CONCATENATE(MID(N2;4;3);MID(N2;1;3);MID(N2;7;4))
It takes snippets (MID()) from cell N2 and concatenates them in the new order. Details of the functions are in Calc's documentation.
You will need to adjust N2 to the correct cell reference if it is not the cell directly left of the cell you're entering the formula.
Put the cell cursor on N2.
Press these key combinations in sequence to mark a deep enough range of cells in column O: Control-Down, Right, Shift-Control-Up. The cell cursor will be on cell O2 now, and the range below and including it is marked.
Now press Control-D to copy the formula in O2 into each cell in the range.
Now you will have a new column O with the text of N, but exchanged characters. The values are still "text", though.
If you like, you can shrink the width of column N now, or hide it.
Example:
Input wanted: DD/MM/YYYY (31/12/2021)
Input accepted: MM/DD/YYYY (12/31/2021)
First add new Date type
Go to Format --> Cells
In "Category" select "Date"
In "Format code" write the input wanted. In this case DD/MM/YYYY
Press the green check
Second format style
Go in the cell where you want to add the date
Write the date in the wrong format. Example: 12/31/2021 (for 31st December 2021) even if you want 21/11/2021
Select that cell and press CTRL-X. The text should disappear
Select that now empty cell and do: Edit -> Paste Special -> Pase unformatted text
The date should be there in the wrong format
Select that cell with the wrong date and do: Format --> Cells
In "category" select "date" and double click on the newly added date type (aka DD/MM/YYYY)

Automatically convert date text to correct date format using Google Sheets

I'm trying to convert date from "text" to correct format. It is logged to Google Spreadsheets and I'm unable to use it to plot graphs.
This is the text format: February 3, 2018, at 11:21 AM
Time is not relevant, all I need is the date converted: DD/MM/YYYY.
I found a similar question where Gary's Student answered with a formula that looks like this for a different format:
=DATEVALUE(SUBSTITUTE(A1,MID(A1,FIND(" ",A1)-2,2),""))
(link to that question)
How can I use above formula (or something similar) so that text is converted to date?
Thanks in advance.
The , at portion of the string is keeping Google Sheets from recognizing it as a datevalue. Just remove it with the substitute function and wrap in datevalue function like so: =DATEVALUE(SUBSTITUTE(A1,", at",""))
To format as DD/MM/YYYY just go to custom formatting and set it to look like the following:
=DATEVALUE(JOIN("/", LEFT(D5,2), {MID(D5,4,2), RIGHT(D5,4)}))
where D5 contains for example: 25.06.2019
which script converts to datevalue: 43641
Dateformat is as dd.MM.YYYY converted to dd/MM/YYYY and then converted to datevalue.
Google sheet's documentation helps:
DATEVALUE, JOIN, LEFT, MID, RIGHT
Datevalue is useful for organizing rows of data by date correctly.
Another solution is to create custom function.
Open tools → script editor in menu to open script editor in new tab
Click Untitled project in top left corner and rename
Open Resources → Libraries in top menu
Paste library key MHMchiX6c1bwSqGM1PZiW_PxhMjh3Sh48 and click Add to add the Moment library to your script
Choose Moment version 9 and click Save
Paste function
function parseDate(dateString, format){
return Moment.moment(dateString, format).toDate()
}
to Code.gs and save project Ctrl+S
Now you use your function in any cell in your sheet:
=parseDate(B2,"MMM D, YYYY, at HH:mm A")
more details about format:
https://momentjs.com/docs/#/parsing/string-formats/
You can also create function to display date in custom format:
function formatDate(date, format){
return Moment.moment(date).format(format)
}
Use it like this in cell
=formatDate(B5,"DD/MM/YYYY")
or
=formatDate(parseDate(B2,"MMM D, YYYY, at HH:mm A"),"DD/MM/YYYY")

How to format date in libre office

I have a column of dates in a format below:
Fri Dec 25 02:45:23 MYT 2015
Fri Dec 25 17:38:57 MYT 2015
How do I change it to a format as below:
2015-12-25
2015-12-25
I have tried to format cells but it is not working. Any idea ?
At first the Calc must accept those strings as dates. I don't know if any Asian language versions will do that. Default English and German language versions don't.
So at least with default English and German language versions, first there is a need to convert the strings into default date strings.
I've done this with the formula:
=--(LEFT(A1;11)&RIGHT(A1;4)&MID(A1;11;9))
Then applied the format YYYY-MM-DD HH:MM:SS on the cells.
Change column type when opening the file and try to format cells as any format you need.
Assume that dates are in column A.
1. Insert new column B to the left of old column B.
2. In B1, input: =Value(A1)
3. Select B1, right click -> format Cell -> Numbers -> date -> choose the required format
4. Apply this to all column B rows.
5. Select all of column B.
6. Copy all column B cells (with CTRL-C).
7. Select Edit from the menu.
8. Select Past Special from the menu.
9. In the dialog box that opens, unselect formulas, select the desired conditions, and press OK.
10. You can now delete column A.
11. Save ASAP.
If a cell is formatted as text (#) then everything you enter in the cell is treated as text.
You can eliminate all the apostrophes in those cells:
Change the text format in the range to date format.
with Find & Replace:
Find: .*
Replace: &
In more options: mark selected range and regular expressions.
Select the range if not selected.
Replace All.
If the column is text... my LO version has the CALC function DATEVALUE [DATUMWERT in German], which converts a date text string to a date value

Excel assume dates is in US format

I created a macro that copy a column where 02/04/2013 12:35 means 2nd of April
I then paste it and use text to columns to get rid of the time part. Excel for some reason than interpret it as 4th of February. Tried both selecting text at the last step of the text to columns and date but in both cases it get flipped.
Dates that cannot be flipped like 28/03/2013 remains correct.
If I don't use a macro but manually do it Excel doesn't flip the day and month only when running it as a macro that occurs. Noticed it occurs in another macro as well when just copy a cell with a date to another cell with a date.
You could try:
Sub Convert_Dates()
Dim Rng As Range
Set Rng = Selection
For Each c In Rng
c.Value = DateSerial(Right(Split(c)(0), 4), Mid(Split(c)(0), 4, 2), Left(Split(c)(0), 2))
Next c
End Sub
It can also help with "text dates" to use Format and "dd/mmm/yyyy" as this doesn't tend to get mixed up.