Skip to content

Commit 9b55f4f

Browse files
stanimxuri
andauthored
This closes qax-os#1006, new fn: MONTH ref qax-os#65
Co-authored-by: xuri <xuri.me@gmail.com>
1 parent 4d716fa commit 9b55f4f

File tree

2 files changed

+45
-1
lines changed

2 files changed

+45
-1
lines changed

calc.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -504,6 +504,7 @@ type formulaFuncs struct {
504504
// VAR.P
505505
// VARP
506506
// VLOOKUP
507+
// YEAR
507508
//
508509
func (f *File) CalcCellValue(sheet, cell string) (result string, err error) {
509510
var (
@@ -6445,6 +6446,36 @@ func (fn *formulaFuncs) MONTH(argsList *list.List) formulaArg {
64456446
return newNumberFormulaArg(float64(timeFromExcelTime(num.Number, false).Month()))
64466447
}
64476448

6449+
// YEAR function returns an integer representing the year of a supplied date.
6450+
// The syntax of the function is:
6451+
//
6452+
// YEAR(serial_number)
6453+
//
6454+
func (fn *formulaFuncs) YEAR(argsList *list.List) formulaArg {
6455+
if argsList.Len() != 1 {
6456+
return newErrorFormulaArg(formulaErrorVALUE, "YEAR requires exactly 1 argument")
6457+
}
6458+
arg := argsList.Front().Value.(formulaArg)
6459+
num := arg.ToNumber()
6460+
if num.Type != ArgNumber {
6461+
dateString := strings.ToLower(arg.Value())
6462+
if !isDateOnlyFmt(dateString) {
6463+
if _, _, _, _, _, err := strToTime(dateString); err.Type == ArgError {
6464+
return err
6465+
}
6466+
}
6467+
year, _, _, _, err := strToDate(dateString)
6468+
if err.Type == ArgError {
6469+
return err
6470+
}
6471+
return newNumberFormulaArg(float64(year))
6472+
}
6473+
if num.Number < 0 {
6474+
return newErrorFormulaArg(formulaErrorNUM, "YEAR only accepts positive argument")
6475+
}
6476+
return newNumberFormulaArg(float64(timeFromExcelTime(num.Number, false).Year()))
6477+
}
6478+
64486479
// NOW function returns the current date and time. The function receives no
64496480
// arguments and therefore. The syntax of the function is:
64506481
//

calc_test.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -965,6 +965,13 @@ func TestCalcCellValue(t *testing.T) {
965965
// MONTH
966966
"=MONTH(42171)": "6",
967967
"=MONTH(\"31-May-2015\")": "5",
968+
// YEAR
969+
"=YEAR(15)": "1900",
970+
"=YEAR(\"15\")": "1900",
971+
"=YEAR(2048)": "1905",
972+
"=YEAR(42171)": "2015",
973+
"=YEAR(\"29-May-2015\")": "2015",
974+
"=YEAR(\"05/03/1984\")": "1984",
968975
// Text Functions
969976
// CHAR
970977
"=CHAR(65)": "A",
@@ -1986,10 +1993,16 @@ func TestCalcCellValue(t *testing.T) {
19861993
"=DAY(\"0-January-1900\")": "#VALUE!",
19871994
// MONTH
19881995
"=MONTH()": "MONTH requires exactly 1 argument",
1989-
"=MONTH(43891,43101)": "MONTH requires exactly 1 argument",
1996+
"=MONTH(0,0)": "MONTH requires exactly 1 argument",
19901997
"=MONTH(-1)": "MONTH only accepts positive argument",
19911998
"=MONTH(\"text\")": "#VALUE!",
19921999
"=MONTH(\"January 25, 100\")": "#VALUE!",
2000+
// YEAR
2001+
"=YEAR()": "YEAR requires exactly 1 argument",
2002+
"=YEAR(0,0)": "YEAR requires exactly 1 argument",
2003+
"=YEAR(-1)": "YEAR only accepts positive argument",
2004+
"=YEAR(\"text\")": "#VALUE!",
2005+
"=YEAR(\"January 25, 100\")": "#VALUE!",
19932006
// NOW
19942007
"=NOW(A1)": "NOW accepts no arguments",
19952008
// TODAY

0 commit comments

Comments
 (0)