MINIFS/MAXIFS formula breaks in LibreOffice Calc but works in Excel and Sheets? - libreoffice

I'm trying to convert a bunch of spreadsheets from Excel to LibreOffice Calc and I have one formula that works perfectly in Excel and I even tried Google Sheets but it gives a #NAME? error only in LibreOffice Calc. I think it's something to do with the " " or maybe missing $ but I've tried a bunch of troubleshooting with no success. I'm new to Calc so maybe I'm missing a formatting rule...
The formula is supposed to create a min/max date range for an alphanumeric code that could be anywhere inside a cell in the range. It's used to show when an action started and when it stopped. It works perfectly in Excel and Google Sheets but not with Calc.
=TEXT(MINIFS($master data.H:H,$master data.AE:AE,"*"&B3&"*"),"yyyy")&" - "&TEXT(MAXIFS($master data.H:H,$master data.AE:AE,"*"&B3&"*"),"yyyy")
The formula should return something like 2003 - 2004 but instead it returns 1899 - 1899 for everything.
This version of the formula works perfect in Google Sheets:
=TEXT(MINIFS('master data'!H:H,'master data'!AE:AE, "*"&B3&"*"),"yyyy")&" - "&TEXT(MAXIFS('master data'!H:H,'master data'!AE:AE, "*"&B3&"*"),"yyyy")

The problem is your sheet name is 'master data', which has a space in between. Different program quotes differently.
For Calc, you should use single quote after the $, like this:
$'master data'
So your formula should be something like this:
=TEXT(MINIFS($'master data'.H:H,$'master data'.AE:AE,"*"&B3&"*"),"yyyy")&" - "&TEXT(MAXIFS($'master data'.H:H,$'master data'.AE:AE,"*"&B3&"*"),"yyyy")
In the future, if you run into issues with formula, you should break down the long formula, and try to solve each issue as you encounter it. So for this case, I simply tried to see how Calc would reference another sheet by entering = then click on a cell (say A1) in "master data". The result was:
=$'master data'.A1

Related

How to vertically list all days of the month in Google Sheets

With Populate a Full Month’s Dates Based on a Drop-down in Google Sheets how to I was able to list all days of a month next to each other.
=TRANSPOSE(ARRAY_CONSTRAIN(ArrayFormula(date($A$1;MONTH(A2&1);1)+transpose(COLUMN($C$1:$BK$1)-3));DAY(EOMONTH(date($A$1;MONTH(A2&1);1);0));1))
What do I need to change in the current formula to list them below each other?
I am going to take a wild guess and say Erase the word "transpose()"
=(ARRAY_CONSTRAIN(ArrayFormula(date($A$1;MONTH(A2&1);1)+transpose(COLUMN($C$1:$BK$1)-3));DAY(EOMONTH(date($A$1;MONTH(A2&1);1);0));1)
Remove the TRANSPOSE function invocation:
=ARRAY_CONSTRAIN(ArrayFormula(date($A$1;MONTH(A2&1);1)+transpose(COLUMN($C$1:$BK$1)-3));DAY(EOMONTH(date($A$1;MONTH(A2&1);1);0));1)
EDIT
(Following your commentHow to vertically list all days of the month in Google Sheets)
I gave it a try but I got a Parse error.
ALWAYS CHECK YOUR LOCALE (when using copy/paste)
In your case you ONLY have to change , to ;.
So the formulas will be
For Horizontal
=TRANSPOSE(SEQUENCE(DAY(EOMONTH(A1&A2;0));1;A1&A2;1))
For Vertical
=SEQUENCE(DAY(EOMONTH(A1&A2;0));1;A1&A2;1)
Use twice and format accordingly.
Original answer.
Instead of that long formula try this one.
For Horizontal
=TRANSPOSE(SEQUENCE(DAY(EOMONTH(A1&A2,0)),1,A1&A2,1))
For Vertical
=SEQUENCE(DAY(EOMONTH(A1&A2,0)),1,A1&A2,1)
Use twice and format accordingly.
That`s great but the dates I am getting are not in a chronological order since their "code" is something like 44324 and they are order by it.

Extract word between two words in Tableau

My data in a single column looks like this
Environment: PROD_A
JobName: MY JOB NAME 1
MemName: Some_Script_names
My aim is to create a calculated field where it fetches JobName.
In above sample. The output should be MY_JOB_NAME_1
Here's my code in Tableau -
MID([Description],FIND([Description],"JobName: ")+9,
FIND([Description],"MemName: ")-FIND([Description],"JobName: ")-9)
The above logic is same as excel function below. It basically finds first word and last word and then picks the one in between.
=MID(A1,SEARCH("JobName: ",A1)+9,SEARCH("MemName",A1)-SEARCH("JobName: ",A1)-9)
Issue -
Tableau is showing blank data. Not sure where my logic is wrong. Any help is appreciated.
You may be able to use REGEX funtions (depending on your data source). Try this: REGEXP_EXTRACT([Data],'JobName: (.*)')
I see that you commented that the text is in one cell and not one column as you wrote in question.
This finds the JobName and uses that position plus the lenght of it as the startposition, then finds MemName as the endposition (and calculates the number of characters between them)
=MID(A1,FIND("JobName: ",A1)+LEN("JobName: "),FIND("MemName",A1,FIND("JobName: ",A1)+LEN("JobName: ")+1)-(FIND("JobName: ",A1)+Len("JobName: ")))
The following tableau calc works, this assumes that there is no space after MY_JOB_NAME_1 and "MemName:"
MID([Text],
FIND([Text],'JobName: ')+10,
FIND(
MID([Text],
FIND([Text],'JobName: ')+10)," ")-9)

Convert spreadsheet to .csv on command line without evaluating formulas

I want to convert a spreadsheet (e.g. .xls or from LibreOffice Calc) to some text format, e.g. .csv, without evaluating formulas so the formulas are stored in the text file. I know that LibreOffice has an option "Save cell formula instead of calculated values" when saving as .csv and according to How to export spreadsheet to CSV without evaluating formulas Excel can do this too, but I'd like to do it on command line. I know that ssconvert from the Gnumeric package can convert on command line but as fa as I ca see there's no option to keep the formulas.
The bigger picture is that I want to write a script that takes two versions of an .ods file, converts them and shows the differences. When only one cell has really changed but many other cells depend on it, then I want to see only the real change.
I have used xls2csv under Cygwin. Just a Google search shows many implementations. I would start there.
http://search.cpan.org/~ken/xls2csv-1.07/script/xls2csv

Google spreadsheet dates/times broken compared to Excel?

Apologies for yet another date/time related post. I haven't got my head around this yet, so any comments welcome. Executive summary: Excel can be used to work with small elapsed times (athletic event times, and so on), but Sheets can't, because you need to write a script to display small times, and the script screws something up so that Sheets no longer treats the cell as a time when the time is later manually changed.
The times I need are normally short, in the region of a couple of minutes, with seconds to 2 decimal places. I have to do arithmetic on these times (normally only comparisons to another time).
We currently store everything in Excel, which works fine. If you define a custom display format in a range, and then enter times as something like 2:43.02 (2 mins, 43.02s), then the cell still contains a time, and Excel can do arithmetic on those times.
I then upload the Excel spreadsheet, and open it in Sheets. There is no built-in formatting extension, as there is in Excel, so I have to use an extension function to display the time as 2:43.02, for example (see below; the function calls setNumberFormat). In the new Sheets version of the document, Excel times are still times, and comparison works, and everything looks right.
Here's the problem. Everything only works until you manually enter a new time into a Sheets cell. If I enter 2:41.05, for example, the cell no longer contains a time object, and all arithmetic is broken. So, I can't use Sheets to replace Excel. I have to keep everything in Excel and upload it occasionally, keeping the Sheets version as read-only.
There's some magic in Sheets which determines whether a cell contains a date or not. If I use a built-in time format, then Sheets knows it's a time, and can do arithmetic if the time is manually changed. If I change the time format using the function below (from here), then that magic is lost, and I can't manually change the time.
function EditFormat() {
var oldname = SpreadsheetApp.getActiveRange().getNumberFormat();
var name = Browser.inputBox("Current format (blank = no change):\r\n"+ oldname);
SpreadsheetApp.getActiveRange().setNumberFormat((name=="")?oldname:name);
}
Question: is setNumberFormat broken? Is there a better way to do all this? Can I do something else in the script which retains the cell's magic status as a time? Or do I have to go back to Excel?
Thanks.
This is due to a (sadly long-standing) Sheets bug whereby the parser fails in two respects:
The format 2:43.02 is not successfully coerced into a time value, but the format 0:02:43.02 (or 0:2:43.02) is.
Even so, the hundredths of seconds are ignored for directly entered values.
Both points apply for all values in the spreadsheet, however only point two applies for directly entered values. So a workaround is to enter via a formula:
=VALUE("0:2:43.02")
or you could have an input column that is formatted as plain text, and then have a display column that similarly converts to a time value via formula (and this display column would be custom formatted). Or, you could have a helper script that presents an input box for the active cell, where you enter the split time, and then creates a formula like above and populates it in the cell (the set number format could be built in to this script as well).
I wish these workarounds were unnecessary.

Perl Excel preview problem in Outlook

I am generating Excel report in Perl.
I am using the Formula in the cell, it's working fine, but in Outlook when I see through preview file, the cell is showing something like Spreadsheet::WriteExcel::Format=HASH(0x87d6d04) instead of total.
I am using simple forumulas only, like =sum(B1:B10) or =sum(A1,B2).
How to fix this?
outlook excel preview
You probably need to use the write_formula method rather than the plain write one.
For example,
$worksheet->write_formula(1, 0, '=SIN(B1:B10)');
From the documentation on CPAN for Spreadsheet::WriteExcel
In your code:
$worksheet->write(..., $format05,$font );
You have an unnecessary trailing $fontat the end of that method call which is being passed to write_formula() (via write()) as an optional result for the formula.
That is what is showing up as the formula result in Outlook.