OSDN Git Service

This closes #1244 and closes #1314, improving the compatibility with Google Sheet
authorxuri <xuri.me@gmail.com>
Sat, 13 Aug 2022 03:21:59 +0000 (11:21 +0800)
committerxuri <xuri.me@gmail.com>
Sat, 13 Aug 2022 03:21:59 +0000 (11:21 +0800)
- Format code with `gofmt`

27 files changed:
adjust.go
calc.go
cell.go
chart.go
col.go
comment.go
crypt.go
datavalidation.go
docProps.go
excelize.go
file.go
lib.go
merge.go
picture.go
pivotTable.go
rows.go
shape.go
sheet.go
sheetpr.go
sheetview.go
sparkline.go
stream.go
styles.go
table.go
workbook.go
xmlCalcChain.go
xmlWorksheet.go

index d766b3e..99d2850 100644 (file)
--- a/adjust.go
+++ b/adjust.go
@@ -35,7 +35,6 @@ const (
 // offset: Number of rows/column to insert/delete negative values indicate deletion
 //
 // TODO: adjustPageBreaks, adjustComments, adjustDataValidations, adjustProtectedCells
-//
 func (f *File) adjustHelper(sheet string, dir adjustDirection, num, offset int) error {
        ws, err := f.workSheetReader(sheet)
        if err != nil {
diff --git a/calc.go b/calc.go
index d8161ce..0cdb91e 100644 (file)
--- a/calc.go
+++ b/calc.go
@@ -331,441 +331,440 @@ type formulaFuncs struct {
 //
 // Supported formula functions:
 //
-//    ABS
-//    ACCRINT
-//    ACCRINTM
-//    ACOS
-//    ACOSH
-//    ACOT
-//    ACOTH
-//    ADDRESS
-//    AMORDEGRC
-//    AMORLINC
-//    AND
-//    ARABIC
-//    ASIN
-//    ASINH
-//    ATAN
-//    ATAN2
-//    ATANH
-//    AVEDEV
-//    AVERAGE
-//    AVERAGEA
-//    AVERAGEIF
-//    AVERAGEIFS
-//    BASE
-//    BESSELI
-//    BESSELJ
-//    BESSELK
-//    BESSELY
-//    BETADIST
-//    BETA.DIST
-//    BETAINV
-//    BETA.INV
-//    BIN2DEC
-//    BIN2HEX
-//    BIN2OCT
-//    BINOMDIST
-//    BINOM.DIST
-//    BINOM.DIST.RANGE
-//    BINOM.INV
-//    BITAND
-//    BITLSHIFT
-//    BITOR
-//    BITRSHIFT
-//    BITXOR
-//    CEILING
-//    CEILING.MATH
-//    CEILING.PRECISE
-//    CHAR
-//    CHIDIST
-//    CHIINV
-//    CHITEST
-//    CHISQ.DIST
-//    CHISQ.DIST.RT
-//    CHISQ.INV
-//    CHISQ.INV.RT
-//    CHISQ.TEST
-//    CHOOSE
-//    CLEAN
-//    CODE
-//    COLUMN
-//    COLUMNS
-//    COMBIN
-//    COMBINA
-//    COMPLEX
-//    CONCAT
-//    CONCATENATE
-//    CONFIDENCE
-//    CONFIDENCE.NORM
-//    CONFIDENCE.T
-//    CONVERT
-//    CORREL
-//    COS
-//    COSH
-//    COT
-//    COTH
-//    COUNT
-//    COUNTA
-//    COUNTBLANK
-//    COUNTIF
-//    COUNTIFS
-//    COUPDAYBS
-//    COUPDAYS
-//    COUPDAYSNC
-//    COUPNCD
-//    COUPNUM
-//    COUPPCD
-//    COVAR
-//    COVARIANCE.P
-//    COVARIANCE.S
-//    CRITBINOM
-//    CSC
-//    CSCH
-//    CUMIPMT
-//    CUMPRINC
-//    DATE
-//    DATEDIF
-//    DATEVALUE
-//    DAVERAGE
-//    DAY
-//    DAYS
-//    DAYS360
-//    DB
-//    DCOUNT
-//    DCOUNTA
-//    DDB
-//    DEC2BIN
-//    DEC2HEX
-//    DEC2OCT
-//    DECIMAL
-//    DEGREES
-//    DELTA
-//    DEVSQ
-//    DGET
-//    DISC
-//    DMAX
-//    DMIN
-//    DOLLARDE
-//    DOLLARFR
-//    DPRODUCT
-//    DSTDEV
-//    DSTDEVP
-//    DSUM
-//    DURATION
-//    DVAR
-//    DVARP
-//    EFFECT
-//    EDATE
-//    ENCODEURL
-//    EOMONTH
-//    ERF
-//    ERF.PRECISE
-//    ERFC
-//    ERFC.PRECISE
-//    ERROR.TYPE
-//    EUROCONVERT
-//    EVEN
-//    EXACT
-//    EXP
-//    EXPON.DIST
-//    EXPONDIST
-//    FACT
-//    FACTDOUBLE
-//    FALSE
-//    F.DIST
-//    F.DIST.RT
-//    FDIST
-//    FIND
-//    FINDB
-//    F.INV
-//    F.INV.RT
-//    FINV
-//    FISHER
-//    FISHERINV
-//    FIXED
-//    FLOOR
-//    FLOOR.MATH
-//    FLOOR.PRECISE
-//    FORMULATEXT
-//    F.TEST
-//    FTEST
-//    FV
-//    FVSCHEDULE
-//    GAMMA
-//    GAMMA.DIST
-//    GAMMADIST
-//    GAMMA.INV
-//    GAMMAINV
-//    GAMMALN
-//    GAMMALN.PRECISE
-//    GAUSS
-//    GCD
-//    GEOMEAN
-//    GESTEP
-//    GROWTH
-//    HARMEAN
-//    HEX2BIN
-//    HEX2DEC
-//    HEX2OCT
-//    HLOOKUP
-//    HOUR
-//    HYPERLINK
-//    HYPGEOM.DIST
-//    HYPGEOMDIST
-//    IF
-//    IFERROR
-//    IFNA
-//    IFS
-//    IMABS
-//    IMAGINARY
-//    IMARGUMENT
-//    IMCONJUGATE
-//    IMCOS
-//    IMCOSH
-//    IMCOT
-//    IMCSC
-//    IMCSCH
-//    IMDIV
-//    IMEXP
-//    IMLN
-//    IMLOG10
-//    IMLOG2
-//    IMPOWER
-//    IMPRODUCT
-//    IMREAL
-//    IMSEC
-//    IMSECH
-//    IMSIN
-//    IMSINH
-//    IMSQRT
-//    IMSUB
-//    IMSUM
-//    IMTAN
-//    INDEX
-//    INDIRECT
-//    INT
-//    INTRATE
-//    IPMT
-//    IRR
-//    ISBLANK
-//    ISERR
-//    ISERROR
-//    ISEVEN
-//    ISFORMULA
-//    ISLOGICAL
-//    ISNA
-//    ISNONTEXT
-//    ISNUMBER
-//    ISODD
-//    ISREF
-//    ISTEXT
-//    ISO.CEILING
-//    ISOWEEKNUM
-//    ISPMT
-//    KURT
-//    LARGE
-//    LCM
-//    LEFT
-//    LEFTB
-//    LEN
-//    LENB
-//    LN
-//    LOG
-//    LOG10
-//    LOGINV
-//    LOGNORM.DIST
-//    LOGNORMDIST
-//    LOGNORM.INV
-//    LOOKUP
-//    LOWER
-//    MATCH
-//    MAX
-//    MAXA
-//    MAXIFS
-//    MDETERM
-//    MDURATION
-//    MEDIAN
-//    MID
-//    MIDB
-//    MIN
-//    MINA
-//    MINIFS
-//    MINUTE
-//    MINVERSE
-//    MIRR
-//    MMULT
-//    MOD
-//    MODE
-//    MODE.MULT
-//    MODE.SNGL
-//    MONTH
-//    MROUND
-//    MULTINOMIAL
-//    MUNIT
-//    N
-//    NA
-//    NEGBINOM.DIST
-//    NEGBINOMDIST
-//    NETWORKDAYS
-//    NETWORKDAYS.INTL
-//    NOMINAL
-//    NORM.DIST
-//    NORMDIST
-//    NORM.INV
-//    NORMINV
-//    NORM.S.DIST
-//    NORMSDIST
-//    NORM.S.INV
-//    NORMSINV
-//    NOT
-//    NOW
-//    NPER
-//    NPV
-//    OCT2BIN
-//    OCT2DEC
-//    OCT2HEX
-//    ODD
-//    ODDFPRICE
-//    OR
-//    PDURATION
-//    PEARSON
-//    PERCENTILE.EXC
-//    PERCENTILE.INC
-//    PERCENTILE
-//    PERCENTRANK.EXC
-//    PERCENTRANK.INC
-//    PERCENTRANK
-//    PERMUT
-//    PERMUTATIONA
-//    PHI
-//    PI
-//    PMT
-//    POISSON.DIST
-//    POISSON
-//    POWER
-//    PPMT
-//    PRICE
-//    PRICEDISC
-//    PRICEMAT
-//    PRODUCT
-//    PROPER
-//    PV
-//    QUARTILE
-//    QUARTILE.EXC
-//    QUARTILE.INC
-//    QUOTIENT
-//    RADIANS
-//    RAND
-//    RANDBETWEEN
-//    RANK
-//    RANK.EQ
-//    RATE
-//    RECEIVED
-//    REPLACE
-//    REPLACEB
-//    REPT
-//    RIGHT
-//    RIGHTB
-//    ROMAN
-//    ROUND
-//    ROUNDDOWN
-//    ROUNDUP
-//    ROW
-//    ROWS
-//    RRI
-//    RSQ
-//    SEC
-//    SECH
-//    SECOND
-//    SERIESSUM
-//    SHEET
-//    SHEETS
-//    SIGN
-//    SIN
-//    SINH
-//    SKEW
-//    SKEW.P
-//    SLN
-//    SLOPE
-//    SMALL
-//    SQRT
-//    SQRTPI
-//    STANDARDIZE
-//    STDEV
-//    STDEV.P
-//    STDEV.S
-//    STDEVA
-//    STDEVP
-//    STDEVPA
-//    STEYX
-//    SUBSTITUTE
-//    SUM
-//    SUMIF
-//    SUMIFS
-//    SUMPRODUCT
-//    SUMSQ
-//    SUMX2MY2
-//    SUMX2PY2
-//    SUMXMY2
-//    SWITCH
-//    SYD
-//    T
-//    TAN
-//    TANH
-//    TBILLEQ
-//    TBILLPRICE
-//    TBILLYIELD
-//    T.DIST
-//    T.DIST.2T
-//    T.DIST.RT
-//    TDIST
-//    TEXTJOIN
-//    TIME
-//    TIMEVALUE
-//    T.INV
-//    T.INV.2T
-//    TINV
-//    TODAY
-//    TRANSPOSE
-//    TREND
-//    TRIM
-//    TRIMMEAN
-//    TRUE
-//    TRUNC
-//    T.TEST
-//    TTEST
-//    TYPE
-//    UNICHAR
-//    UNICODE
-//    UPPER
-//    VALUE
-//    VAR
-//    VAR.P
-//    VAR.S
-//    VARA
-//    VARP
-//    VARPA
-//    VDB
-//    VLOOKUP
-//    WEEKDAY
-//    WEEKNUM
-//    WEIBULL
-//    WEIBULL.DIST
-//    WORKDAY
-//    WORKDAY.INTL
-//    XIRR
-//    XLOOKUP
-//    XNPV
-//    XOR
-//    YEAR
-//    YEARFRAC
-//    YIELD
-//    YIELDDISC
-//    YIELDMAT
-//    Z.TEST
-//    ZTEST
-//
+//     ABS
+//     ACCRINT
+//     ACCRINTM
+//     ACOS
+//     ACOSH
+//     ACOT
+//     ACOTH
+//     ADDRESS
+//     AMORDEGRC
+//     AMORLINC
+//     AND
+//     ARABIC
+//     ASIN
+//     ASINH
+//     ATAN
+//     ATAN2
+//     ATANH
+//     AVEDEV
+//     AVERAGE
+//     AVERAGEA
+//     AVERAGEIF
+//     AVERAGEIFS
+//     BASE
+//     BESSELI
+//     BESSELJ
+//     BESSELK
+//     BESSELY
+//     BETADIST
+//     BETA.DIST
+//     BETAINV
+//     BETA.INV
+//     BIN2DEC
+//     BIN2HEX
+//     BIN2OCT
+//     BINOMDIST
+//     BINOM.DIST
+//     BINOM.DIST.RANGE
+//     BINOM.INV
+//     BITAND
+//     BITLSHIFT
+//     BITOR
+//     BITRSHIFT
+//     BITXOR
+//     CEILING
+//     CEILING.MATH
+//     CEILING.PRECISE
+//     CHAR
+//     CHIDIST
+//     CHIINV
+//     CHITEST
+//     CHISQ.DIST
+//     CHISQ.DIST.RT
+//     CHISQ.INV
+//     CHISQ.INV.RT
+//     CHISQ.TEST
+//     CHOOSE
+//     CLEAN
+//     CODE
+//     COLUMN
+//     COLUMNS
+//     COMBIN
+//     COMBINA
+//     COMPLEX
+//     CONCAT
+//     CONCATENATE
+//     CONFIDENCE
+//     CONFIDENCE.NORM
+//     CONFIDENCE.T
+//     CONVERT
+//     CORREL
+//     COS
+//     COSH
+//     COT
+//     COTH
+//     COUNT
+//     COUNTA
+//     COUNTBLANK
+//     COUNTIF
+//     COUNTIFS
+//     COUPDAYBS
+//     COUPDAYS
+//     COUPDAYSNC
+//     COUPNCD
+//     COUPNUM
+//     COUPPCD
+//     COVAR
+//     COVARIANCE.P
+//     COVARIANCE.S
+//     CRITBINOM
+//     CSC
+//     CSCH
+//     CUMIPMT
+//     CUMPRINC
+//     DATE
+//     DATEDIF
+//     DATEVALUE
+//     DAVERAGE
+//     DAY
+//     DAYS
+//     DAYS360
+//     DB
+//     DCOUNT
+//     DCOUNTA
+//     DDB
+//     DEC2BIN
+//     DEC2HEX
+//     DEC2OCT
+//     DECIMAL
+//     DEGREES
+//     DELTA
+//     DEVSQ
+//     DGET
+//     DISC
+//     DMAX
+//     DMIN
+//     DOLLARDE
+//     DOLLARFR
+//     DPRODUCT
+//     DSTDEV
+//     DSTDEVP
+//     DSUM
+//     DURATION
+//     DVAR
+//     DVARP
+//     EFFECT
+//     EDATE
+//     ENCODEURL
+//     EOMONTH
+//     ERF
+//     ERF.PRECISE
+//     ERFC
+//     ERFC.PRECISE
+//     ERROR.TYPE
+//     EUROCONVERT
+//     EVEN
+//     EXACT
+//     EXP
+//     EXPON.DIST
+//     EXPONDIST
+//     FACT
+//     FACTDOUBLE
+//     FALSE
+//     F.DIST
+//     F.DIST.RT
+//     FDIST
+//     FIND
+//     FINDB
+//     F.INV
+//     F.INV.RT
+//     FINV
+//     FISHER
+//     FISHERINV
+//     FIXED
+//     FLOOR
+//     FLOOR.MATH
+//     FLOOR.PRECISE
+//     FORMULATEXT
+//     F.TEST
+//     FTEST
+//     FV
+//     FVSCHEDULE
+//     GAMMA
+//     GAMMA.DIST
+//     GAMMADIST
+//     GAMMA.INV
+//     GAMMAINV
+//     GAMMALN
+//     GAMMALN.PRECISE
+//     GAUSS
+//     GCD
+//     GEOMEAN
+//     GESTEP
+//     GROWTH
+//     HARMEAN
+//     HEX2BIN
+//     HEX2DEC
+//     HEX2OCT
+//     HLOOKUP
+//     HOUR
+//     HYPERLINK
+//     HYPGEOM.DIST
+//     HYPGEOMDIST
+//     IF
+//     IFERROR
+//     IFNA
+//     IFS
+//     IMABS
+//     IMAGINARY
+//     IMARGUMENT
+//     IMCONJUGATE
+//     IMCOS
+//     IMCOSH
+//     IMCOT
+//     IMCSC
+//     IMCSCH
+//     IMDIV
+//     IMEXP
+//     IMLN
+//     IMLOG10
+//     IMLOG2
+//     IMPOWER
+//     IMPRODUCT
+//     IMREAL
+//     IMSEC
+//     IMSECH
+//     IMSIN
+//     IMSINH
+//     IMSQRT
+//     IMSUB
+//     IMSUM
+//     IMTAN
+//     INDEX
+//     INDIRECT
+//     INT
+//     INTRATE
+//     IPMT
+//     IRR
+//     ISBLANK
+//     ISERR
+//     ISERROR
+//     ISEVEN
+//     ISFORMULA
+//     ISLOGICAL
+//     ISNA
+//     ISNONTEXT
+//     ISNUMBER
+//     ISODD
+//     ISREF
+//     ISTEXT
+//     ISO.CEILING
+//     ISOWEEKNUM
+//     ISPMT
+//     KURT
+//     LARGE
+//     LCM
+//     LEFT
+//     LEFTB
+//     LEN
+//     LENB
+//     LN
+//     LOG
+//     LOG10
+//     LOGINV
+//     LOGNORM.DIST
+//     LOGNORMDIST
+//     LOGNORM.INV
+//     LOOKUP
+//     LOWER
+//     MATCH
+//     MAX
+//     MAXA
+//     MAXIFS
+//     MDETERM
+//     MDURATION
+//     MEDIAN
+//     MID
+//     MIDB
+//     MIN
+//     MINA
+//     MINIFS
+//     MINUTE
+//     MINVERSE
+//     MIRR
+//     MMULT
+//     MOD
+//     MODE
+//     MODE.MULT
+//     MODE.SNGL
+//     MONTH
+//     MROUND
+//     MULTINOMIAL
+//     MUNIT
+//     N
+//     NA
+//     NEGBINOM.DIST
+//     NEGBINOMDIST
+//     NETWORKDAYS
+//     NETWORKDAYS.INTL
+//     NOMINAL
+//     NORM.DIST
+//     NORMDIST
+//     NORM.INV
+//     NORMINV
+//     NORM.S.DIST
+//     NORMSDIST
+//     NORM.S.INV
+//     NORMSINV
+//     NOT
+//     NOW
+//     NPER
+//     NPV
+//     OCT2BIN
+//     OCT2DEC
+//     OCT2HEX
+//     ODD
+//     ODDFPRICE
+//     OR
+//     PDURATION
+//     PEARSON
+//     PERCENTILE.EXC
+//     PERCENTILE.INC
+//     PERCENTILE
+//     PERCENTRANK.EXC
+//     PERCENTRANK.INC
+//     PERCENTRANK
+//     PERMUT
+//     PERMUTATIONA
+//     PHI
+//     PI
+//     PMT
+//     POISSON.DIST
+//     POISSON
+//     POWER
+//     PPMT
+//     PRICE
+//     PRICEDISC
+//     PRICEMAT
+//     PRODUCT
+//     PROPER
+//     PV
+//     QUARTILE
+//     QUARTILE.EXC
+//     QUARTILE.INC
+//     QUOTIENT
+//     RADIANS
+//     RAND
+//     RANDBETWEEN
+//     RANK
+//     RANK.EQ
+//     RATE
+//     RECEIVED
+//     REPLACE
+//     REPLACEB
+//     REPT
+//     RIGHT
+//     RIGHTB
+//     ROMAN
+//     ROUND
+//     ROUNDDOWN
+//     ROUNDUP
+//     ROW
+//     ROWS
+//     RRI
+//     RSQ
+//     SEC
+//     SECH
+//     SECOND
+//     SERIESSUM
+//     SHEET
+//     SHEETS
+//     SIGN
+//     SIN
+//     SINH
+//     SKEW
+//     SKEW.P
+//     SLN
+//     SLOPE
+//     SMALL
+//     SQRT
+//     SQRTPI
+//     STANDARDIZE
+//     STDEV
+//     STDEV.P
+//     STDEV.S
+//     STDEVA
+//     STDEVP
+//     STDEVPA
+//     STEYX
+//     SUBSTITUTE
+//     SUM
+//     SUMIF
+//     SUMIFS
+//     SUMPRODUCT
+//     SUMSQ
+//     SUMX2MY2
+//     SUMX2PY2
+//     SUMXMY2
+//     SWITCH
+//     SYD
+//     T
+//     TAN
+//     TANH
+//     TBILLEQ
+//     TBILLPRICE
+//     TBILLYIELD
+//     T.DIST
+//     T.DIST.2T
+//     T.DIST.RT
+//     TDIST
+//     TEXTJOIN
+//     TIME
+//     TIMEVALUE
+//     T.INV
+//     T.INV.2T
+//     TINV
+//     TODAY
+//     TRANSPOSE
+//     TREND
+//     TRIM
+//     TRIMMEAN
+//     TRUE
+//     TRUNC
+//     T.TEST
+//     TTEST
+//     TYPE
+//     UNICHAR
+//     UNICODE
+//     UPPER
+//     VALUE
+//     VAR
+//     VAR.P
+//     VAR.S
+//     VARA
+//     VARP
+//     VARPA
+//     VDB
+//     VLOOKUP
+//     WEEKDAY
+//     WEEKNUM
+//     WEIBULL
+//     WEIBULL.DIST
+//     WORKDAY
+//     WORKDAY.INTL
+//     XIRR
+//     XLOOKUP
+//     XNPV
+//     XOR
+//     YEAR
+//     YEARFRAC
+//     YIELD
+//     YIELDDISC
+//     YIELDMAT
+//     Z.TEST
+//     ZTEST
 func (f *File) CalcCellValue(sheet, cell string) (result string, err error) {
        return f.calcCellValue(&calcContext{
                entry:      fmt.Sprintf("%s!%s", sheet, cell),
@@ -857,15 +856,14 @@ func newEmptyFormulaArg() formulaArg {
 // lexical analysis. Evaluate an infix expression containing formulas by
 // stacks:
 //
-//    opd  - Operand
-//    opt  - Operator
-//    opf  - Operation formula
-//    opfd - Operand of the operation formula
-//    opft - Operator of the operation formula
-//    args - Arguments list of the operation formula
+//     opd  - Operand
+//     opt  - Operator
+//     opf  - Operation formula
+//     opfd - Operand of the operation formula
+//     opft - Operator of the operation formula
+//     args - Arguments list of the operation formula
 //
 // TODO: handle subtypes: Nothing, Text, Logical, Error, Concatenation, Intersection, Union
-//
 func (f *File) evalInfixExp(ctx *calcContext, sheet, cell string, tokens []efp.Token) (formulaArg, error) {
        var err error
        opdStack, optStack, opfStack, opfdStack, opftStack, argsStack := NewStack(), NewStack(), NewStack(), NewStack(), NewStack(), NewStack()
@@ -1692,8 +1690,7 @@ func formulaCriteriaEval(val string, criteria *formulaCriteria) (result bool, er
 // Bessel function evaluated for purely imaginary arguments. The syntax of
 // the Besseli function is:
 //
-//    BESSELI(x,n)
-//
+//     BESSELI(x,n)
 func (fn *formulaFuncs) BESSELI(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "BESSELI requires 2 numeric arguments")
@@ -1704,8 +1701,7 @@ func (fn *formulaFuncs) BESSELI(argsList *list.List) formulaArg {
 // BESSELJ function returns the Bessel function, Jn(x), for a specified order
 // and value of x. The syntax of the function is:
 //
-//    BESSELJ(x,n)
-//
+//     BESSELJ(x,n)
 func (fn *formulaFuncs) BESSELJ(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "BESSELJ requires 2 numeric arguments")
@@ -1752,8 +1748,7 @@ func (fn *formulaFuncs) bassel(argsList *list.List, modfied bool) formulaArg {
 // the Bessel functions, evaluated for purely imaginary arguments. The syntax
 // of the function is:
 //
-//    BESSELK(x,n)
-//
+//     BESSELK(x,n)
 func (fn *formulaFuncs) BESSELK(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "BESSELK requires 2 numeric arguments")
@@ -1832,8 +1827,7 @@ func (fn *formulaFuncs) besselK2(x, n formulaArg) float64 {
 // Weber function or the Neumann function), for a specified order and value
 // of x. The syntax of the function is:
 //
-//    BESSELY(x,n)
-//
+//     BESSELY(x,n)
 func (fn *formulaFuncs) BESSELY(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "BESSELY requires 2 numeric arguments")
@@ -1913,8 +1907,7 @@ func (fn *formulaFuncs) besselY2(x, n formulaArg) float64 {
 // BIN2DEC function converts a Binary (a base-2 number) into a decimal number.
 // The syntax of the function is:
 //
-//    BIN2DEC(number)
-//
+//     BIN2DEC(number)
 func (fn *formulaFuncs) BIN2DEC(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "BIN2DEC requires 1 numeric argument")
@@ -1930,8 +1923,7 @@ func (fn *formulaFuncs) BIN2DEC(argsList *list.List) formulaArg {
 // BIN2HEX function converts a Binary (Base 2) number into a Hexadecimal
 // (Base 16) number. The syntax of the function is:
 //
-//    BIN2HEX(number,[places])
-//
+//     BIN2HEX(number,[places])
 func (fn *formulaFuncs) BIN2HEX(argsList *list.List) formulaArg {
        if argsList.Len() < 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "BIN2HEX requires at least 1 argument")
@@ -1958,8 +1950,7 @@ func (fn *formulaFuncs) BIN2HEX(argsList *list.List) formulaArg {
 // BIN2OCT function converts a Binary (Base 2) number into an Octal (Base 8)
 // number. The syntax of the function is:
 //
-//    BIN2OCT(number,[places])
-//
+//     BIN2OCT(number,[places])
 func (fn *formulaFuncs) BIN2OCT(argsList *list.List) formulaArg {
        if argsList.Len() < 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "BIN2OCT requires at least 1 argument")
@@ -2006,8 +1997,7 @@ func (fn *formulaFuncs) bin2dec(number string) formulaArg {
 // BITAND function returns the bitwise 'AND' for two supplied integers. The
 // syntax of the function is:
 //
-//    BITAND(number1,number2)
-//
+//     BITAND(number1,number2)
 func (fn *formulaFuncs) BITAND(argsList *list.List) formulaArg {
        return fn.bitwise("BITAND", argsList)
 }
@@ -2015,8 +2005,7 @@ func (fn *formulaFuncs) BITAND(argsList *list.List) formulaArg {
 // BITLSHIFT function returns a supplied integer, shifted left by a specified
 // number of bits. The syntax of the function is:
 //
-//    BITLSHIFT(number1,shift_amount)
-//
+//     BITLSHIFT(number1,shift_amount)
 func (fn *formulaFuncs) BITLSHIFT(argsList *list.List) formulaArg {
        return fn.bitwise("BITLSHIFT", argsList)
 }
@@ -2024,8 +2013,7 @@ func (fn *formulaFuncs) BITLSHIFT(argsList *list.List) formulaArg {
 // BITOR function returns the bitwise 'OR' for two supplied integers. The
 // syntax of the function is:
 //
-//    BITOR(number1,number2)
-//
+//     BITOR(number1,number2)
 func (fn *formulaFuncs) BITOR(argsList *list.List) formulaArg {
        return fn.bitwise("BITOR", argsList)
 }
@@ -2033,8 +2021,7 @@ func (fn *formulaFuncs) BITOR(argsList *list.List) formulaArg {
 // BITRSHIFT function returns a supplied integer, shifted right by a specified
 // number of bits. The syntax of the function is:
 //
-//    BITRSHIFT(number1,shift_amount)
-//
+//     BITRSHIFT(number1,shift_amount)
 func (fn *formulaFuncs) BITRSHIFT(argsList *list.List) formulaArg {
        return fn.bitwise("BITRSHIFT", argsList)
 }
@@ -2042,8 +2029,7 @@ func (fn *formulaFuncs) BITRSHIFT(argsList *list.List) formulaArg {
 // BITXOR function returns the bitwise 'XOR' (exclusive 'OR') for two supplied
 // integers. The syntax of the function is:
 //
-//    BITXOR(number1,number2)
-//
+//     BITXOR(number1,number2)
 func (fn *formulaFuncs) BITXOR(argsList *list.List) formulaArg {
        return fn.bitwise("BITXOR", argsList)
 }
@@ -2077,8 +2063,7 @@ func (fn *formulaFuncs) bitwise(name string, argsList *list.List) formulaArg {
 // imaginary coefficients of a complex number, and from these, creates a
 // complex number. The syntax of the function is:
 //
-//    COMPLEX(real_num,i_num,[suffix])
-//
+//     COMPLEX(real_num,i_num,[suffix])
 func (fn *formulaFuncs) COMPLEX(argsList *list.List) formulaArg {
        if argsList.Len() < 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "COMPLEX requires at least 2 arguments")
@@ -2631,8 +2616,7 @@ func convertTemperature(fromUOM, toUOM string, value float64) float64 {
 // CONVERT function converts a number from one unit type (e.g. Yards) to
 // another unit type (e.g. Meters). The syntax of the function is:
 //
-//    CONVERT(number,from_unit,to_unit)
-//
+//     CONVERT(number,from_unit,to_unit)
 func (fn *formulaFuncs) CONVERT(argsList *list.List) formulaArg {
        if argsList.Len() != 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "CONVERT requires 3 arguments")
@@ -2663,8 +2647,7 @@ func (fn *formulaFuncs) CONVERT(argsList *list.List) formulaArg {
 // DEC2BIN function converts a decimal number into a Binary (Base 2) number.
 // The syntax of the function is:
 //
-//    DEC2BIN(number,[places])
-//
+//     DEC2BIN(number,[places])
 func (fn *formulaFuncs) DEC2BIN(argsList *list.List) formulaArg {
        return fn.dec2x("DEC2BIN", argsList)
 }
@@ -2672,8 +2655,7 @@ func (fn *formulaFuncs) DEC2BIN(argsList *list.List) formulaArg {
 // DEC2HEX function converts a decimal number into a Hexadecimal (Base 16)
 // number. The syntax of the function is:
 //
-//    DEC2HEX(number,[places])
-//
+//     DEC2HEX(number,[places])
 func (fn *formulaFuncs) DEC2HEX(argsList *list.List) formulaArg {
        return fn.dec2x("DEC2HEX", argsList)
 }
@@ -2681,8 +2663,7 @@ func (fn *formulaFuncs) DEC2HEX(argsList *list.List) formulaArg {
 // DEC2OCT function converts a decimal number into an Octal (Base 8) number.
 // The syntax of the function is:
 //
-//    DEC2OCT(number,[places])
-//
+//     DEC2OCT(number,[places])
 func (fn *formulaFuncs) DEC2OCT(argsList *list.List) formulaArg {
        return fn.dec2x("DEC2OCT", argsList)
 }
@@ -2761,8 +2742,7 @@ func (fn *formulaFuncs) dec2x(name string, argsList *list.List) formulaArg {
 // Delta. i.e. the function returns 1 if the two supplied numbers are equal
 // and 0 otherwise. The syntax of the function is:
 //
-//    DELTA(number1,[number2])
-//
+//     DELTA(number1,[number2])
 func (fn *formulaFuncs) DELTA(argsList *list.List) formulaArg {
        if argsList.Len() < 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "DELTA requires at least 1 argument")
@@ -2786,8 +2766,7 @@ func (fn *formulaFuncs) DELTA(argsList *list.List) formulaArg {
 // ERF function calculates the Error Function, integrated between two supplied
 // limits. The syntax of the function is:
 //
-//    ERF(lower_limit,[upper_limit])
-//
+//     ERF(lower_limit,[upper_limit])
 func (fn *formulaFuncs) ERF(argsList *list.List) formulaArg {
        if argsList.Len() < 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "ERF requires at least 1 argument")
@@ -2812,8 +2791,7 @@ func (fn *formulaFuncs) ERF(argsList *list.List) formulaArg {
 // ERFdotPRECISE function calculates the Error Function, integrated between a
 // supplied lower or upper limit and 0. The syntax of the function is:
 //
-//    ERF.PRECISE(x)
-//
+//     ERF.PRECISE(x)
 func (fn *formulaFuncs) ERFdotPRECISE(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "ERF.PRECISE requires 1 argument")
@@ -2841,8 +2819,7 @@ func (fn *formulaFuncs) erfc(name string, argsList *list.List) formulaArg {
 // between a supplied lower limit and infinity. The syntax of the function
 // is:
 //
-//    ERFC(x)
-//
+//     ERFC(x)
 func (fn *formulaFuncs) ERFC(argsList *list.List) formulaArg {
        return fn.erfc("ERFC", argsList)
 }
@@ -2851,8 +2828,7 @@ func (fn *formulaFuncs) ERFC(argsList *list.List) formulaArg {
 // integrated between a supplied lower limit and infinity. The syntax of the
 // function is:
 //
-//    ERFC(x)
-//
+//     ERFC(x)
 func (fn *formulaFuncs) ERFCdotPRECISE(argsList *list.List) formulaArg {
        return fn.erfc("ERFC.PRECISE", argsList)
 }
@@ -2860,8 +2836,7 @@ func (fn *formulaFuncs) ERFCdotPRECISE(argsList *list.List) formulaArg {
 // GESTEP unction tests whether a supplied number is greater than a supplied
 // step size and returns. The syntax of the function is:
 //
-//    GESTEP(number,[step])
-//
+//     GESTEP(number,[step])
 func (fn *formulaFuncs) GESTEP(argsList *list.List) formulaArg {
        if argsList.Len() < 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "GESTEP requires at least 1 argument")
@@ -2885,8 +2860,7 @@ func (fn *formulaFuncs) GESTEP(argsList *list.List) formulaArg {
 // HEX2BIN function converts a Hexadecimal (Base 16) number into a Binary
 // (Base 2) number. The syntax of the function is:
 //
-//    HEX2BIN(number,[places])
-//
+//     HEX2BIN(number,[places])
 func (fn *formulaFuncs) HEX2BIN(argsList *list.List) formulaArg {
        if argsList.Len() < 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "HEX2BIN requires at least 1 argument")
@@ -2908,8 +2882,7 @@ func (fn *formulaFuncs) HEX2BIN(argsList *list.List) formulaArg {
 // HEX2DEC function converts a hexadecimal (a base-16 number) into a decimal
 // number. The syntax of the function is:
 //
-//    HEX2DEC(number)
-//
+//     HEX2DEC(number)
 func (fn *formulaFuncs) HEX2DEC(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "HEX2DEC requires 1 numeric argument")
@@ -2920,8 +2893,7 @@ func (fn *formulaFuncs) HEX2DEC(argsList *list.List) formulaArg {
 // HEX2OCT function converts a Hexadecimal (Base 16) number into an Octal
 // (Base 8) number. The syntax of the function is:
 //
-//    HEX2OCT(number,[places])
-//
+//     HEX2OCT(number,[places])
 func (fn *formulaFuncs) HEX2OCT(argsList *list.List) formulaArg {
        if argsList.Len() < 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "HEX2OCT requires at least 1 argument")
@@ -2960,8 +2932,7 @@ func (fn *formulaFuncs) hex2dec(number string) formulaArg {
 // IMABS function returns the absolute value (the modulus) of a complex
 // number. The syntax of the function is:
 //
-//    IMABS(inumber)
-//
+//     IMABS(inumber)
 func (fn *formulaFuncs) IMABS(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "IMABS requires 1 argument")
@@ -2977,8 +2948,7 @@ func (fn *formulaFuncs) IMABS(argsList *list.List) formulaArg {
 // IMAGINARY function returns the imaginary coefficient of a supplied complex
 // number. The syntax of the function is:
 //
-//    IMAGINARY(inumber)
-//
+//     IMAGINARY(inumber)
 func (fn *formulaFuncs) IMAGINARY(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "IMAGINARY requires 1 argument")
@@ -2994,8 +2964,7 @@ func (fn *formulaFuncs) IMAGINARY(argsList *list.List) formulaArg {
 // IMARGUMENT function returns the phase (also called the argument) of a
 // supplied complex number. The syntax of the function is:
 //
-//    IMARGUMENT(inumber)
-//
+//     IMARGUMENT(inumber)
 func (fn *formulaFuncs) IMARGUMENT(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "IMARGUMENT requires 1 argument")
@@ -3011,8 +2980,7 @@ func (fn *formulaFuncs) IMARGUMENT(argsList *list.List) formulaArg {
 // IMCONJUGATE function returns the complex conjugate of a supplied complex
 // number. The syntax of the function is:
 //
-//    IMCONJUGATE(inumber)
-//
+//     IMCONJUGATE(inumber)
 func (fn *formulaFuncs) IMCONJUGATE(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "IMCONJUGATE requires 1 argument")
@@ -3028,8 +2996,7 @@ func (fn *formulaFuncs) IMCONJUGATE(argsList *list.List) formulaArg {
 // IMCOS function returns the cosine of a supplied complex number. The syntax
 // of the function is:
 //
-//    IMCOS(inumber)
-//
+//     IMCOS(inumber)
 func (fn *formulaFuncs) IMCOS(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "IMCOS requires 1 argument")
@@ -3045,8 +3012,7 @@ func (fn *formulaFuncs) IMCOS(argsList *list.List) formulaArg {
 // IMCOSH function returns the hyperbolic cosine of a supplied complex number. The syntax
 // of the function is:
 //
-//    IMCOSH(inumber)
-//
+//     IMCOSH(inumber)
 func (fn *formulaFuncs) IMCOSH(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "IMCOSH requires 1 argument")
@@ -3062,8 +3028,7 @@ func (fn *formulaFuncs) IMCOSH(argsList *list.List) formulaArg {
 // IMCOT function returns the cotangent of a supplied complex number. The syntax
 // of the function is:
 //
-//    IMCOT(inumber)
-//
+//     IMCOT(inumber)
 func (fn *formulaFuncs) IMCOT(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "IMCOT requires 1 argument")
@@ -3079,8 +3044,7 @@ func (fn *formulaFuncs) IMCOT(argsList *list.List) formulaArg {
 // IMCSC function returns the cosecant of a supplied complex number. The syntax
 // of the function is:
 //
-//    IMCSC(inumber)
-//
+//     IMCSC(inumber)
 func (fn *formulaFuncs) IMCSC(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "IMCSC requires 1 argument")
@@ -3100,8 +3064,7 @@ func (fn *formulaFuncs) IMCSC(argsList *list.List) formulaArg {
 // IMCSCH function returns the hyperbolic cosecant of a supplied complex
 // number. The syntax of the function is:
 //
-//    IMCSCH(inumber)
-//
+//     IMCSCH(inumber)
 func (fn *formulaFuncs) IMCSCH(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "IMCSCH requires 1 argument")
@@ -3121,8 +3084,7 @@ func (fn *formulaFuncs) IMCSCH(argsList *list.List) formulaArg {
 // IMDIV function calculates the quotient of two complex numbers (i.e. divides
 // one complex number by another). The syntax of the function is:
 //
-//    IMDIV(inumber1,inumber2)
-//
+//     IMDIV(inumber1,inumber2)
 func (fn *formulaFuncs) IMDIV(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "IMDIV requires 2 arguments")
@@ -3146,8 +3108,7 @@ func (fn *formulaFuncs) IMDIV(argsList *list.List) formulaArg {
 // IMEXP function returns the exponential of a supplied complex number. The
 // syntax of the function is:
 //
-//    IMEXP(inumber)
-//
+//     IMEXP(inumber)
 func (fn *formulaFuncs) IMEXP(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "IMEXP requires 1 argument")
@@ -3163,8 +3124,7 @@ func (fn *formulaFuncs) IMEXP(argsList *list.List) formulaArg {
 // IMLN function returns the natural logarithm of a supplied complex number.
 // The syntax of the function is:
 //
-//    IMLN(inumber)
-//
+//     IMLN(inumber)
 func (fn *formulaFuncs) IMLN(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "IMLN requires 1 argument")
@@ -3184,8 +3144,7 @@ func (fn *formulaFuncs) IMLN(argsList *list.List) formulaArg {
 // IMLOG10 function returns the common (base 10) logarithm of a supplied
 // complex number. The syntax of the function is:
 //
-//    IMLOG10(inumber)
-//
+//     IMLOG10(inumber)
 func (fn *formulaFuncs) IMLOG10(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "IMLOG10 requires 1 argument")
@@ -3205,8 +3164,7 @@ func (fn *formulaFuncs) IMLOG10(argsList *list.List) formulaArg {
 // IMLOG2 function calculates the base 2 logarithm of a supplied complex
 // number. The syntax of the function is:
 //
-//    IMLOG2(inumber)
-//
+//     IMLOG2(inumber)
 func (fn *formulaFuncs) IMLOG2(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "IMLOG2 requires 1 argument")
@@ -3226,8 +3184,7 @@ func (fn *formulaFuncs) IMLOG2(argsList *list.List) formulaArg {
 // IMPOWER function returns a supplied complex number, raised to a given
 // power. The syntax of the function is:
 //
-//    IMPOWER(inumber,number)
-//
+//     IMPOWER(inumber,number)
 func (fn *formulaFuncs) IMPOWER(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "IMPOWER requires 2 arguments")
@@ -3254,8 +3211,7 @@ func (fn *formulaFuncs) IMPOWER(argsList *list.List) formulaArg {
 // IMPRODUCT function calculates the product of two or more complex numbers.
 // The syntax of the function is:
 //
-//    IMPRODUCT(number1,[number2],...)
-//
+//     IMPRODUCT(number1,[number2],...)
 func (fn *formulaFuncs) IMPRODUCT(argsList *list.List) formulaArg {
        product := complex128(1)
        for arg := argsList.Front(); arg != nil; arg = arg.Next() {
@@ -3293,8 +3249,7 @@ func (fn *formulaFuncs) IMPRODUCT(argsList *list.List) formulaArg {
 // IMREAL function returns the real coefficient of a supplied complex number.
 // The syntax of the function is:
 //
-//    IMREAL(inumber)
-//
+//     IMREAL(inumber)
 func (fn *formulaFuncs) IMREAL(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "IMREAL requires 1 argument")
@@ -3310,8 +3265,7 @@ func (fn *formulaFuncs) IMREAL(argsList *list.List) formulaArg {
 // IMSEC function returns the secant of a supplied complex number. The syntax
 // of the function is:
 //
-//    IMSEC(inumber)
-//
+//     IMSEC(inumber)
 func (fn *formulaFuncs) IMSEC(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "IMSEC requires 1 argument")
@@ -3327,8 +3281,7 @@ func (fn *formulaFuncs) IMSEC(argsList *list.List) formulaArg {
 // IMSECH function returns the hyperbolic secant of a supplied complex number.
 // The syntax of the function is:
 //
-//    IMSECH(inumber)
-//
+//     IMSECH(inumber)
 func (fn *formulaFuncs) IMSECH(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "IMSECH requires 1 argument")
@@ -3344,8 +3297,7 @@ func (fn *formulaFuncs) IMSECH(argsList *list.List) formulaArg {
 // IMSIN function returns the Sine of a supplied complex number. The syntax of
 // the function is:
 //
-//    IMSIN(inumber)
-//
+//     IMSIN(inumber)
 func (fn *formulaFuncs) IMSIN(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "IMSIN requires 1 argument")
@@ -3361,8 +3313,7 @@ func (fn *formulaFuncs) IMSIN(argsList *list.List) formulaArg {
 // IMSINH function returns the hyperbolic sine of a supplied complex number.
 // The syntax of the function is:
 //
-//    IMSINH(inumber)
-//
+//     IMSINH(inumber)
 func (fn *formulaFuncs) IMSINH(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "IMSINH requires 1 argument")
@@ -3378,8 +3329,7 @@ func (fn *formulaFuncs) IMSINH(argsList *list.List) formulaArg {
 // IMSQRT function returns the square root of a supplied complex number. The
 // syntax of the function is:
 //
-//    IMSQRT(inumber)
-//
+//     IMSQRT(inumber)
 func (fn *formulaFuncs) IMSQRT(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "IMSQRT requires 1 argument")
@@ -3396,8 +3346,7 @@ func (fn *formulaFuncs) IMSQRT(argsList *list.List) formulaArg {
 // (i.e. subtracts one complex number from another). The syntax of the
 // function is:
 //
-//    IMSUB(inumber1,inumber2)
-//
+//     IMSUB(inumber1,inumber2)
 func (fn *formulaFuncs) IMSUB(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "IMSUB requires 2 arguments")
@@ -3416,8 +3365,7 @@ func (fn *formulaFuncs) IMSUB(argsList *list.List) formulaArg {
 // IMSUM function calculates the sum of two or more complex numbers. The
 // syntax of the function is:
 //
-//    IMSUM(inumber1,inumber2,...)
-//
+//     IMSUM(inumber1,inumber2,...)
 func (fn *formulaFuncs) IMSUM(argsList *list.List) formulaArg {
        if argsList.Len() < 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "IMSUM requires at least 1 argument")
@@ -3437,8 +3385,7 @@ func (fn *formulaFuncs) IMSUM(argsList *list.List) formulaArg {
 // IMTAN function returns the tangent of a supplied complex number. The syntax
 // of the function is:
 //
-//    IMTAN(inumber)
-//
+//     IMTAN(inumber)
 func (fn *formulaFuncs) IMTAN(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "IMTAN requires 1 argument")
@@ -3454,8 +3401,7 @@ func (fn *formulaFuncs) IMTAN(argsList *list.List) formulaArg {
 // OCT2BIN function converts an Octal (Base 8) number into a Binary (Base 2)
 // number. The syntax of the function is:
 //
-//    OCT2BIN(number,[places])
-//
+//     OCT2BIN(number,[places])
 func (fn *formulaFuncs) OCT2BIN(argsList *list.List) formulaArg {
        if argsList.Len() < 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "OCT2BIN requires at least 1 argument")
@@ -3479,8 +3425,7 @@ func (fn *formulaFuncs) OCT2BIN(argsList *list.List) formulaArg {
 // OCT2DEC function converts an Octal (a base-8 number) into a decimal number.
 // The syntax of the function is:
 //
-//    OCT2DEC(number)
-//
+//     OCT2DEC(number)
 func (fn *formulaFuncs) OCT2DEC(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "OCT2DEC requires 1 numeric argument")
@@ -3496,8 +3441,7 @@ func (fn *formulaFuncs) OCT2DEC(argsList *list.List) formulaArg {
 // OCT2HEX function converts an Octal (Base 8) number into a Hexadecimal
 // (Base 16) number. The syntax of the function is:
 //
-//    OCT2HEX(number,[places])
-//
+//     OCT2HEX(number,[places])
 func (fn *formulaFuncs) OCT2HEX(argsList *list.List) formulaArg {
        if argsList.Len() < 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "OCT2HEX requires at least 1 argument")
@@ -3537,8 +3481,7 @@ func (fn *formulaFuncs) oct2dec(number string) formulaArg {
 // ABS function returns the absolute value of any supplied number. The syntax
 // of the function is:
 //
-//    ABS(number)
-//
+//     ABS(number)
 func (fn *formulaFuncs) ABS(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "ABS requires 1 numeric argument")
@@ -3554,8 +3497,7 @@ func (fn *formulaFuncs) ABS(argsList *list.List) formulaArg {
 // number, and returns an angle, in radians, between 0 and π. The syntax of
 // the function is:
 //
-//    ACOS(number)
-//
+//     ACOS(number)
 func (fn *formulaFuncs) ACOS(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "ACOS requires 1 numeric argument")
@@ -3570,8 +3512,7 @@ func (fn *formulaFuncs) ACOS(argsList *list.List) formulaArg {
 // ACOSH function calculates the inverse hyperbolic cosine of a supplied number.
 // of the function is:
 //
-//    ACOSH(number)
-//
+//     ACOSH(number)
 func (fn *formulaFuncs) ACOSH(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "ACOSH requires 1 numeric argument")
@@ -3587,8 +3528,7 @@ func (fn *formulaFuncs) ACOSH(argsList *list.List) formulaArg {
 // given number, and returns an angle, in radians, between 0 and π. The syntax
 // of the function is:
 //
-//    ACOT(number)
-//
+//     ACOT(number)
 func (fn *formulaFuncs) ACOT(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "ACOT requires 1 numeric argument")
@@ -3603,8 +3543,7 @@ func (fn *formulaFuncs) ACOT(argsList *list.List) formulaArg {
 // ACOTH function calculates the hyperbolic arccotangent (coth) of a supplied
 // value. The syntax of the function is:
 //
-//    ACOTH(number)
-//
+//     ACOTH(number)
 func (fn *formulaFuncs) ACOTH(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "ACOTH requires 1 numeric argument")
@@ -3619,8 +3558,7 @@ func (fn *formulaFuncs) ACOTH(argsList *list.List) formulaArg {
 // ARABIC function converts a Roman numeral into an Arabic numeral. The syntax
 // of the function is:
 //
-//    ARABIC(text)
-//
+//     ARABIC(text)
 func (fn *formulaFuncs) ARABIC(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "ARABIC requires 1 numeric argument")
@@ -3673,8 +3611,7 @@ func (fn *formulaFuncs) ARABIC(argsList *list.List) formulaArg {
 // number, and returns an angle, in radians, between -π/2 and π/2. The syntax
 // of the function is:
 //
-//    ASIN(number)
-//
+//     ASIN(number)
 func (fn *formulaFuncs) ASIN(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "ASIN requires 1 numeric argument")
@@ -3689,8 +3626,7 @@ func (fn *formulaFuncs) ASIN(argsList *list.List) formulaArg {
 // ASINH function calculates the inverse hyperbolic sine of a supplied number.
 // The syntax of the function is:
 //
-//    ASINH(number)
-//
+//     ASINH(number)
 func (fn *formulaFuncs) ASINH(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "ASINH requires 1 numeric argument")
@@ -3706,8 +3642,7 @@ func (fn *formulaFuncs) ASINH(argsList *list.List) formulaArg {
 // given number, and returns an angle, in radians, between -π/2 and +π/2. The
 // syntax of the function is:
 //
-//    ATAN(number)
-//
+//     ATAN(number)
 func (fn *formulaFuncs) ATAN(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "ATAN requires 1 numeric argument")
@@ -3722,8 +3657,7 @@ func (fn *formulaFuncs) ATAN(argsList *list.List) formulaArg {
 // ATANH function calculates the inverse hyperbolic tangent of a supplied
 // number. The syntax of the function is:
 //
-//    ATANH(number)
-//
+//     ATANH(number)
 func (fn *formulaFuncs) ATANH(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "ATANH requires 1 numeric argument")
@@ -3739,8 +3673,7 @@ func (fn *formulaFuncs) ATANH(argsList *list.List) formulaArg {
 // given set of x and y coordinates, and returns an angle, in radians, between
 // -π/2 and +π/2. The syntax of the function is:
 //
-//    ATAN2(x_num,y_num)
-//
+//     ATAN2(x_num,y_num)
 func (fn *formulaFuncs) ATAN2(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "ATAN2 requires 2 numeric arguments")
@@ -3759,8 +3692,7 @@ func (fn *formulaFuncs) ATAN2(argsList *list.List) formulaArg {
 // BASE function converts a number into a supplied base (radix), and returns a
 // text representation of the calculated value. The syntax of the function is:
 //
-//    BASE(number,radix,[min_length])
-//
+//     BASE(number,radix,[min_length])
 func (fn *formulaFuncs) BASE(argsList *list.List) formulaArg {
        if argsList.Len() < 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "BASE requires at least 2 arguments")
@@ -3796,8 +3728,7 @@ func (fn *formulaFuncs) BASE(argsList *list.List) formulaArg {
 // CEILING function rounds a supplied number away from zero, to the nearest
 // multiple of a given number. The syntax of the function is:
 //
-//    CEILING(number,significance)
-//
+//     CEILING(number,significance)
 func (fn *formulaFuncs) CEILING(argsList *list.List) formulaArg {
        if argsList.Len() == 0 {
                return newErrorFormulaArg(formulaErrorVALUE, "CEILING requires at least 1 argument")
@@ -3837,8 +3768,7 @@ func (fn *formulaFuncs) CEILING(argsList *list.List) formulaArg {
 // CEILINGdotMATH function rounds a supplied number up to a supplied multiple
 // of significance. The syntax of the function is:
 //
-//    CEILING.MATH(number,[significance],[mode])
-//
+//     CEILING.MATH(number,[significance],[mode])
 func (fn *formulaFuncs) CEILINGdotMATH(argsList *list.List) formulaArg {
        if argsList.Len() == 0 {
                return newErrorFormulaArg(formulaErrorVALUE, "CEILING.MATH requires at least 1 argument")
@@ -3887,8 +3817,7 @@ func (fn *formulaFuncs) CEILINGdotMATH(argsList *list.List) formulaArg {
 // number's sign), to the nearest multiple of a given number. The syntax of
 // the function is:
 //
-//    CEILING.PRECISE(number,[significance])
-//
+//     CEILING.PRECISE(number,[significance])
 func (fn *formulaFuncs) CEILINGdotPRECISE(argsList *list.List) formulaArg {
        if argsList.Len() == 0 {
                return newErrorFormulaArg(formulaErrorVALUE, "CEILING.PRECISE requires at least 1 argument")
@@ -3931,8 +3860,7 @@ func (fn *formulaFuncs) CEILINGdotPRECISE(argsList *list.List) formulaArg {
 // COMBIN function calculates the number of combinations (in any order) of a
 // given number objects from a set. The syntax of the function is:
 //
-//    COMBIN(number,number_chosen)
-//
+//     COMBIN(number,number_chosen)
 func (fn *formulaFuncs) COMBIN(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "COMBIN requires 2 argument")
@@ -3964,8 +3892,7 @@ func (fn *formulaFuncs) COMBIN(argsList *list.List) formulaArg {
 // COMBINA function calculates the number of combinations, with repetitions,
 // of a given number objects from a set. The syntax of the function is:
 //
-//    COMBINA(number,number_chosen)
-//
+//     COMBINA(number,number_chosen)
 func (fn *formulaFuncs) COMBINA(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "COMBINA requires 2 argument")
@@ -4003,8 +3930,7 @@ func (fn *formulaFuncs) COMBINA(argsList *list.List) formulaArg {
 // COS function calculates the cosine of a given angle. The syntax of the
 // function is:
 //
-//    COS(number)
-//
+//     COS(number)
 func (fn *formulaFuncs) COS(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "COS requires 1 numeric argument")
@@ -4019,8 +3945,7 @@ func (fn *formulaFuncs) COS(argsList *list.List) formulaArg {
 // COSH function calculates the hyperbolic cosine (cosh) of a supplied number.
 // The syntax of the function is:
 //
-//    COSH(number)
-//
+//     COSH(number)
 func (fn *formulaFuncs) COSH(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "COSH requires 1 numeric argument")
@@ -4035,8 +3960,7 @@ func (fn *formulaFuncs) COSH(argsList *list.List) formulaArg {
 // COT function calculates the cotangent of a given angle. The syntax of the
 // function is:
 //
-//    COT(number)
-//
+//     COT(number)
 func (fn *formulaFuncs) COT(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "COT requires 1 numeric argument")
@@ -4054,8 +3978,7 @@ func (fn *formulaFuncs) COT(argsList *list.List) formulaArg {
 // COTH function calculates the hyperbolic cotangent (coth) of a supplied
 // angle. The syntax of the function is:
 //
-//    COTH(number)
-//
+//     COTH(number)
 func (fn *formulaFuncs) COTH(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "COTH requires 1 numeric argument")
@@ -4073,8 +3996,7 @@ func (fn *formulaFuncs) COTH(argsList *list.List) formulaArg {
 // CSC function calculates the cosecant of a given angle. The syntax of the
 // function is:
 //
-//    CSC(number)
-//
+//     CSC(number)
 func (fn *formulaFuncs) CSC(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "CSC requires 1 numeric argument")
@@ -4092,8 +4014,7 @@ func (fn *formulaFuncs) CSC(argsList *list.List) formulaArg {
 // CSCH function calculates the hyperbolic cosecant (csch) of a supplied
 // angle. The syntax of the function is:
 //
-//    CSCH(number)
-//
+//     CSCH(number)
 func (fn *formulaFuncs) CSCH(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "CSCH requires 1 numeric argument")
@@ -4111,8 +4032,7 @@ func (fn *formulaFuncs) CSCH(argsList *list.List) formulaArg {
 // DECIMAL function converts a text representation of a number in a specified
 // base, into a decimal value. The syntax of the function is:
 //
-//    DECIMAL(text,radix)
-//
+//     DECIMAL(text,radix)
 func (fn *formulaFuncs) DECIMAL(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "DECIMAL requires 2 numeric arguments")
@@ -4136,8 +4056,7 @@ func (fn *formulaFuncs) DECIMAL(argsList *list.List) formulaArg {
 // DEGREES function converts radians into degrees. The syntax of the function
 // is:
 //
-//    DEGREES(angle)
-//
+//     DEGREES(angle)
 func (fn *formulaFuncs) DEGREES(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "DEGREES requires 1 numeric argument")
@@ -4156,8 +4075,7 @@ func (fn *formulaFuncs) DEGREES(argsList *list.List) formulaArg {
 // positive number up and a negative number down), to the next even number.
 // The syntax of the function is:
 //
-//    EVEN(number)
-//
+//     EVEN(number)
 func (fn *formulaFuncs) EVEN(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "EVEN requires 1 numeric argument")
@@ -4182,8 +4100,7 @@ func (fn *formulaFuncs) EVEN(argsList *list.List) formulaArg {
 // EXP function calculates the value of the mathematical constant e, raised to
 // the power of a given number. The syntax of the function is:
 //
-//    EXP(number)
-//
+//     EXP(number)
 func (fn *formulaFuncs) EXP(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "EXP requires 1 numeric argument")
@@ -4207,8 +4124,7 @@ func fact(number float64) float64 {
 // FACT function returns the factorial of a supplied number. The syntax of the
 // function is:
 //
-//    FACT(number)
-//
+//     FACT(number)
 func (fn *formulaFuncs) FACT(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "FACT requires 1 numeric argument")
@@ -4226,8 +4142,7 @@ func (fn *formulaFuncs) FACT(argsList *list.List) formulaArg {
 // FACTDOUBLE function returns the double factorial of a supplied number. The
 // syntax of the function is:
 //
-//    FACTDOUBLE(number)
-//
+//     FACTDOUBLE(number)
 func (fn *formulaFuncs) FACTDOUBLE(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "FACTDOUBLE requires 1 numeric argument")
@@ -4249,8 +4164,7 @@ func (fn *formulaFuncs) FACTDOUBLE(argsList *list.List) formulaArg {
 // FLOOR function rounds a supplied number towards zero to the nearest
 // multiple of a specified significance. The syntax of the function is:
 //
-//    FLOOR(number,significance)
-//
+//     FLOOR(number,significance)
 func (fn *formulaFuncs) FLOOR(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "FLOOR requires 2 numeric arguments")
@@ -4279,8 +4193,7 @@ func (fn *formulaFuncs) FLOOR(argsList *list.List) formulaArg {
 // FLOORdotMATH function rounds a supplied number down to a supplied multiple
 // of significance. The syntax of the function is:
 //
-//    FLOOR.MATH(number,[significance],[mode])
-//
+//     FLOOR.MATH(number,[significance],[mode])
 func (fn *formulaFuncs) FLOORdotMATH(argsList *list.List) formulaArg {
        if argsList.Len() == 0 {
                return newErrorFormulaArg(formulaErrorVALUE, "FLOOR.MATH requires at least 1 argument")
@@ -4323,8 +4236,7 @@ func (fn *formulaFuncs) FLOORdotMATH(argsList *list.List) formulaArg {
 // FLOORdotPRECISE function rounds a supplied number down to a supplied
 // multiple of significance. The syntax of the function is:
 //
-//    FLOOR.PRECISE(number,[significance])
-//
+//     FLOOR.PRECISE(number,[significance])
 func (fn *formulaFuncs) FLOORdotPRECISE(argsList *list.List) formulaArg {
        if argsList.Len() == 0 {
                return newErrorFormulaArg(formulaErrorVALUE, "FLOOR.PRECISE requires at least 1 argument")
@@ -4385,8 +4297,7 @@ func gcd(x, y float64) float64 {
 // GCD function returns the greatest common divisor of two or more supplied
 // integers. The syntax of the function is:
 //
-//    GCD(number1,[number2],...)
-//
+//     GCD(number1,[number2],...)
 func (fn *formulaFuncs) GCD(argsList *list.List) formulaArg {
        if argsList.Len() == 0 {
                return newErrorFormulaArg(formulaErrorVALUE, "GCD requires at least 1 argument")
@@ -4428,8 +4339,7 @@ func (fn *formulaFuncs) GCD(argsList *list.List) formulaArg {
 // INT function truncates a supplied number down to the closest integer. The
 // syntax of the function is:
 //
-//    INT(number)
-//
+//     INT(number)
 func (fn *formulaFuncs) INT(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "INT requires 1 numeric argument")
@@ -4449,8 +4359,7 @@ func (fn *formulaFuncs) INT(argsList *list.List) formulaArg {
 // number's sign), to the nearest multiple of a supplied significance. The
 // syntax of the function is:
 //
-//    ISO.CEILING(number,[significance])
-//
+//     ISO.CEILING(number,[significance])
 func (fn *formulaFuncs) ISOdotCEILING(argsList *list.List) formulaArg {
        if argsList.Len() == 0 {
                return newErrorFormulaArg(formulaErrorVALUE, "ISO.CEILING requires at least 1 argument")
@@ -4502,8 +4411,7 @@ func lcm(a, b float64) float64 {
 // LCM function returns the least common multiple of two or more supplied
 // integers. The syntax of the function is:
 //
-//    LCM(number1,[number2],...)
-//
+//     LCM(number1,[number2],...)
 func (fn *formulaFuncs) LCM(argsList *list.List) formulaArg {
        if argsList.Len() == 0 {
                return newErrorFormulaArg(formulaErrorVALUE, "LCM requires at least 1 argument")
@@ -4547,8 +4455,7 @@ func (fn *formulaFuncs) LCM(argsList *list.List) formulaArg {
 // LN function calculates the natural logarithm of a given number. The syntax
 // of the function is:
 //
-//    LN(number)
-//
+//     LN(number)
 func (fn *formulaFuncs) LN(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "LN requires 1 numeric argument")
@@ -4563,8 +4470,7 @@ func (fn *formulaFuncs) LN(argsList *list.List) formulaArg {
 // LOG function calculates the logarithm of a given number, to a supplied
 // base. The syntax of the function is:
 //
-//    LOG(number,[base])
-//
+//     LOG(number,[base])
 func (fn *formulaFuncs) LOG(argsList *list.List) formulaArg {
        if argsList.Len() == 0 {
                return newErrorFormulaArg(formulaErrorVALUE, "LOG requires at least 1 argument")
@@ -4599,8 +4505,7 @@ func (fn *formulaFuncs) LOG(argsList *list.List) formulaArg {
 // LOG10 function calculates the base 10 logarithm of a given number. The
 // syntax of the function is:
 //
-//    LOG10(number)
-//
+//     LOG10(number)
 func (fn *formulaFuncs) LOG10(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "LOG10 requires 1 numeric argument")
@@ -4683,8 +4588,7 @@ func newFormulaArgMatrix(numMtx [][]float64) (arg [][]formulaArg) {
 // MDETERM calculates the determinant of a square matrix. The
 // syntax of the function is:
 //
-//    MDETERM(array)
-//
+//     MDETERM(array)
 func (fn *formulaFuncs) MDETERM(argsList *list.List) (result formulaArg) {
        if argsList.Len() < 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "MDETERM requires 1 argument")
@@ -4745,8 +4649,7 @@ func adjugateMatrix(A [][]float64) (adjA [][]float64) {
 // MINVERSE function calculates the inverse of a square matrix. The syntax of
 // the function is:
 //
-//    MINVERSE(array)
-//
+//     MINVERSE(array)
 func (fn *formulaFuncs) MINVERSE(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "MINVERSE requires 1 argument")
@@ -4770,8 +4673,7 @@ func (fn *formulaFuncs) MINVERSE(argsList *list.List) formulaArg {
 // MMULT function calculates the matrix product of two arrays
 // (representing matrices). The syntax of the function is:
 //
-//    MMULT(array1,array2)
-//
+//     MMULT(array1,array2)
 func (fn *formulaFuncs) MMULT(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "MMULT requires 2 argument")
@@ -4813,8 +4715,7 @@ func (fn *formulaFuncs) MMULT(argsList *list.List) formulaArg {
 // MOD function returns the remainder of a division between two supplied
 // numbers. The syntax of the function is:
 //
-//    MOD(number,divisor)
-//
+//     MOD(number,divisor)
 func (fn *formulaFuncs) MOD(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "MOD requires 2 numeric arguments")
@@ -4840,8 +4741,7 @@ func (fn *formulaFuncs) MOD(argsList *list.List) formulaArg {
 // MROUND function rounds a supplied number up or down to the nearest multiple
 // of a given number. The syntax of the function is:
 //
-//    MROUND(number,multiple)
-//
+//     MROUND(number,multiple)
 func (fn *formulaFuncs) MROUND(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "MROUND requires 2 numeric arguments")
@@ -4872,8 +4772,7 @@ func (fn *formulaFuncs) MROUND(argsList *list.List) formulaArg {
 // supplied values to the product of factorials of those values. The syntax of
 // the function is:
 //
-//    MULTINOMIAL(number1,[number2],...)
-//
+//     MULTINOMIAL(number1,[number2],...)
 func (fn *formulaFuncs) MULTINOMIAL(argsList *list.List) formulaArg {
        val, num, denom := 0.0, 0.0, 1.0
        var err error
@@ -4899,8 +4798,7 @@ func (fn *formulaFuncs) MULTINOMIAL(argsList *list.List) formulaArg {
 // MUNIT function returns the unit matrix for a specified dimension. The
 // syntax of the function is:
 //
-//   MUNIT(dimension)
-//
+//     MUNIT(dimension)
 func (fn *formulaFuncs) MUNIT(argsList *list.List) (result formulaArg) {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "MUNIT requires 1 numeric argument")
@@ -4928,8 +4826,7 @@ func (fn *formulaFuncs) MUNIT(argsList *list.List) (result formulaArg) {
 // number up and a negative number down), to the next odd number. The syntax
 // of the function is:
 //
-//   ODD(number)
-//
+//     ODD(number)
 func (fn *formulaFuncs) ODD(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "ODD requires 1 numeric argument")
@@ -4957,8 +4854,7 @@ func (fn *formulaFuncs) ODD(argsList *list.List) formulaArg {
 // PI function returns the value of the mathematical constant π (pi), accurate
 // to 15 digits (14 decimal places). The syntax of the function is:
 //
-//   PI()
-//
+//     PI()
 func (fn *formulaFuncs) PI(argsList *list.List) formulaArg {
        if argsList.Len() != 0 {
                return newErrorFormulaArg(formulaErrorVALUE, "PI accepts no arguments")
@@ -4969,8 +4865,7 @@ func (fn *formulaFuncs) PI(argsList *list.List) formulaArg {
 // POWER function calculates a given number, raised to a supplied power.
 // The syntax of the function is:
 //
-//    POWER(number,power)
-//
+//     POWER(number,power)
 func (fn *formulaFuncs) POWER(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "POWER requires 2 numeric arguments")
@@ -4995,8 +4890,7 @@ func (fn *formulaFuncs) POWER(argsList *list.List) formulaArg {
 // PRODUCT function returns the product (multiplication) of a supplied set of
 // numerical values. The syntax of the function is:
 //
-//    PRODUCT(number1,[number2],...)
-//
+//     PRODUCT(number1,[number2],...)
 func (fn *formulaFuncs) PRODUCT(argsList *list.List) formulaArg {
        val, product := 0.0, 1.0
        var err error
@@ -5033,8 +4927,7 @@ func (fn *formulaFuncs) PRODUCT(argsList *list.List) formulaArg {
 // QUOTIENT function returns the integer portion of a division between two
 // supplied numbers. The syntax of the function is:
 //
-//   QUOTIENT(numerator,denominator)
-//
+//     QUOTIENT(numerator,denominator)
 func (fn *formulaFuncs) QUOTIENT(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "QUOTIENT requires 2 numeric arguments")
@@ -5055,8 +4948,7 @@ func (fn *formulaFuncs) QUOTIENT(argsList *list.List) formulaArg {
 
 // RADIANS function converts radians into degrees. The syntax of the function is:
 //
-//   RADIANS(angle)
-//
+//     RADIANS(angle)
 func (fn *formulaFuncs) RADIANS(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "RADIANS requires 1 numeric argument")
@@ -5071,8 +4963,7 @@ func (fn *formulaFuncs) RADIANS(argsList *list.List) formulaArg {
 // RAND function generates a random real number between 0 and 1. The syntax of
 // the function is:
 //
-//   RAND()
-//
+//     RAND()
 func (fn *formulaFuncs) RAND(argsList *list.List) formulaArg {
        if argsList.Len() != 0 {
                return newErrorFormulaArg(formulaErrorVALUE, "RAND accepts no arguments")
@@ -5083,8 +4974,7 @@ func (fn *formulaFuncs) RAND(argsList *list.List) formulaArg {
 // RANDBETWEEN function generates a random integer between two supplied
 // integers. The syntax of the function is:
 //
-//   RANDBETWEEN(bottom,top)
-//
+//     RANDBETWEEN(bottom,top)
 func (fn *formulaFuncs) RANDBETWEEN(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "RANDBETWEEN requires 2 numeric arguments")
@@ -5222,8 +5112,7 @@ var romanTable = [][]romanNumerals{
 // integer, the function returns a text string depicting the roman numeral
 // form of the number. The syntax of the function is:
 //
-//   ROMAN(number,[form])
-//
+//     ROMAN(number,[form])
 func (fn *formulaFuncs) ROMAN(argsList *list.List) formulaArg {
        if argsList.Len() == 0 {
                return newErrorFormulaArg(formulaErrorVALUE, "ROMAN requires at least 1 argument")
@@ -5309,8 +5198,7 @@ func (fn *formulaFuncs) round(number, digits float64, mode roundMode) float64 {
 // ROUND function rounds a supplied number up or down, to a specified number
 // of decimal places. The syntax of the function is:
 //
-//   ROUND(number,num_digits)
-//
+//     ROUND(number,num_digits)
 func (fn *formulaFuncs) ROUND(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "ROUND requires 2 numeric arguments")
@@ -5329,8 +5217,7 @@ func (fn *formulaFuncs) ROUND(argsList *list.List) formulaArg {
 // ROUNDDOWN function rounds a supplied number down towards zero, to a
 // specified number of decimal places. The syntax of the function is:
 //
-//   ROUNDDOWN(number,num_digits)
-//
+//     ROUNDDOWN(number,num_digits)
 func (fn *formulaFuncs) ROUNDDOWN(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "ROUNDDOWN requires 2 numeric arguments")
@@ -5349,8 +5236,7 @@ func (fn *formulaFuncs) ROUNDDOWN(argsList *list.List) formulaArg {
 // ROUNDUP function rounds a supplied number up, away from zero, to a
 // specified number of decimal places. The syntax of the function is:
 //
-//   ROUNDUP(number,num_digits)
-//
+//     ROUNDUP(number,num_digits)
 func (fn *formulaFuncs) ROUNDUP(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "ROUNDUP requires 2 numeric arguments")
@@ -5369,8 +5255,7 @@ func (fn *formulaFuncs) ROUNDUP(argsList *list.List) formulaArg {
 // SEC function calculates the secant of a given angle. The syntax of the
 // function is:
 //
-//    SEC(number)
-//
+//     SEC(number)
 func (fn *formulaFuncs) SEC(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "SEC requires 1 numeric argument")
@@ -5385,8 +5270,7 @@ func (fn *formulaFuncs) SEC(argsList *list.List) formulaArg {
 // SECH function calculates the hyperbolic secant (sech) of a supplied angle.
 // The syntax of the function is:
 //
-//    SECH(number)
-//
+//     SECH(number)
 func (fn *formulaFuncs) SECH(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "SECH requires 1 numeric argument")
@@ -5401,8 +5285,7 @@ func (fn *formulaFuncs) SECH(argsList *list.List) formulaArg {
 // SERIESSUM function returns the sum of a power series. The syntax of the
 // function is:
 //
-//    SERIESSUM(x,n,m,coefficients)
-//
+//     SERIESSUM(x,n,m,coefficients)
 func (fn *formulaFuncs) SERIESSUM(argsList *list.List) formulaArg {
        if argsList.Len() != 4 {
                return newErrorFormulaArg(formulaErrorVALUE, "SERIESSUM requires 4 arguments")
@@ -5437,8 +5320,7 @@ func (fn *formulaFuncs) SERIESSUM(argsList *list.List) formulaArg {
 // the number is negative, the function returns -1 and if the number is 0
 // (zero), the function returns 0. The syntax of the function is:
 //
-//   SIGN(number)
-//
+//     SIGN(number)
 func (fn *formulaFuncs) SIGN(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "SIGN requires 1 numeric argument")
@@ -5459,8 +5341,7 @@ func (fn *formulaFuncs) SIGN(argsList *list.List) formulaArg {
 // SIN function calculates the sine of a given angle. The syntax of the
 // function is:
 //
-//    SIN(number)
-//
+//     SIN(number)
 func (fn *formulaFuncs) SIN(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "SIN requires 1 numeric argument")
@@ -5475,8 +5356,7 @@ func (fn *formulaFuncs) SIN(argsList *list.List) formulaArg {
 // SINH function calculates the hyperbolic sine (sinh) of a supplied number.
 // The syntax of the function is:
 //
-//    SINH(number)
-//
+//     SINH(number)
 func (fn *formulaFuncs) SINH(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "SINH requires 1 numeric argument")
@@ -5491,8 +5371,7 @@ func (fn *formulaFuncs) SINH(argsList *list.List) formulaArg {
 // SQRT function calculates the positive square root of a supplied number. The
 // syntax of the function is:
 //
-//    SQRT(number)
-//
+//     SQRT(number)
 func (fn *formulaFuncs) SQRT(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "SQRT requires 1 numeric argument")
@@ -5510,8 +5389,7 @@ func (fn *formulaFuncs) SQRT(argsList *list.List) formulaArg {
 // SQRTPI function returns the square root of a supplied number multiplied by
 // the mathematical constant, π. The syntax of the function is:
 //
-//    SQRTPI(number)
-//
+//     SQRTPI(number)
 func (fn *formulaFuncs) SQRTPI(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "SQRTPI requires 1 numeric argument")
@@ -5526,8 +5404,7 @@ func (fn *formulaFuncs) SQRTPI(argsList *list.List) formulaArg {
 // STDEV function calculates the sample standard deviation of a supplied set
 // of values. The syntax of the function is:
 //
-//    STDEV(number1,[number2],...)
-//
+//     STDEV(number1,[number2],...)
 func (fn *formulaFuncs) STDEV(argsList *list.List) formulaArg {
        if argsList.Len() < 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "STDEV requires at least 1 argument")
@@ -5538,8 +5415,7 @@ func (fn *formulaFuncs) STDEV(argsList *list.List) formulaArg {
 // STDEVdotS function calculates the sample standard deviation of a supplied
 // set of values. The syntax of the function is:
 //
-//    STDEV.S(number1,[number2],...)
-//
+//     STDEV.S(number1,[number2],...)
 func (fn *formulaFuncs) STDEVdotS(argsList *list.List) formulaArg {
        if argsList.Len() < 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "STDEV.S requires at least 1 argument")
@@ -5551,8 +5427,7 @@ func (fn *formulaFuncs) STDEVdotS(argsList *list.List) formulaArg {
 // standard deviation is a measure of how widely values are dispersed from
 // the average value (the mean). The syntax of the function is:
 //
-//    STDEVA(number1,[number2],...)
-//
+//     STDEVA(number1,[number2],...)
 func (fn *formulaFuncs) STDEVA(argsList *list.List) formulaArg {
        if argsList.Len() < 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "STDEVA requires at least 1 argument")
@@ -5635,8 +5510,7 @@ func (fn *formulaFuncs) stdev(stdeva bool, argsList *list.List) formulaArg {
 // the Cumulative Poisson Probability Function for a supplied set of
 // parameters. The syntax of the function is:
 //
-//    POISSON.DIST(x,mean,cumulative)
-//
+//     POISSON.DIST(x,mean,cumulative)
 func (fn *formulaFuncs) POISSONdotDIST(argsList *list.List) formulaArg {
        if argsList.Len() != 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "POISSON.DIST requires 3 arguments")
@@ -5648,8 +5522,7 @@ func (fn *formulaFuncs) POISSONdotDIST(argsList *list.List) formulaArg {
 // Cumulative Poisson Probability Function for a supplied set of parameters.
 // The syntax of the function is:
 //
-//    POISSON(x,mean,cumulative)
-//
+//     POISSON(x,mean,cumulative)
 func (fn *formulaFuncs) POISSON(argsList *list.List) formulaArg {
        if argsList.Len() != 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "POISSON requires 3 arguments")
@@ -5681,8 +5554,7 @@ func (fn *formulaFuncs) POISSON(argsList *list.List) formulaArg {
 // SUM function adds together a supplied set of numbers and returns the sum of
 // these values. The syntax of the function is:
 //
-//    SUM(number1,[number2],...)
-//
+//     SUM(number1,[number2],...)
 func (fn *formulaFuncs) SUM(argsList *list.List) formulaArg {
        var sum float64
        for arg := argsList.Front(); arg != nil; arg = arg.Next() {
@@ -5713,8 +5585,7 @@ func (fn *formulaFuncs) SUM(argsList *list.List) formulaArg {
 // criteria, and returns the sum of the corresponding values in a second
 // supplied array. The syntax of the function is:
 //
-//    SUMIF(range,criteria,[sum_range])
-//
+//     SUMIF(range,criteria,[sum_range])
 func (fn *formulaFuncs) SUMIF(argsList *list.List) formulaArg {
        if argsList.Len() < 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "SUMIF requires at least 2 arguments")
@@ -5755,8 +5626,7 @@ func (fn *formulaFuncs) SUMIF(argsList *list.List) formulaArg {
 // set of criteria, and returns the sum of the corresponding values in a
 // further supplied array. The syntax of the function is:
 //
-//    SUMIFS(sum_range,criteria_range1,criteria1,[criteria_range2,criteria2],...)
-//
+//     SUMIFS(sum_range,criteria_range1,criteria1,[criteria_range2,criteria2],...)
 func (fn *formulaFuncs) SUMIFS(argsList *list.List) formulaArg {
        if argsList.Len() < 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "SUMIFS requires at least 3 arguments")
@@ -5833,8 +5703,7 @@ func (fn *formulaFuncs) sumproduct(argsList *list.List) formulaArg {
 // SUMPRODUCT function returns the sum of the products of the corresponding
 // values in a set of supplied arrays. The syntax of the function is:
 //
-//    SUMPRODUCT(array1,[array2],[array3],...)
-//
+//     SUMPRODUCT(array1,[array2],[array3],...)
 func (fn *formulaFuncs) SUMPRODUCT(argsList *list.List) formulaArg {
        if argsList.Len() < 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "SUMPRODUCT requires at least 1 argument")
@@ -5850,8 +5719,7 @@ func (fn *formulaFuncs) SUMPRODUCT(argsList *list.List) formulaArg {
 // SUMSQ function returns the sum of squares of a supplied set of values. The
 // syntax of the function is:
 //
-//    SUMSQ(number1,[number2],...)
-//
+//     SUMSQ(number1,[number2],...)
 func (fn *formulaFuncs) SUMSQ(argsList *list.List) formulaArg {
        var val, sq float64
        var err error
@@ -5917,8 +5785,7 @@ func (fn *formulaFuncs) sumx(name string, argsList *list.List) formulaArg {
 // SUMX2MY2 function returns the sum of the differences of squares of two
 // supplied sets of values. The syntax of the function is:
 //
-//    SUMX2MY2(array_x,array_y)
-//
+//     SUMX2MY2(array_x,array_y)
 func (fn *formulaFuncs) SUMX2MY2(argsList *list.List) formulaArg {
        return fn.sumx("SUMX2MY2", argsList)
 }
@@ -5926,8 +5793,7 @@ func (fn *formulaFuncs) SUMX2MY2(argsList *list.List) formulaArg {
 // SUMX2PY2 function returns the sum of the sum of squares of two supplied sets
 // of values. The syntax of the function is:
 //
-//    SUMX2PY2(array_x,array_y)
-//
+//     SUMX2PY2(array_x,array_y)
 func (fn *formulaFuncs) SUMX2PY2(argsList *list.List) formulaArg {
        return fn.sumx("SUMX2PY2", argsList)
 }
@@ -5936,8 +5802,7 @@ func (fn *formulaFuncs) SUMX2PY2(argsList *list.List) formulaArg {
 // corresponding values in two supplied arrays. The syntax of the function
 // is:
 //
-//    SUMXMY2(array_x,array_y)
-//
+//     SUMXMY2(array_x,array_y)
 func (fn *formulaFuncs) SUMXMY2(argsList *list.List) formulaArg {
        return fn.sumx("SUMXMY2", argsList)
 }
@@ -5945,8 +5810,7 @@ func (fn *formulaFuncs) SUMXMY2(argsList *list.List) formulaArg {
 // TAN function calculates the tangent of a given angle. The syntax of the
 // function is:
 //
-//    TAN(number)
-//
+//     TAN(number)
 func (fn *formulaFuncs) TAN(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "TAN requires 1 numeric argument")
@@ -5961,8 +5825,7 @@ func (fn *formulaFuncs) TAN(argsList *list.List) formulaArg {
 // TANH function calculates the hyperbolic tangent (tanh) of a supplied
 // number. The syntax of the function is:
 //
-//    TANH(number)
-//
+//     TANH(number)
 func (fn *formulaFuncs) TANH(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "TANH requires 1 numeric argument")
@@ -5977,8 +5840,7 @@ func (fn *formulaFuncs) TANH(argsList *list.List) formulaArg {
 // TRUNC function truncates a supplied number to a specified number of decimal
 // places. The syntax of the function is:
 //
-//    TRUNC(number,[number_digits])
-//
+//     TRUNC(number,[number_digits])
 func (fn *formulaFuncs) TRUNC(argsList *list.List) formulaArg {
        if argsList.Len() == 0 {
                return newErrorFormulaArg(formulaErrorVALUE, "TRUNC requires at least 1 argument")
@@ -6015,8 +5877,7 @@ func (fn *formulaFuncs) TRUNC(argsList *list.List) formulaArg {
 // AVEDEV function calculates the average deviation of a supplied set of
 // values. The syntax of the function is:
 //
-//    AVEDEV(number1,[number2],...)
-//
+//     AVEDEV(number1,[number2],...)
 func (fn *formulaFuncs) AVEDEV(argsList *list.List) formulaArg {
        if argsList.Len() == 0 {
                return newErrorFormulaArg(formulaErrorVALUE, "AVEDEV requires at least 1 argument")
@@ -6040,8 +5901,7 @@ func (fn *formulaFuncs) AVEDEV(argsList *list.List) formulaArg {
 // AVERAGE function returns the arithmetic mean of a list of supplied numbers.
 // The syntax of the function is:
 //
-//    AVERAGE(number1,[number2],...)
-//
+//     AVERAGE(number1,[number2],...)
 func (fn *formulaFuncs) AVERAGE(argsList *list.List) formulaArg {
        var args []formulaArg
        for arg := argsList.Front(); arg != nil; arg = arg.Next() {
@@ -6057,8 +5917,7 @@ func (fn *formulaFuncs) AVERAGE(argsList *list.List) formulaArg {
 // AVERAGEA function returns the arithmetic mean of a list of supplied numbers
 // with text cell and zero values. The syntax of the function is:
 //
-//    AVERAGEA(number1,[number2],...)
-//
+//     AVERAGEA(number1,[number2],...)
 func (fn *formulaFuncs) AVERAGEA(argsList *list.List) formulaArg {
        var args []formulaArg
        for arg := argsList.Front(); arg != nil; arg = arg.Next() {
@@ -6076,8 +5935,7 @@ func (fn *formulaFuncs) AVERAGEA(argsList *list.List) formulaArg {
 // the corresponding values in a second supplied array. The syntax of the
 // function is:
 //
-//    AVERAGEIF(range,criteria,[average_range])
-//
+//     AVERAGEIF(range,criteria,[average_range])
 func (fn *formulaFuncs) AVERAGEIF(argsList *list.List) formulaArg {
        if argsList.Len() < 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "AVERAGEIF requires at least 2 arguments")
@@ -6126,8 +5984,7 @@ func (fn *formulaFuncs) AVERAGEIF(argsList *list.List) formulaArg {
 // of the corresponding values in a further supplied array. The syntax of the
 // function is:
 //
-//    AVERAGEIFS(average_range,criteria_range1,criteria1,[criteria_range2,criteria2],...)
-//
+//     AVERAGEIFS(average_range,criteria_range1,criteria1,[criteria_range2,criteria2],...)
 func (fn *formulaFuncs) AVERAGEIFS(argsList *list.List) formulaArg {
        if argsList.Len() < 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "AVERAGEIFS requires at least 3 arguments")
@@ -6403,8 +6260,7 @@ func (fn *formulaFuncs) prepareBETAdotDISTArgs(argsList *list.List) formulaArg {
 // or the probability density function of the Beta distribution, for a
 // supplied set of parameters. The syntax of the function is:
 //
-//    BETA.DIST(x,alpha,beta,cumulative,[A],[B])
-//
+//     BETA.DIST(x,alpha,beta,cumulative,[A],[B])
 func (fn *formulaFuncs) BETAdotDIST(argsList *list.List) formulaArg {
        args := fn.prepareBETAdotDISTArgs(argsList)
        if args.Type != ArgList {
@@ -6428,8 +6284,7 @@ func (fn *formulaFuncs) BETAdotDIST(argsList *list.List) formulaArg {
 // BETADIST function calculates the cumulative beta probability density
 // function for a supplied set of parameters. The syntax of the function is:
 //
-//    BETADIST(x,alpha,beta,[A],[B])
-//
+//     BETADIST(x,alpha,beta,[A],[B])
 func (fn *formulaFuncs) BETADIST(argsList *list.List) formulaArg {
        if argsList.Len() < 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "BETADIST requires at least 3 arguments")
@@ -6826,8 +6681,7 @@ func (fn *formulaFuncs) betainv(name string, argsList *list.List) formulaArg {
 // the cumulative beta probability density function for a supplied
 // probability. The syntax of the function is:
 //
-//    BETAINV(probability,alpha,beta,[A],[B])
-//
+//     BETAINV(probability,alpha,beta,[A],[B])
 func (fn *formulaFuncs) BETAINV(argsList *list.List) formulaArg {
        return fn.betainv("BETAINV", argsList)
 }
@@ -6836,8 +6690,7 @@ func (fn *formulaFuncs) BETAINV(argsList *list.List) formulaArg {
 // the cumulative beta probability density function for a supplied
 // probability. The syntax of the function is:
 //
-//    BETA.INV(probability,alpha,beta,[A],[B])
-//
+//     BETA.INV(probability,alpha,beta,[A],[B])
 func (fn *formulaFuncs) BETAdotINV(argsList *list.List) formulaArg {
        return fn.betainv("BETA.INV", argsList)
 }
@@ -6870,8 +6723,7 @@ func binomdist(x, n, p float64) float64 {
 // given number of successes from a specified number of trials. The syntax of
 // the function is:
 //
-//    BINOM.DIST(number_s,trials,probability_s,cumulative)
-//
+//     BINOM.DIST(number_s,trials,probability_s,cumulative)
 func (fn *formulaFuncs) BINOMdotDIST(argsList *list.List) formulaArg {
        if argsList.Len() != 4 {
                return newErrorFormulaArg(formulaErrorVALUE, "BINOM.DIST requires 4 arguments")
@@ -6883,8 +6735,7 @@ func (fn *formulaFuncs) BINOMdotDIST(argsList *list.List) formulaArg {
 // specified number of successes out of a specified number of trials. The
 // syntax of the function is:
 //
-//    BINOMDIST(number_s,trials,probability_s,cumulative)
-//
+//     BINOMDIST(number_s,trials,probability_s,cumulative)
 func (fn *formulaFuncs) BINOMDIST(argsList *list.List) formulaArg {
        if argsList.Len() != 4 {
                return newErrorFormulaArg(formulaErrorVALUE, "BINOMDIST requires 4 arguments")
@@ -6923,8 +6774,7 @@ func (fn *formulaFuncs) BINOMDIST(argsList *list.List) formulaArg {
 // for the number of successes from a specified number of trials falling into
 // a specified range.
 //
-//    BINOM.DIST.RANGE(trials,probability_s,number_s,[number_s2])
-//
+//     BINOM.DIST.RANGE(trials,probability_s,number_s,[number_s2])
 func (fn *formulaFuncs) BINOMdotDISTdotRANGE(argsList *list.List) formulaArg {
        if argsList.Len() < 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "BINOM.DIST.RANGE requires at least 3 arguments")
@@ -6991,8 +6841,7 @@ func binominv(n, p, alpha float64) float64 {
 // BINOMdotINV function returns the inverse of the Cumulative Binomial
 // Distribution. The syntax of the function is:
 //
-//    BINOM.INV(trials,probability_s,alpha)
-//
+//     BINOM.INV(trials,probability_s,alpha)
 func (fn *formulaFuncs) BINOMdotINV(argsList *list.List) formulaArg {
        if argsList.Len() != 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "BINOM.INV requires 3 numeric arguments")
@@ -7024,8 +6873,7 @@ func (fn *formulaFuncs) BINOMdotINV(argsList *list.List) formulaArg {
 // CHIDIST function calculates the right-tailed probability of the chi-square
 // distribution. The syntax of the function is:
 //
-//    CHIDIST(x,degrees_freedom)
-//
+//     CHIDIST(x,degrees_freedom)
 func (fn *formulaFuncs) CHIDIST(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "CHIDIST requires 2 numeric arguments")
@@ -7088,8 +6936,7 @@ func (fn *formulaFuncs) CHIDIST(argsList *list.List) formulaArg {
 // CHIINV function calculates the inverse of the right-tailed probability of
 // the Chi-Square Distribution. The syntax of the function is:
 //
-//    CHIINV(probability,deg_freedom)
-//
+//     CHIINV(probability,deg_freedom)
 func (fn *formulaFuncs) CHIINV(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "CHIINV requires 2 numeric arguments")
@@ -7116,8 +6963,7 @@ func (fn *formulaFuncs) CHIINV(argsList *list.List) formulaArg {
 // frequencies), are likely to be simply due to sampling error, or if they are
 // likely to be real. The syntax of the function is:
 //
-//    CHITEST(actual_range,expected_range)
-//
+//     CHITEST(actual_range,expected_range)
 func (fn *formulaFuncs) CHITEST(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "CHITEST requires 2 arguments")
@@ -7309,8 +7155,7 @@ func getChiSqDistPDF(fX, fDF float64) float64 {
 // Cumulative Distribution Function for the Chi-Square Distribution. The
 // syntax of the function is:
 //
-//    CHISQ.DIST(x,degrees_freedom,cumulative)
-//
+//     CHISQ.DIST(x,degrees_freedom,cumulative)
 func (fn *formulaFuncs) CHISQdotDIST(argsList *list.List) formulaArg {
        if argsList.Len() != 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "CHISQ.DIST requires 3 arguments")
@@ -7341,8 +7186,7 @@ func (fn *formulaFuncs) CHISQdotDIST(argsList *list.List) formulaArg {
 // CHISQdotDISTdotRT function calculates the right-tailed probability of the
 // Chi-Square Distribution. The syntax of the function is:
 //
-//    CHISQ.DIST.RT(x,degrees_freedom)
-//
+//     CHISQ.DIST.RT(x,degrees_freedom)
 func (fn *formulaFuncs) CHISQdotDISTdotRT(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "CHISQ.DIST.RT requires 2 numeric arguments")
@@ -7355,8 +7199,7 @@ func (fn *formulaFuncs) CHISQdotDISTdotRT(argsList *list.List) formulaArg {
 // the differences between the sets are simply due to sampling error. The
 // syntax of the function is:
 //
-//    CHISQ.TEST(actual_range,expected_range)
-//
+//     CHISQ.TEST(actual_range,expected_range)
 func (fn *formulaFuncs) CHISQdotTEST(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "CHISQ.TEST requires 2 arguments")
@@ -7454,8 +7297,7 @@ func calcIterateInverse(iterator calcInverseIterator, fAx, fBx float64) float64
 // CHISQdotINV function calculates the inverse of the left-tailed probability
 // of the Chi-Square Distribution. The syntax of the function is:
 //
-//    CHISQ.INV(probability,degrees_freedom)
-//
+//     CHISQ.INV(probability,degrees_freedom)
 func (fn *formulaFuncs) CHISQdotINV(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "CHISQ.INV requires 2 numeric arguments")
@@ -7483,8 +7325,7 @@ func (fn *formulaFuncs) CHISQdotINV(argsList *list.List) formulaArg {
 // CHISQdotINVdotRT function calculates the inverse of the right-tailed
 // probability of the Chi-Square Distribution. The syntax of the function is:
 //
-//    CHISQ.INV.RT(probability,degrees_freedom)
-//
+//     CHISQ.INV.RT(probability,degrees_freedom)
 func (fn *formulaFuncs) CHISQdotINVdotRT(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "CHISQ.INV.RT requires 2 numeric arguments")
@@ -7533,8 +7374,7 @@ func (fn *formulaFuncs) confidence(name string, argsList *list.List) formulaArg
 // that the standard deviation of the population is known. The syntax of the
 // function is:
 //
-//    CONFIDENCE(alpha,standard_dev,size)
-//
+//     CONFIDENCE(alpha,standard_dev,size)
 func (fn *formulaFuncs) CONFIDENCE(argsList *list.List) formulaArg {
        return fn.confidence("CONFIDENCE", argsList)
 }
@@ -7545,8 +7385,7 @@ func (fn *formulaFuncs) CONFIDENCE(argsList *list.List) formulaArg {
 // assumed that the standard deviation of the population is known. The syntax
 // of the function is:
 //
-//    CONFIDENCE.NORM(alpha,standard_dev,size)
-//
+//     CONFIDENCE.NORM(alpha,standard_dev,size)
 func (fn *formulaFuncs) CONFIDENCEdotNORM(argsList *list.List) formulaArg {
        return fn.confidence("CONFIDENCE.NORM", argsList)
 }
@@ -7557,8 +7396,7 @@ func (fn *formulaFuncs) CONFIDENCEdotNORM(argsList *list.List) formulaArg {
 // is assumed that the standard deviation of the population is known. The
 // syntax of the function is:
 //
-//    CONFIDENCE.T(alpha,standard_dev,size)
-//
+//     CONFIDENCE.T(alpha,standard_dev,size)
 func (fn *formulaFuncs) CONFIDENCEdotT(argsList *list.List) formulaArg {
        if argsList.Len() != 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "CONFIDENCE.T requires 3 arguments")
@@ -7623,8 +7461,7 @@ func (fn *formulaFuncs) covar(name string, argsList *list.List) formulaArg {
 // COVAR function calculates the covariance of two supplied sets of values. The
 // syntax of the function is:
 //
-//    COVAR(array1,array2)
-//
+//     COVAR(array1,array2)
 func (fn *formulaFuncs) COVAR(argsList *list.List) formulaArg {
        return fn.covar("COVAR", argsList)
 }
@@ -7632,8 +7469,7 @@ func (fn *formulaFuncs) COVAR(argsList *list.List) formulaArg {
 // COVARIANCEdotP function calculates the population covariance of two supplied
 // sets of values. The syntax of the function is:
 //
-//    COVARIANCE.P(array1,array2)
-//
+//     COVARIANCE.P(array1,array2)
 func (fn *formulaFuncs) COVARIANCEdotP(argsList *list.List) formulaArg {
        return fn.covar("COVARIANCE.P", argsList)
 }
@@ -7641,8 +7477,7 @@ func (fn *formulaFuncs) COVARIANCEdotP(argsList *list.List) formulaArg {
 // COVARIANCEdotS function calculates the sample covariance of two supplied
 // sets of values. The syntax of the function is:
 //
-//    COVARIANCE.S(array1,array2)
-//
+//     COVARIANCE.S(array1,array2)
 func (fn *formulaFuncs) COVARIANCEdotS(argsList *list.List) formulaArg {
        return fn.covar("COVARIANCE.S", argsList)
 }
@@ -7693,8 +7528,7 @@ func (fn *formulaFuncs) countSum(countText bool, args []formulaArg) (count, sum
 // CORREL function calculates the Pearson Product-Moment Correlation
 // Coefficient for two sets of values. The syntax of the function is:
 //
-//    CORREL(array1,array2)
-//
+//     CORREL(array1,array2)
 func (fn *formulaFuncs) CORREL(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "CORREL requires 2 arguments")
@@ -7733,8 +7567,7 @@ func (fn *formulaFuncs) CORREL(argsList *list.List) formulaArg {
 // cells or values. This count includes both numbers and dates. The syntax of
 // the function is:
 //
-//    COUNT(value1,[value2],...)
-//
+//     COUNT(value1,[value2],...)
 func (fn *formulaFuncs) COUNT(argsList *list.List) formulaArg {
        var count int
        for token := argsList.Front(); token != nil; token = token.Next() {
@@ -7760,8 +7593,7 @@ func (fn *formulaFuncs) COUNT(argsList *list.List) formulaArg {
 // COUNTA function returns the number of non-blanks within a supplied set of
 // cells or values. The syntax of the function is:
 //
-//    COUNTA(value1,[value2],...)
-//
+//     COUNTA(value1,[value2],...)
 func (fn *formulaFuncs) COUNTA(argsList *list.List) formulaArg {
        var count int
        for token := argsList.Front(); token != nil; token = token.Next() {
@@ -7792,8 +7624,7 @@ func (fn *formulaFuncs) COUNTA(argsList *list.List) formulaArg {
 // COUNTBLANK function returns the number of blank cells in a supplied range.
 // The syntax of the function is:
 //
-//    COUNTBLANK(range)
-//
+//     COUNTBLANK(range)
 func (fn *formulaFuncs) COUNTBLANK(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "COUNTBLANK requires 1 argument")
@@ -7810,8 +7641,7 @@ func (fn *formulaFuncs) COUNTBLANK(argsList *list.List) formulaArg {
 // COUNTIF function returns the number of cells within a supplied range, that
 // satisfy a given criteria. The syntax of the function is:
 //
-//    COUNTIF(range,criteria)
-//
+//     COUNTIF(range,criteria)
 func (fn *formulaFuncs) COUNTIF(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "COUNTIF requires 2 arguments")
@@ -7860,8 +7690,7 @@ func formulaIfsMatch(args []formulaArg) (cellRefs []cellRef) {
 // COUNTIFS function returns the number of rows within a table, that satisfy a
 // set of given criteria. The syntax of the function is:
 //
-//    COUNTIFS(criteria_range1,criteria1,[criteria_range2,criteria2],...)
-//
+//     COUNTIFS(criteria_range1,criteria1,[criteria_range2,criteria2],...)
 func (fn *formulaFuncs) COUNTIFS(argsList *list.List) formulaArg {
        if argsList.Len() < 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "COUNTIFS requires at least 2 arguments")
@@ -7882,8 +7711,7 @@ func (fn *formulaFuncs) COUNTIFS(argsList *list.List) formulaArg {
 // cumulative binomial distribution is greater than or equal to a specified
 // value. The syntax of the function is:
 //
-//    CRITBINOM(trials,probability_s,alpha)
-//
+//     CRITBINOM(trials,probability_s,alpha)
 func (fn *formulaFuncs) CRITBINOM(argsList *list.List) formulaArg {
        if argsList.Len() != 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "CRITBINOM requires 3 numeric arguments")
@@ -7894,8 +7722,7 @@ func (fn *formulaFuncs) CRITBINOM(argsList *list.List) formulaArg {
 // DEVSQ function calculates the sum of the squared deviations from the sample
 // mean. The syntax of the function is:
 //
-//    DEVSQ(number1,[number2],...)
-//
+//     DEVSQ(number1,[number2],...)
 func (fn *formulaFuncs) DEVSQ(argsList *list.List) formulaArg {
        if argsList.Len() < 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "DEVSQ requires at least 1 numeric argument")
@@ -7924,8 +7751,7 @@ func (fn *formulaFuncs) DEVSQ(argsList *list.List) formulaArg {
 // FISHER function calculates the Fisher Transformation for a supplied value.
 // The syntax of the function is:
 //
-//    FISHER(x)
-//
+//     FISHER(x)
 func (fn *formulaFuncs) FISHER(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "FISHER requires 1 numeric argument")
@@ -7952,8 +7778,7 @@ func (fn *formulaFuncs) FISHER(argsList *list.List) formulaArg {
 // FISHERINV function calculates the inverse of the Fisher Transformation and
 // returns a value between -1 and +1. The syntax of the function is:
 //
-//    FISHERINV(y)
-//
+//     FISHERINV(y)
 func (fn *formulaFuncs) FISHERINV(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "FISHERINV requires 1 numeric argument")
@@ -7974,8 +7799,7 @@ func (fn *formulaFuncs) FISHERINV(argsList *list.List) formulaArg {
 // GAMMA function returns the value of the Gamma Function, Γ(n), for a
 // specified number, n. The syntax of the function is:
 //
-//    GAMMA(number)
-//
+//     GAMMA(number)
 func (fn *formulaFuncs) GAMMA(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "GAMMA requires 1 numeric argument")
@@ -7994,8 +7818,7 @@ func (fn *formulaFuncs) GAMMA(argsList *list.List) formulaArg {
 // used to provide probabilities for values that may have a skewed
 // distribution, such as queuing analysis.
 //
-//    GAMMA.DIST(x,alpha,beta,cumulative)
-//
+//     GAMMA.DIST(x,alpha,beta,cumulative)
 func (fn *formulaFuncs) GAMMAdotDIST(argsList *list.List) formulaArg {
        if argsList.Len() != 4 {
                return newErrorFormulaArg(formulaErrorVALUE, "GAMMA.DIST requires 4 arguments")
@@ -8007,8 +7830,7 @@ func (fn *formulaFuncs) GAMMAdotDIST(argsList *list.List) formulaArg {
 // to provide probabilities for values that may have a skewed distribution,
 // such as queuing analysis.
 //
-//    GAMMADIST(x,alpha,beta,cumulative)
-//
+//     GAMMADIST(x,alpha,beta,cumulative)
 func (fn *formulaFuncs) GAMMADIST(argsList *list.List) formulaArg {
        if argsList.Len() != 4 {
                return newErrorFormulaArg(formulaErrorVALUE, "GAMMADIST requires 4 arguments")
@@ -8070,8 +7892,7 @@ func gammainv(probability, alpha, beta float64) float64 {
 // GAMMAdotINV function returns the inverse of the Gamma Cumulative
 // Distribution. The syntax of the function is:
 //
-//    GAMMA.INV(probability,alpha,beta)
-//
+//     GAMMA.INV(probability,alpha,beta)
 func (fn *formulaFuncs) GAMMAdotINV(argsList *list.List) formulaArg {
        if argsList.Len() != 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "GAMMA.INV requires 3 arguments")
@@ -8082,8 +7903,7 @@ func (fn *formulaFuncs) GAMMAdotINV(argsList *list.List) formulaArg {
 // GAMMAINV function returns the inverse of the Gamma Cumulative Distribution.
 // The syntax of the function is:
 //
-//    GAMMAINV(probability,alpha,beta)
-//
+//     GAMMAINV(probability,alpha,beta)
 func (fn *formulaFuncs) GAMMAINV(argsList *list.List) formulaArg {
        if argsList.Len() != 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "GAMMAINV requires 3 arguments")
@@ -8110,8 +7930,7 @@ func (fn *formulaFuncs) GAMMAINV(argsList *list.List) formulaArg {
 // GAMMALN function returns the natural logarithm of the Gamma Function, Γ
 // (n). The syntax of the function is:
 //
-//    GAMMALN(x)
-//
+//     GAMMALN(x)
 func (fn *formulaFuncs) GAMMALN(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "GAMMALN requires 1 numeric argument")
@@ -8129,8 +7948,7 @@ func (fn *formulaFuncs) GAMMALN(argsList *list.List) formulaArg {
 // GAMMALNdotPRECISE function returns the natural logarithm of the Gamma
 // Function, Γ(n). The syntax of the function is:
 //
-//    GAMMALN.PRECISE(x)
-//
+//     GAMMALN.PRECISE(x)
 func (fn *formulaFuncs) GAMMALNdotPRECISE(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "GAMMALN.PRECISE requires 1 numeric argument")
@@ -8149,8 +7967,7 @@ func (fn *formulaFuncs) GAMMALNdotPRECISE(argsList *list.List) formulaArg {
 // population will fall between the mean and a specified number of standard
 // deviations from the mean. The syntax of the function is:
 //
-//    GAUSS(z)
-//
+//     GAUSS(z)
 func (fn *formulaFuncs) GAUSS(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "GAUSS requires 1 numeric argument")
@@ -8170,8 +7987,7 @@ func (fn *formulaFuncs) GAUSS(argsList *list.List) formulaArg {
 // GEOMEAN function calculates the geometric mean of a supplied set of values.
 // The syntax of the function is:
 //
-//    GEOMEAN(number1,[number2],...)
-//
+//     GEOMEAN(number1,[number2],...)
 func (fn *formulaFuncs) GEOMEAN(argsList *list.List) formulaArg {
        if argsList.Len() < 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "GEOMEAN requires at least 1 numeric argument")
@@ -8874,8 +8690,7 @@ func (fn *formulaFuncs) trendGrowth(name string, argsList *list.List) formulaArg
 // then extends the curve to calculate additional y-values for a further
 // supplied set of new x-values. The syntax of the function is:
 //
-//    GROWTH(known_y's,[known_x's],[new_x's],[const])
-//
+//     GROWTH(known_y's,[known_x's],[new_x's],[const])
 func (fn *formulaFuncs) GROWTH(argsList *list.List) formulaArg {
        return fn.trendGrowth("GROWTH", argsList)
 }
@@ -8883,8 +8698,7 @@ func (fn *formulaFuncs) GROWTH(argsList *list.List) formulaArg {
 // HARMEAN function calculates the harmonic mean of a supplied set of values.
 // The syntax of the function is:
 //
-//    HARMEAN(number1,[number2],...)
-//
+//     HARMEAN(number1,[number2],...)
 func (fn *formulaFuncs) HARMEAN(argsList *list.List) formulaArg {
        if argsList.Len() < 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "HARMEAN requires at least 1 argument")
@@ -8965,8 +8779,7 @@ func (fn *formulaFuncs) prepareHYPGEOMDISTArgs(name string, argsList *list.List)
 // can calculate the cumulative distribution or the probability density
 // function. The syntax of the function is:
 //
-//    HYPGEOM.DIST(sample_s,number_sample,population_s,number_pop,cumulative)
-//
+//     HYPGEOM.DIST(sample_s,number_sample,population_s,number_pop,cumulative)
 func (fn *formulaFuncs) HYPGEOMdotDIST(argsList *list.List) formulaArg {
        args := fn.prepareHYPGEOMDISTArgs("HYPGEOM.DIST", argsList)
        if args.Type != ArgList {
@@ -8991,8 +8804,7 @@ func (fn *formulaFuncs) HYPGEOMdotDIST(argsList *list.List) formulaArg {
 // for a given number of successes from a sample of a population. The syntax
 // of the function is:
 //
-//    HYPGEOMDIST(sample_s,number_sample,population_s,number_pop)
-//
+//     HYPGEOMDIST(sample_s,number_sample,population_s,number_pop)
 func (fn *formulaFuncs) HYPGEOMDIST(argsList *list.List) formulaArg {
        args := fn.prepareHYPGEOMDISTArgs("HYPGEOMDIST", argsList)
        if args.Type != ArgList {
@@ -9007,8 +8819,7 @@ func (fn *formulaFuncs) HYPGEOMDIST(argsList *list.List) formulaArg {
 // KURT function calculates the kurtosis of a supplied set of values. The
 // syntax of the function is:
 //
-//    KURT(number1,[number2],...)
-//
+//     KURT(number1,[number2],...)
 func (fn *formulaFuncs) KURT(argsList *list.List) formulaArg {
        if argsList.Len() < 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "KURT requires at least 1 argument")
@@ -9051,8 +8862,7 @@ func (fn *formulaFuncs) KURT(argsList *list.List) formulaArg {
 // function or the cumulative distribution function is used. The syntax of the
 // Expondist function is:
 //
-//    EXPON.DIST(x,lambda,cumulative)
-//
+//     EXPON.DIST(x,lambda,cumulative)
 func (fn *formulaFuncs) EXPONdotDIST(argsList *list.List) formulaArg {
        if argsList.Len() != 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "EXPON.DIST requires 3 arguments")
@@ -9065,8 +8875,7 @@ func (fn *formulaFuncs) EXPONdotDIST(argsList *list.List) formulaArg {
 // function or the cumulative distribution function is used. The syntax of the
 // Expondist function is:
 //
-//    EXPONDIST(x,lambda,cumulative)
-//
+//     EXPONDIST(x,lambda,cumulative)
 func (fn *formulaFuncs) EXPONDIST(argsList *list.List) formulaArg {
        if argsList.Len() != 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "EXPONDIST requires 3 arguments")
@@ -9098,8 +8907,7 @@ func (fn *formulaFuncs) EXPONDIST(argsList *list.List) formulaArg {
 // frequently used to measure the degree of diversity between two data
 // sets. The syntax of the function is:
 //
-//    F.DIST(x,deg_freedom1,deg_freedom2,cumulative)
-//
+//     F.DIST(x,deg_freedom1,deg_freedom2,cumulative)
 func (fn *formulaFuncs) FdotDIST(argsList *list.List) formulaArg {
        if argsList.Len() != 4 {
                return newErrorFormulaArg(formulaErrorVALUE, "F.DIST requires 4 arguments")
@@ -9137,8 +8945,7 @@ func (fn *formulaFuncs) FdotDIST(argsList *list.List) formulaArg {
 // which measures the degree of diversity between two data sets. The syntax
 // of the function is:
 //
-//    FDIST(x,deg_freedom1,deg_freedom2)
-//
+//     FDIST(x,deg_freedom1,deg_freedom2)
 func (fn *formulaFuncs) FDIST(argsList *list.List) formulaArg {
        if argsList.Len() != 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "FDIST requires 3 arguments")
@@ -9176,8 +8983,7 @@ func (fn *formulaFuncs) FDIST(argsList *list.List) formulaArg {
 // Distribution, which measures the degree of diversity between two data sets.
 // The syntax of the function is:
 //
-//   F.DIST.RT(x,deg_freedom1,deg_freedom2)
-//
+//     F.DIST.RT(x,deg_freedom1,deg_freedom2)
 func (fn *formulaFuncs) FdotDISTdotRT(argsList *list.List) formulaArg {
        if argsList.Len() != 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "F.DIST.RT requires 3 arguments")
@@ -9216,8 +9022,7 @@ func (fn *formulaFuncs) prepareFinvArgs(name string, argsList *list.List) formul
 // FdotINV function calculates the inverse of the Cumulative F Distribution
 // for a supplied probability. The syntax of the F.Inv function is:
 //
-//    F.INV(probability,deg_freedom1,deg_freedom2)
-//
+//     F.INV(probability,deg_freedom1,deg_freedom2)
 func (fn *formulaFuncs) FdotINV(argsList *list.List) formulaArg {
        args := fn.prepareFinvArgs("F.INV", argsList)
        if args.Type != ArgList {
@@ -9231,8 +9036,7 @@ func (fn *formulaFuncs) FdotINV(argsList *list.List) formulaArg {
 // Probability Distribution for a supplied probability. The syntax of the
 // function is:
 //
-//    F.INV.RT(probability,deg_freedom1,deg_freedom2)
-//
+//     F.INV.RT(probability,deg_freedom1,deg_freedom2)
 func (fn *formulaFuncs) FdotINVdotRT(argsList *list.List) formulaArg {
        args := fn.prepareFinvArgs("F.INV.RT", argsList)
        if args.Type != ArgList {
@@ -9245,8 +9049,7 @@ func (fn *formulaFuncs) FdotINVdotRT(argsList *list.List) formulaArg {
 // FINV function calculates the inverse of the (right-tailed) F Probability
 // Distribution for a supplied probability. The syntax of the function is:
 //
-//    FINV(probability,deg_freedom1,deg_freedom2)
-//
+//     FINV(probability,deg_freedom1,deg_freedom2)
 func (fn *formulaFuncs) FINV(argsList *list.List) formulaArg {
        args := fn.prepareFinvArgs("FINV", argsList)
        if args.Type != ArgList {
@@ -9261,8 +9064,7 @@ func (fn *formulaFuncs) FINV(argsList *list.List) formulaArg {
 // supplied arrays are not significantly different. The syntax of the Ftest
 // function is:
 //
-//    F.TEST(array1,array2)
-//
+//     F.TEST(array1,array2)
 func (fn *formulaFuncs) FdotTEST(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "F.TEST requires 2 arguments")
@@ -9318,8 +9120,7 @@ func (fn *formulaFuncs) FdotTEST(argsList *list.List) formulaArg {
 // arrays are not significantly different. The syntax of the Ftest function
 // is:
 //
-//    FTEST(array1,array2)
-//
+//     FTEST(array1,array2)
 func (fn *formulaFuncs) FTEST(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "FTEST requires 2 arguments")
@@ -9331,8 +9132,7 @@ func (fn *formulaFuncs) FTEST(argsList *list.List) formulaArg {
 // Distribution Function of x, for a supplied probability. The syntax of the
 // function is:
 //
-//    LOGINV(probability,mean,standard_dev)
-//
+//     LOGINV(probability,mean,standard_dev)
 func (fn *formulaFuncs) LOGINV(argsList *list.List) formulaArg {
        if argsList.Len() != 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "LOGINV requires 3 arguments")
@@ -9365,8 +9165,7 @@ func (fn *formulaFuncs) LOGINV(argsList *list.List) formulaArg {
 // Distribution Function of x, for a supplied probability. The syntax of the
 // function is:
 //
-//    LOGNORM.INV(probability,mean,standard_dev)
-//
+//     LOGNORM.INV(probability,mean,standard_dev)
 func (fn *formulaFuncs) LOGNORMdotINV(argsList *list.List) formulaArg {
        if argsList.Len() != 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "LOGNORM.INV requires 3 arguments")
@@ -9378,8 +9177,7 @@ func (fn *formulaFuncs) LOGNORMdotINV(argsList *list.List) formulaArg {
 // Function or the Cumulative Log-Normal Distribution Function for a supplied
 // value of x. The syntax of the function is:
 //
-//    LOGNORM.DIST(x,mean,standard_dev,cumulative)
-//
+//     LOGNORM.DIST(x,mean,standard_dev,cumulative)
 func (fn *formulaFuncs) LOGNORMdotDIST(argsList *list.List) formulaArg {
        if argsList.Len() != 4 {
                return newErrorFormulaArg(formulaErrorVALUE, "LOGNORM.DIST requires 4 arguments")
@@ -9415,8 +9213,7 @@ func (fn *formulaFuncs) LOGNORMdotDIST(argsList *list.List) formulaArg {
 // LOGNORMDIST function calculates the Cumulative Log-Normal Distribution
 // Function at a supplied value of x. The syntax of the function is:
 //
-//    LOGNORMDIST(x,mean,standard_dev)
-//
+//     LOGNORMDIST(x,mean,standard_dev)
 func (fn *formulaFuncs) LOGNORMDIST(argsList *list.List) formulaArg {
        if argsList.Len() != 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "LOGNORMDIST requires 3 arguments")
@@ -9444,8 +9241,7 @@ func (fn *formulaFuncs) LOGNORMDIST(argsList *list.List) formulaArg {
 // frequently occurring values in the supplied data, the function returns the
 // lowest of these values The syntax of the function is:
 //
-//    MODE(number1,[number2],...)
-//
+//     MODE(number1,[number2],...)
 func (fn *formulaFuncs) MODE(argsList *list.List) formulaArg {
        if argsList.Len() < 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "MODE requires at least 1 argument")
@@ -9488,8 +9284,7 @@ func (fn *formulaFuncs) MODE(argsList *list.List) formulaArg {
 // (the most frequently occurring values) within a list of supplied numbers.
 // The syntax of the function is:
 //
-//    MODE.MULT(number1,[number2],...)
-//
+//     MODE.MULT(number1,[number2],...)
 func (fn *formulaFuncs) MODEdotMULT(argsList *list.List) formulaArg {
        if argsList.Len() < 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "MODE.MULT requires at least 1 argument")
@@ -9536,8 +9331,7 @@ func (fn *formulaFuncs) MODEdotMULT(argsList *list.List) formulaArg {
 // most frequently occurring values in the supplied data, the function returns
 // the lowest of these values. The syntax of the function is:
 //
-//    MODE.SNGL(number1,[number2],...)
-//
+//     MODE.SNGL(number1,[number2],...)
 func (fn *formulaFuncs) MODEdotSNGL(argsList *list.List) formulaArg {
        if argsList.Len() < 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "MODE.SNGL requires at least 1 argument")
@@ -9551,8 +9345,7 @@ func (fn *formulaFuncs) MODEdotSNGL(argsList *list.List) formulaArg {
 // before a required number of successes is achieved. The syntax of the
 // function is:
 //
-//    NEGBINOM.DIST(number_f,number_s,probability_s,cumulative)
-//
+//     NEGBINOM.DIST(number_f,number_s,probability_s,cumulative)
 func (fn *formulaFuncs) NEGBINOMdotDIST(argsList *list.List) formulaArg {
        if argsList.Len() != 4 {
                return newErrorFormulaArg(formulaErrorVALUE, "NEGBINOM.DIST requires 4 arguments")
@@ -9584,8 +9377,7 @@ func (fn *formulaFuncs) NEGBINOMdotDIST(argsList *list.List) formulaArg {
 // specified number of failures before a required number of successes is
 // achieved. The syntax of the function is:
 //
-//    NEGBINOMDIST(number_f,number_s,probability_s)
-//
+//     NEGBINOMDIST(number_f,number_s,probability_s)
 func (fn *formulaFuncs) NEGBINOMDIST(argsList *list.List) formulaArg {
        if argsList.Len() != 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "NEGBINOMDIST requires 3 arguments")
@@ -9610,8 +9402,7 @@ func (fn *formulaFuncs) NEGBINOMDIST(argsList *list.List) formulaArg {
 // the Cumulative Normal Distribution. Function for a supplied set of
 // parameters. The syntax of the function is:
 //
-//    NORM.DIST(x,mean,standard_dev,cumulative)
-//
+//     NORM.DIST(x,mean,standard_dev,cumulative)
 func (fn *formulaFuncs) NORMdotDIST(argsList *list.List) formulaArg {
        if argsList.Len() != 4 {
                return newErrorFormulaArg(formulaErrorVALUE, "NORM.DIST requires 4 arguments")
@@ -9623,8 +9414,7 @@ func (fn *formulaFuncs) NORMdotDIST(argsList *list.List) formulaArg {
 // Cumulative Normal Distribution. Function for a supplied set of parameters.
 // The syntax of the function is:
 //
-//    NORMDIST(x,mean,standard_dev,cumulative)
-//
+//     NORMDIST(x,mean,standard_dev,cumulative)
 func (fn *formulaFuncs) NORMDIST(argsList *list.List) formulaArg {
        if argsList.Len() != 4 {
                return newErrorFormulaArg(formulaErrorVALUE, "NORMDIST requires 4 arguments")
@@ -9655,8 +9445,7 @@ func (fn *formulaFuncs) NORMDIST(argsList *list.List) formulaArg {
 // Distribution Function for a supplied value of x, and a supplied
 // distribution mean & standard deviation. The syntax of the function is:
 //
-//    NORM.INV(probability,mean,standard_dev)
-//
+//     NORM.INV(probability,mean,standard_dev)
 func (fn *formulaFuncs) NORMdotINV(argsList *list.List) formulaArg {
        if argsList.Len() != 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "NORM.INV requires 3 arguments")
@@ -9668,8 +9457,7 @@ func (fn *formulaFuncs) NORMdotINV(argsList *list.List) formulaArg {
 // Distribution Function for a supplied value of x, and a supplied
 // distribution mean & standard deviation. The syntax of the function is:
 //
-//    NORMINV(probability,mean,standard_dev)
-//
+//     NORMINV(probability,mean,standard_dev)
 func (fn *formulaFuncs) NORMINV(argsList *list.List) formulaArg {
        if argsList.Len() != 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "NORMINV requires 3 arguments")
@@ -9701,8 +9489,7 @@ func (fn *formulaFuncs) NORMINV(argsList *list.List) formulaArg {
 // Distribution Function for a supplied value. The syntax of the function
 // is:
 //
-//    NORM.S.DIST(z)
-//
+//     NORM.S.DIST(z)
 func (fn *formulaFuncs) NORMdotSdotDIST(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "NORM.S.DIST requires 2 numeric arguments")
@@ -9718,8 +9505,7 @@ func (fn *formulaFuncs) NORMdotSdotDIST(argsList *list.List) formulaArg {
 // NORMSDIST function calculates the Standard Normal Cumulative Distribution
 // Function for a supplied value. The syntax of the function is:
 //
-//    NORMSDIST(z)
-//
+//     NORMSDIST(z)
 func (fn *formulaFuncs) NORMSDIST(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "NORMSDIST requires 1 numeric argument")
@@ -9736,8 +9522,7 @@ func (fn *formulaFuncs) NORMSDIST(argsList *list.List) formulaArg {
 // Distribution Function for a supplied probability value. The syntax of the
 // function is:
 //
-//    NORMSINV(probability)
-//
+//     NORMSINV(probability)
 func (fn *formulaFuncs) NORMSINV(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "NORMSINV requires 1 numeric argument")
@@ -9753,8 +9538,7 @@ func (fn *formulaFuncs) NORMSINV(argsList *list.List) formulaArg {
 // Cumulative Distribution Function for a supplied probability value. The
 // syntax of the function is:
 //
-//    NORM.S.INV(probability)
-//
+//     NORM.S.INV(probability)
 func (fn *formulaFuncs) NORMdotSdotINV(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "NORM.S.INV requires 1 numeric argument")
@@ -9844,8 +9628,7 @@ func (fn *formulaFuncs) kth(name string, argsList *list.List) formulaArg {
 // LARGE function returns the k'th largest value from an array of numeric
 // values. The syntax of the function is:
 //
-//    LARGE(array,k)
-//
+//     LARGE(array,k)
 func (fn *formulaFuncs) LARGE(argsList *list.List) formulaArg {
        return fn.kth("LARGE", argsList)
 }
@@ -9853,8 +9636,7 @@ func (fn *formulaFuncs) LARGE(argsList *list.List) formulaArg {
 // MAX function returns the largest value from a supplied set of numeric
 // values. The syntax of the function is:
 //
-//    MAX(number1,[number2],...)
-//
+//     MAX(number1,[number2],...)
 func (fn *formulaFuncs) MAX(argsList *list.List) formulaArg {
        if argsList.Len() == 0 {
                return newErrorFormulaArg(formulaErrorVALUE, "MAX requires at least 1 argument")
@@ -9867,8 +9649,7 @@ func (fn *formulaFuncs) MAX(argsList *list.List) formulaArg {
 // counting the logical value TRUE as the value 1. The syntax of the function
 // is:
 //
-//    MAXA(number1,[number2],...)
-//
+//     MAXA(number1,[number2],...)
 func (fn *formulaFuncs) MAXA(argsList *list.List) formulaArg {
        if argsList.Len() == 0 {
                return newErrorFormulaArg(formulaErrorVALUE, "MAXA requires at least 1 argument")
@@ -9880,8 +9661,7 @@ func (fn *formulaFuncs) MAXA(argsList *list.List) formulaArg {
 // specified according to one or more criteria. The syntax of the function
 // is:
 //
-//    MAXIFS(max_range,criteria_range1,criteria1,[criteria_range2,criteria2],...)
-//
+//     MAXIFS(max_range,criteria_range1,criteria1,[criteria_range2,criteria2],...)
 func (fn *formulaFuncs) MAXIFS(argsList *list.List) formulaArg {
        if argsList.Len() < 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "MAXIFS requires at least 3 arguments")
@@ -9971,8 +9751,7 @@ func (fn *formulaFuncs) max(maxa bool, argsList *list.List) formulaArg {
 // MEDIAN function returns the statistical median (the middle value) of a list
 // of supplied numbers. The syntax of the function is:
 //
-//    MEDIAN(number1,[number2],...)
-//
+//     MEDIAN(number1,[number2],...)
 func (fn *formulaFuncs) MEDIAN(argsList *list.List) formulaArg {
        if argsList.Len() == 0 {
                return newErrorFormulaArg(formulaErrorVALUE, "MEDIAN requires at least 1 argument")
@@ -10017,8 +9796,7 @@ func (fn *formulaFuncs) MEDIAN(argsList *list.List) formulaArg {
 // MIN function returns the smallest value from a supplied set of numeric
 // values. The syntax of the function is:
 //
-//    MIN(number1,[number2],...)
-//
+//     MIN(number1,[number2],...)
 func (fn *formulaFuncs) MIN(argsList *list.List) formulaArg {
        if argsList.Len() == 0 {
                return newErrorFormulaArg(formulaErrorVALUE, "MIN requires at least 1 argument")
@@ -10031,8 +9809,7 @@ func (fn *formulaFuncs) MIN(argsList *list.List) formulaArg {
 // counting the logical value TRUE as the value 1. The syntax of the function
 // is:
 //
-//    MINA(number1,[number2],...)
-//
+//     MINA(number1,[number2],...)
 func (fn *formulaFuncs) MINA(argsList *list.List) formulaArg {
        if argsList.Len() == 0 {
                return newErrorFormulaArg(formulaErrorVALUE, "MINA requires at least 1 argument")
@@ -10044,8 +9821,7 @@ func (fn *formulaFuncs) MINA(argsList *list.List) formulaArg {
 // specified according to one or more criteria. The syntax of the function
 // is:
 //
-//    MINIFS(min_range,criteria_range1,criteria1,[criteria_range2,criteria2],...)
-//
+//     MINIFS(min_range,criteria_range1,criteria1,[criteria_range2,criteria2],...)
 func (fn *formulaFuncs) MINIFS(argsList *list.List) formulaArg {
        if argsList.Len() < 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "MINIFS requires at least 3 arguments")
@@ -10185,8 +9961,7 @@ func (fn *formulaFuncs) pearsonProduct(name string, argsList *list.List) formula
 // PEARSON function calculates the Pearson Product-Moment Correlation
 // Coefficient for two sets of values. The syntax of the function is:
 //
-//    PEARSON(array1,array2)
-//
+//     PEARSON(array1,array2)
 func (fn *formulaFuncs) PEARSON(argsList *list.List) formulaArg {
        return fn.pearsonProduct("PEARSON", argsList)
 }
@@ -10195,8 +9970,7 @@ func (fn *formulaFuncs) PEARSON(argsList *list.List) formulaArg {
 // which k% of the data values fall) for a supplied range of values and a
 // supplied k (between 0 & 1 exclusive).The syntax of the function is:
 //
-//    PERCENTILE.EXC(array,k)
-//
+//     PERCENTILE.EXC(array,k)
 func (fn *formulaFuncs) PERCENTILEdotEXC(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "PERCENTILE.EXC requires 2 arguments")
@@ -10232,8 +10006,7 @@ func (fn *formulaFuncs) PERCENTILEdotEXC(argsList *list.List) formulaArg {
 // which k% of the data values fall) for a supplied range of values and a
 // supplied k. The syntax of the function is:
 //
-//    PERCENTILE.INC(array,k)
-//
+//     PERCENTILE.INC(array,k)
 func (fn *formulaFuncs) PERCENTILEdotINC(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "PERCENTILE.INC requires 2 arguments")
@@ -10245,8 +10018,7 @@ func (fn *formulaFuncs) PERCENTILEdotINC(argsList *list.List) formulaArg {
 // k% of the data values fall) for a supplied range of values and a supplied
 // k. The syntax of the function is:
 //
-//    PERCENTILE(array,k)
-//
+//     PERCENTILE(array,k)
 func (fn *formulaFuncs) PERCENTILE(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "PERCENTILE requires 2 arguments")
@@ -10338,8 +10110,7 @@ func (fn *formulaFuncs) percentrank(name string, argsList *list.List) formulaArg
 // 1 (exclusive), of a specified value within a supplied array. The syntax of
 // the function is:
 //
-//    PERCENTRANK.EXC(array,x,[significance])
-//
+//     PERCENTRANK.EXC(array,x,[significance])
 func (fn *formulaFuncs) PERCENTRANKdotEXC(argsList *list.List) formulaArg {
        return fn.percentrank("PERCENTRANK.EXC", argsList)
 }
@@ -10348,8 +10119,7 @@ func (fn *formulaFuncs) PERCENTRANKdotEXC(argsList *list.List) formulaArg {
 // 1 (inclusive), of a specified value within a supplied array.The syntax of
 // the function is:
 //
-//    PERCENTRANK.INC(array,x,[significance])
-//
+//     PERCENTRANK.INC(array,x,[significance])
 func (fn *formulaFuncs) PERCENTRANKdotINC(argsList *list.List) formulaArg {
        return fn.percentrank("PERCENTRANK.INC", argsList)
 }
@@ -10357,8 +10127,7 @@ func (fn *formulaFuncs) PERCENTRANKdotINC(argsList *list.List) formulaArg {
 // PERCENTRANK function calculates the relative position of a specified value,
 // within a set of values, as a percentage. The syntax of the function is:
 //
-//    PERCENTRANK(array,x,[significance])
-//
+//     PERCENTRANK(array,x,[significance])
 func (fn *formulaFuncs) PERCENTRANK(argsList *list.List) formulaArg {
        return fn.percentrank("PERCENTRANK", argsList)
 }
@@ -10366,8 +10135,7 @@ func (fn *formulaFuncs) PERCENTRANK(argsList *list.List) formulaArg {
 // PERMUT function calculates the number of permutations of a specified number
 // of objects from a set of objects. The syntax of the function is:
 //
-//    PERMUT(number,number_chosen)
-//
+//     PERMUT(number,number_chosen)
 func (fn *formulaFuncs) PERMUT(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "PERMUT requires 2 numeric arguments")
@@ -10390,8 +10158,7 @@ func (fn *formulaFuncs) PERMUT(argsList *list.List) formulaArg {
 // repetitions, of a specified number of objects from a set. The syntax of
 // the function is:
 //
-//    PERMUTATIONA(number,number_chosen)
-//
+//     PERMUTATIONA(number,number_chosen)
 func (fn *formulaFuncs) PERMUTATIONA(argsList *list.List) formulaArg {
        if argsList.Len() < 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "PERMUTATIONA requires 2 numeric arguments")
@@ -10414,8 +10181,7 @@ func (fn *formulaFuncs) PERMUTATIONA(argsList *list.List) formulaArg {
 // PHI function returns the value of the density function for a standard normal
 // distribution for a supplied number. The syntax of the function is:
 //
-//    PHI(x)
-//
+//     PHI(x)
 func (fn *formulaFuncs) PHI(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "PHI requires 1 argument")
@@ -10430,8 +10196,7 @@ func (fn *formulaFuncs) PHI(argsList *list.List) formulaArg {
 // QUARTILE function returns a requested quartile of a supplied range of
 // values. The syntax of the function is:
 //
-//    QUARTILE(array,quart)
-//
+//     QUARTILE(array,quart)
 func (fn *formulaFuncs) QUARTILE(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "QUARTILE requires 2 arguments")
@@ -10453,8 +10218,7 @@ func (fn *formulaFuncs) QUARTILE(argsList *list.List) formulaArg {
 // values, based on a percentile range of 0 to 1 exclusive. The syntax of the
 // function is:
 //
-//    QUARTILE.EXC(array,quart)
-//
+//     QUARTILE.EXC(array,quart)
 func (fn *formulaFuncs) QUARTILEdotEXC(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "QUARTILE.EXC requires 2 arguments")
@@ -10475,8 +10239,7 @@ func (fn *formulaFuncs) QUARTILEdotEXC(argsList *list.List) formulaArg {
 // QUARTILEdotINC function returns a requested quartile of a supplied range of
 // values. The syntax of the function is:
 //
-//    QUARTILE.INC(array,quart)
-//
+//     QUARTILE.INC(array,quart)
 func (fn *formulaFuncs) QUARTILEdotINC(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "QUARTILE.INC requires 2 arguments")
@@ -10523,8 +10286,7 @@ func (fn *formulaFuncs) rank(name string, argsList *list.List) formulaArg {
 // supplied array of values. If there are duplicate values in the list, these
 // are given the same rank. The syntax of the function is:
 //
-//    RANK.EQ(number,ref,[order])
-//
+//     RANK.EQ(number,ref,[order])
 func (fn *formulaFuncs) RANKdotEQ(argsList *list.List) formulaArg {
        return fn.rank("RANK.EQ", argsList)
 }
@@ -10533,8 +10295,7 @@ func (fn *formulaFuncs) RANKdotEQ(argsList *list.List) formulaArg {
 // supplied array of values. If there are duplicate values in the list, these
 // are given the same rank. The syntax of the function is:
 //
-//    RANK(number,ref,[order])
-//
+//     RANK(number,ref,[order])
 func (fn *formulaFuncs) RANK(argsList *list.List) formulaArg {
        return fn.rank("RANK", argsList)
 }
@@ -10543,8 +10304,7 @@ func (fn *formulaFuncs) RANK(argsList *list.List) formulaArg {
 // Coefficient for two supplied sets of values. The syntax of the function
 // is:
 //
-//    RSQ(known_y's,known_x's)
-//
+//     RSQ(known_y's,known_x's)
 func (fn *formulaFuncs) RSQ(argsList *list.List) formulaArg {
        return fn.pearsonProduct("RSQ", argsList)
 }
@@ -10595,8 +10355,7 @@ func (fn *formulaFuncs) skew(name string, argsList *list.List) formulaArg {
 // SKEW function calculates the skewness of the distribution of a supplied set
 // of values. The syntax of the function is:
 //
-//    SKEW(number1,[number2],...)
-//
+//     SKEW(number1,[number2],...)
 func (fn *formulaFuncs) SKEW(argsList *list.List) formulaArg {
        return fn.skew("SKEW", argsList)
 }
@@ -10604,8 +10363,7 @@ func (fn *formulaFuncs) SKEW(argsList *list.List) formulaArg {
 // SKEWdotP function calculates the skewness of the distribution of a supplied
 // set of values. The syntax of the function is:
 //
-//    SKEW.P(number1,[number2],...)
-//
+//     SKEW.P(number1,[number2],...)
 func (fn *formulaFuncs) SKEWdotP(argsList *list.List) formulaArg {
        return fn.skew("SKEW.P", argsList)
 }
@@ -10615,8 +10373,7 @@ func (fn *formulaFuncs) SKEWdotP(argsList *list.List) formulaArg {
 // horizontal distance between any two points on the line, which is the rate
 // of change along the regression line. The syntax of the function is:
 //
-//    SLOPE(known_y's,known_x's)
-//
+//     SLOPE(known_y's,known_x's)
 func (fn *formulaFuncs) SLOPE(argsList *list.List) formulaArg {
        return fn.pearsonProduct("SLOPE", argsList)
 }
@@ -10624,8 +10381,7 @@ func (fn *formulaFuncs) SLOPE(argsList *list.List) formulaArg {
 // SMALL function returns the k'th smallest value from an array of numeric
 // values. The syntax of the function is:
 //
-//    SMALL(array,k)
-//
+//     SMALL(array,k)
 func (fn *formulaFuncs) SMALL(argsList *list.List) formulaArg {
        return fn.kth("SMALL", argsList)
 }
@@ -10634,8 +10390,7 @@ func (fn *formulaFuncs) SMALL(argsList *list.List) formulaArg {
 // characterized by a supplied mean and standard deviation. The syntax of the
 // function is:
 //
-//    STANDARDIZE(x,mean,standard_dev)
-//
+//     STANDARDIZE(x,mean,standard_dev)
 func (fn *formulaFuncs) STANDARDIZE(argsList *list.List) formulaArg {
        if argsList.Len() != 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "STANDARDIZE requires 3 arguments")
@@ -10678,8 +10433,7 @@ func (fn *formulaFuncs) stdevp(name string, argsList *list.List) formulaArg {
 // STDEVP function calculates the standard deviation of a supplied set of
 // values. The syntax of the function is:
 //
-//    STDEVP(number1,[number2],...)
-//
+//     STDEVP(number1,[number2],...)
 func (fn *formulaFuncs) STDEVP(argsList *list.List) formulaArg {
        return fn.stdevp("STDEVP", argsList)
 }
@@ -10687,8 +10441,7 @@ func (fn *formulaFuncs) STDEVP(argsList *list.List) formulaArg {
 // STDEVdotP function calculates the standard deviation of a supplied set of
 // values.
 //
-//    STDEV.P( number1, [number2], ... )
-//
+//     STDEV.P( number1, [number2], ... )
 func (fn *formulaFuncs) STDEVdotP(argsList *list.List) formulaArg {
        return fn.stdevp("STDEV.P", argsList)
 }
@@ -10696,8 +10449,7 @@ func (fn *formulaFuncs) STDEVdotP(argsList *list.List) formulaArg {
 // STDEVPA function calculates the standard deviation of a supplied set of
 // values. The syntax of the function is:
 //
-//    STDEVPA(number1,[number2],...)
-//
+//     STDEVPA(number1,[number2],...)
 func (fn *formulaFuncs) STDEVPA(argsList *list.List) formulaArg {
        return fn.stdevp("STDEVPA", argsList)
 }
@@ -10705,8 +10457,7 @@ func (fn *formulaFuncs) STDEVPA(argsList *list.List) formulaArg {
 // STEYX function calculates the standard error for the line of best fit,
 // through a supplied set of x- and y- values. The syntax of the function is:
 //
-//    STEYX(known_y's,known_x's)
-//
+//     STEYX(known_y's,known_x's)
 func (fn *formulaFuncs) STEYX(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "STEYX requires 2 arguments")
@@ -10766,8 +10517,7 @@ func getTDist(T, fDF, nType float64) float64 {
 // testing hypotheses on small sample data sets. The syntax of the function
 // is:
 //
-//    T.DIST(x,degrees_freedom,cumulative)
-//
+//     T.DIST(x,degrees_freedom,cumulative)
 func (fn *formulaFuncs) TdotDIST(argsList *list.List) formulaArg {
        if argsList.Len() != 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "T.DIST requires 3 arguments")
@@ -10802,8 +10552,7 @@ func (fn *formulaFuncs) TdotDIST(argsList *list.List) formulaArg {
 // testing hypotheses on small sample data sets. The syntax of the function
 // is:
 //
-//    T.DIST.2T(x,degrees_freedom)
-//
+//     T.DIST.2T(x,degrees_freedom)
 func (fn *formulaFuncs) TdotDISTdot2T(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "T.DIST.2T requires 2 arguments")
@@ -10826,8 +10575,7 @@ func (fn *formulaFuncs) TdotDISTdot2T(argsList *list.List) formulaArg {
 // testing hypotheses on small sample data sets. The syntax of the function
 // is:
 //
-//    T.DIST.RT(x,degrees_freedom)
-//
+//     T.DIST.RT(x,degrees_freedom)
 func (fn *formulaFuncs) TdotDISTdotRT(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "T.DIST.RT requires 2 arguments")
@@ -10853,8 +10601,7 @@ func (fn *formulaFuncs) TdotDISTdotRT(argsList *list.List) formulaArg {
 // continuous probability distribution that is frequently used for testing
 // hypotheses on small sample data sets. The syntax of the function is:
 //
-//    TDIST(x,degrees_freedom,tails)
-//
+//     TDIST(x,degrees_freedom,tails)
 func (fn *formulaFuncs) TDIST(argsList *list.List) formulaArg {
        if argsList.Len() != 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "TDIST requires 3 arguments")
@@ -10880,8 +10627,7 @@ func (fn *formulaFuncs) TDIST(argsList *list.List) formulaArg {
 // frequently used for testing hypotheses on small sample data sets. The
 // syntax of the function is:
 //
-//    T.INV(probability,degrees_freedom)
-//
+//     T.INV(probability,degrees_freedom)
 func (fn *formulaFuncs) TdotINV(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "T.INV requires 2 arguments")
@@ -10917,8 +10663,7 @@ func (fn *formulaFuncs) TdotINV(argsList *list.List) formulaArg {
 // frequently used for testing hypotheses on small sample data sets. The
 // syntax of the function is:
 //
-//    T.INV.2T(probability,degrees_freedom)
-//
+//     T.INV.2T(probability,degrees_freedom)
 func (fn *formulaFuncs) TdotINVdot2T(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "T.INV.2T requires 2 arguments")
@@ -10946,8 +10691,7 @@ func (fn *formulaFuncs) TdotINVdot2T(argsList *list.List) formulaArg {
 // frequently used for testing hypotheses on small sample data sets. The
 // syntax of the function is:
 //
-//    TINV(probability,degrees_freedom)
-//
+//     TINV(probability,degrees_freedom)
 func (fn *formulaFuncs) TINV(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "TINV requires 2 arguments")
@@ -10960,8 +10704,7 @@ func (fn *formulaFuncs) TINV(argsList *list.List) formulaArg {
 // extends the linear trendline to calculate additional y-values for a further
 // supplied set of new x-values. The syntax of the function is:
 //
-//    TREND(known_y's,[known_x's],[new_x's],[const])
-//
+//     TREND(known_y's,[known_x's],[new_x's],[const])
 func (fn *formulaFuncs) TREND(argsList *list.List) formulaArg {
        return fn.trendGrowth("TREND", argsList)
 }
@@ -11055,8 +10798,7 @@ func (fn *formulaFuncs) tTest(mtx1, mtx2 [][]formulaArg, fTails, fTyp float64) f
 // likely to have come from the same two underlying populations with the same
 // mean. The syntax of the function is:
 //
-//    TTEST(array1,array2,tails,type)
-//
+//     TTEST(array1,array2,tails,type)
 func (fn *formulaFuncs) TTEST(argsList *list.List) formulaArg {
        if argsList.Len() != 4 {
                return newErrorFormulaArg(formulaErrorVALUE, "TTEST requires 4 arguments")
@@ -11087,8 +10829,7 @@ func (fn *formulaFuncs) TTEST(argsList *list.List) formulaArg {
 // likely to have come from the same two underlying populations with the same
 // mean. The syntax of the function is:
 //
-//    T.TEST(array1,array2,tails,type)
-//
+//     T.TEST(array1,array2,tails,type)
 func (fn *formulaFuncs) TdotTEST(argsList *list.List) formulaArg {
        if argsList.Len() != 4 {
                return newErrorFormulaArg(formulaErrorVALUE, "T.TEST requires 4 arguments")
@@ -11099,8 +10840,7 @@ func (fn *formulaFuncs) TdotTEST(argsList *list.List) formulaArg {
 // TRIMMEAN function calculates the trimmed mean (or truncated mean) of a
 // supplied set of values. The syntax of the function is:
 //
-//    TRIMMEAN(array,percent)
-//
+//     TRIMMEAN(array,percent)
 func (fn *formulaFuncs) TRIMMEAN(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "TRIMMEAN requires 2 arguments")
@@ -11185,8 +10925,7 @@ func (fn *formulaFuncs) vars(name string, argsList *list.List) formulaArg {
 // VAR function returns the sample variance of a supplied set of values. The
 // syntax of the function is:
 //
-//    VAR(number1,[number2],...)
-//
+//     VAR(number1,[number2],...)
 func (fn *formulaFuncs) VAR(argsList *list.List) formulaArg {
        return fn.vars("VAR", argsList)
 }
@@ -11194,8 +10933,7 @@ func (fn *formulaFuncs) VAR(argsList *list.List) formulaArg {
 // VARA function calculates the sample variance of a supplied set of values.
 // The syntax of the function is:
 //
-//    VARA(number1,[number2],...)
-//
+//     VARA(number1,[number2],...)
 func (fn *formulaFuncs) VARA(argsList *list.List) formulaArg {
        return fn.vars("VARA", argsList)
 }
@@ -11203,8 +10941,7 @@ func (fn *formulaFuncs) VARA(argsList *list.List) formulaArg {
 // VARP function returns the Variance of a given set of values. The syntax of
 // the function is:
 //
-//    VARP(number1,[number2],...)
-//
+//     VARP(number1,[number2],...)
 func (fn *formulaFuncs) VARP(argsList *list.List) formulaArg {
        return fn.vars("VARP", argsList)
 }
@@ -11212,8 +10949,7 @@ func (fn *formulaFuncs) VARP(argsList *list.List) formulaArg {
 // VARdotP function returns the Variance of a given set of values. The syntax
 // of the function is:
 //
-//    VAR.P(number1,[number2],...)
-//
+//     VAR.P(number1,[number2],...)
 func (fn *formulaFuncs) VARdotP(argsList *list.List) formulaArg {
        return fn.vars("VAR.P", argsList)
 }
@@ -11221,8 +10957,7 @@ func (fn *formulaFuncs) VARdotP(argsList *list.List) formulaArg {
 // VARdotS function calculates the sample variance of a supplied set of
 // values. The syntax of the function is:
 //
-//    VAR.S(number1,[number2],...)
-//
+//     VAR.S(number1,[number2],...)
 func (fn *formulaFuncs) VARdotS(argsList *list.List) formulaArg {
        return fn.vars("VAR.S", argsList)
 }
@@ -11230,8 +10965,7 @@ func (fn *formulaFuncs) VARdotS(argsList *list.List) formulaArg {
 // VARPA function returns the Variance of a given set of values. The syntax of
 // the function is:
 //
-//    VARPA(number1,[number2],...)
-//
+//     VARPA(number1,[number2],...)
 func (fn *formulaFuncs) VARPA(argsList *list.List) formulaArg {
        return fn.vars("VARPA", argsList)
 }
@@ -11240,8 +10974,7 @@ func (fn *formulaFuncs) VARPA(argsList *list.List) formulaArg {
 // Weibull Cumulative Distribution Function for a supplied set of parameters.
 // The syntax of the function is:
 //
-//    WEIBULL(x,alpha,beta,cumulative)
-//
+//     WEIBULL(x,alpha,beta,cumulative)
 func (fn *formulaFuncs) WEIBULL(argsList *list.List) formulaArg {
        if argsList.Len() != 4 {
                return newErrorFormulaArg(formulaErrorVALUE, "WEIBULL requires 4 arguments")
@@ -11267,8 +11000,7 @@ func (fn *formulaFuncs) WEIBULL(argsList *list.List) formulaArg {
 // or the Weibull Cumulative Distribution Function for a supplied set of
 // parameters. The syntax of the function is:
 //
-//    WEIBULL.DIST(x,alpha,beta,cumulative)
-//
+//     WEIBULL.DIST(x,alpha,beta,cumulative)
 func (fn *formulaFuncs) WEIBULLdotDIST(argsList *list.List) formulaArg {
        if argsList.Len() != 4 {
                return newErrorFormulaArg(formulaErrorVALUE, "WEIBULL.DIST requires 4 arguments")
@@ -11279,8 +11011,7 @@ func (fn *formulaFuncs) WEIBULLdotDIST(argsList *list.List) formulaArg {
 // ZdotTEST function calculates the one-tailed probability value of the
 // Z-Test. The syntax of the function is:
 //
-//    Z.TEST(array,x,[sigma])
-//
+//     Z.TEST(array,x,[sigma])
 func (fn *formulaFuncs) ZdotTEST(argsList *list.List) formulaArg {
        argsLen := argsList.Len()
        if argsLen < 2 {
@@ -11295,8 +11026,7 @@ func (fn *formulaFuncs) ZdotTEST(argsList *list.List) formulaArg {
 // ZTEST function calculates the one-tailed probability value of the Z-Test.
 // The syntax of the function is:
 //
-//    ZTEST(array,x,[sigma])
-//
+//     ZTEST(array,x,[sigma])
 func (fn *formulaFuncs) ZTEST(argsList *list.List) formulaArg {
        argsLen := argsList.Len()
        if argsLen < 2 {
@@ -11336,8 +11066,7 @@ func (fn *formulaFuncs) ZTEST(argsList *list.List) formulaArg {
 // ERRORdotTYPE function receives an error value and returns an integer, that
 // tells you the type of the supplied error. The syntax of the function is:
 //
-//    ERROR.TYPE(error_val)
-//
+//     ERROR.TYPE(error_val)
 func (fn *formulaFuncs) ERRORdotTYPE(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "ERROR.TYPE requires 1 argument")
@@ -11360,8 +11089,7 @@ func (fn *formulaFuncs) ERRORdotTYPE(argsList *list.List) formulaArg {
 // returns TRUE; Otherwise the function returns FALSE. The syntax of the
 // function is:
 //
-//    ISBLANK(value)
-//
+//     ISBLANK(value)
 func (fn *formulaFuncs) ISBLANK(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "ISBLANK requires 1 argument")
@@ -11384,8 +11112,7 @@ func (fn *formulaFuncs) ISBLANK(argsList *list.List) formulaArg {
 // logical value TRUE; If the supplied value is not an error or is the #N/A
 // error, the ISERR function returns FALSE. The syntax of the function is:
 //
-//    ISERR(value)
-//
+//     ISERR(value)
 func (fn *formulaFuncs) ISERR(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "ISERR requires 1 argument")
@@ -11410,8 +11137,7 @@ func (fn *formulaFuncs) ISERR(argsList *list.List) formulaArg {
 // an Excel Error, and if so, returns the logical value TRUE; Otherwise the
 // function returns FALSE. The syntax of the function is:
 //
-//    ISERROR(value)
-//
+//     ISERROR(value)
 func (fn *formulaFuncs) ISERROR(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "ISERROR requires 1 argument")
@@ -11436,8 +11162,7 @@ func (fn *formulaFuncs) ISERROR(argsList *list.List) formulaArg {
 // evaluates to an even number, and if so, returns TRUE; Otherwise, the
 // function returns FALSE. The syntax of the function is:
 //
-//    ISEVEN(value)
-//
+//     ISEVEN(value)
 func (fn *formulaFuncs) ISEVEN(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "ISEVEN requires 1 argument")
@@ -11463,8 +11188,7 @@ func (fn *formulaFuncs) ISEVEN(argsList *list.List) formulaArg {
 // returns TRUE; Otherwise, the function returns FALSE. The syntax of the
 // function is:
 //
-//    ISFORMULA(reference)
-//
+//     ISFORMULA(reference)
 func (fn *formulaFuncs) ISFORMULA(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "ISFORMULA requires 1 argument")
@@ -11484,8 +11208,7 @@ func (fn *formulaFuncs) ISFORMULA(argsList *list.List) formulaArg {
 // logical value (i.e. evaluates to True or False). If so, the function
 // returns TRUE; Otherwise, it returns FALSE. The syntax of the function is:
 //
-//    ISLOGICAL(value)
-//
+//     ISLOGICAL(value)
 func (fn *formulaFuncs) ISLOGICAL(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "ISLOGICAL requires 1 argument")
@@ -11501,8 +11224,7 @@ func (fn *formulaFuncs) ISLOGICAL(argsList *list.List) formulaArg {
 // the Excel #N/A Error, and if so, returns TRUE; Otherwise the function
 // returns FALSE. The syntax of the function is:
 //
-//    ISNA(value)
-//
+//     ISNA(value)
 func (fn *formulaFuncs) ISNA(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "ISNA requires 1 argument")
@@ -11519,8 +11241,7 @@ func (fn *formulaFuncs) ISNA(argsList *list.List) formulaArg {
 // function returns TRUE; If the supplied value is text, the function returns
 // FALSE. The syntax of the function is:
 //
-//    ISNONTEXT(value)
-//
+//     ISNONTEXT(value)
 func (fn *formulaFuncs) ISNONTEXT(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "ISNONTEXT requires 1 argument")
@@ -11537,8 +11258,7 @@ func (fn *formulaFuncs) ISNONTEXT(argsList *list.List) formulaArg {
 // the function returns TRUE; Otherwise it returns FALSE. The syntax of the
 // function is:
 //
-//    ISNUMBER(value)
-//
+//     ISNUMBER(value)
 func (fn *formulaFuncs) ISNUMBER(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "ISNUMBER requires 1 argument")
@@ -11556,8 +11276,7 @@ func (fn *formulaFuncs) ISNUMBER(argsList *list.List) formulaArg {
 // to an odd number, and if so, returns TRUE; Otherwise, the function returns
 // FALSE. The syntax of the function is:
 //
-//    ISODD(value)
-//
+//     ISODD(value)
 func (fn *formulaFuncs) ISODD(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "ISODD requires 1 argument")
@@ -11583,8 +11302,7 @@ func (fn *formulaFuncs) ISODD(argsList *list.List) formulaArg {
 // function returns TRUE; Otherwise it returns FALSE. The syntax of the
 // function is:
 //
-//    ISREF(value)
-//
+//     ISREF(value)
 func (fn *formulaFuncs) ISREF(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "ISREF requires 1 argument")
@@ -11599,8 +11317,7 @@ func (fn *formulaFuncs) ISREF(argsList *list.List) formulaArg {
 // ISTEXT function tests if a supplied value is text, and if so, returns TRUE;
 // Otherwise, the function returns FALSE. The syntax of the function is:
 //
-//    ISTEXT(value)
-//
+//     ISTEXT(value)
 func (fn *formulaFuncs) ISTEXT(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "ISTEXT requires 1 argument")
@@ -11615,8 +11332,7 @@ func (fn *formulaFuncs) ISTEXT(argsList *list.List) formulaArg {
 // N function converts data into a numeric value. The syntax of the function
 // is:
 //
-//    N(value)
-//
+//     N(value)
 func (fn *formulaFuncs) N(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "N requires 1 argument")
@@ -11638,8 +11354,7 @@ func (fn *formulaFuncs) N(argsList *list.List) formulaArg {
 // meaning 'value not available' and is produced when an Excel Formula is
 // unable to find a value that it needs. The syntax of the function is:
 //
-//    NA()
-//
+//     NA()
 func (fn *formulaFuncs) NA(argsList *list.List) formulaArg {
        if argsList.Len() != 0 {
                return newErrorFormulaArg(formulaErrorVALUE, "NA accepts no arguments")
@@ -11650,8 +11365,7 @@ func (fn *formulaFuncs) NA(argsList *list.List) formulaArg {
 // SHEET function returns the Sheet number for a specified reference. The
 // syntax of the function is:
 //
-//    SHEET([value])
-//
+//     SHEET([value])
 func (fn *formulaFuncs) SHEET(argsList *list.List) formulaArg {
        if argsList.Len() > 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "SHEET accepts at most 1 argument")
@@ -11680,8 +11394,7 @@ func (fn *formulaFuncs) SHEET(argsList *list.List) formulaArg {
 // result includes sheets that are Visible, Hidden or Very Hidden. The syntax
 // of the function is:
 //
-//    SHEETS([reference])
-//
+//     SHEETS([reference])
 func (fn *formulaFuncs) SHEETS(argsList *list.List) formulaArg {
        if argsList.Len() > 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "SHEETS accepts at most 1 argument")
@@ -11710,8 +11423,7 @@ func (fn *formulaFuncs) SHEETS(argsList *list.List) formulaArg {
 // TYPE function returns an integer that represents the value's data type. The
 // syntax of the function is:
 //
-//    TYPE(value)
-//
+//     TYPE(value)
 func (fn *formulaFuncs) TYPE(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "TYPE requires 1 argument")
@@ -11737,8 +11449,7 @@ func (fn *formulaFuncs) TYPE(argsList *list.List) formulaArg {
 // supplied text; Otherwise, the function returns an empty text string. The
 // syntax of the function is:
 //
-//    T(value)
-//
+//     T(value)
 func (fn *formulaFuncs) T(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "T requires 1 argument")
@@ -11758,8 +11469,7 @@ func (fn *formulaFuncs) T(argsList *list.List) formulaArg {
 // AND function tests a number of supplied conditions and returns TRUE or
 // FALSE. The syntax of the function is:
 //
-//    AND(logical_test1,[logical_test2],...)
-//
+//     AND(logical_test1,[logical_test2],...)
 func (fn *formulaFuncs) AND(argsList *list.List) formulaArg {
        if argsList.Len() == 0 {
                return newErrorFormulaArg(formulaErrorVALUE, "AND requires at least 1 argument")
@@ -11794,8 +11504,7 @@ func (fn *formulaFuncs) AND(argsList *list.List) formulaArg {
 // FALSE function returns the logical value FALSE. The syntax of the
 // function is:
 //
-//    FALSE()
-//
+//     FALSE()
 func (fn *formulaFuncs) FALSE(argsList *list.List) formulaArg {
        if argsList.Len() != 0 {
                return newErrorFormulaArg(formulaErrorVALUE, "FALSE takes no arguments")
@@ -11806,8 +11515,7 @@ func (fn *formulaFuncs) FALSE(argsList *list.List) formulaArg {
 // IFERROR function receives two values (or expressions) and tests if the
 // first of these evaluates to an error. The syntax of the function is:
 //
-//    IFERROR(value,value_if_error)
-//
+//     IFERROR(value,value_if_error)
 func (fn *formulaFuncs) IFERROR(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "IFERROR requires 2 arguments")
@@ -11827,8 +11535,7 @@ func (fn *formulaFuncs) IFERROR(argsList *list.List) formulaArg {
 // value; Otherwise the function returns the first supplied value. The syntax
 // of the function is:
 //
-//    IFNA(value,value_if_na)
-//
+//     IFNA(value,value_if_na)
 func (fn *formulaFuncs) IFNA(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "IFNA requires 2 arguments")
@@ -11845,8 +11552,7 @@ func (fn *formulaFuncs) IFNA(argsList *list.List) formulaArg {
 // the supplied conditions evaluate to TRUE, the function returns the #N/A
 // error.
 //
-//    IFS(logical_test1,value_if_true1,[logical_test2,value_if_true2],...)
-//
+//     IFS(logical_test1,value_if_true1,[logical_test2,value_if_true2],...)
 func (fn *formulaFuncs) IFS(argsList *list.List) formulaArg {
        if argsList.Len() < 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "IFS requires at least 2 arguments")
@@ -11863,8 +11569,7 @@ func (fn *formulaFuncs) IFS(argsList *list.List) formulaArg {
 // NOT function returns the opposite to a supplied logical value. The syntax
 // of the function is:
 //
-//    NOT(logical)
-//
+//     NOT(logical)
 func (fn *formulaFuncs) NOT(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "NOT requires 1 argument")
@@ -11889,8 +11594,7 @@ func (fn *formulaFuncs) NOT(argsList *list.List) formulaArg {
 // OR function tests a number of supplied conditions and returns either TRUE
 // or FALSE. The syntax of the function is:
 //
-//    OR(logical_test1,[logical_test2],...)
-//
+//     OR(logical_test1,[logical_test2],...)
 func (fn *formulaFuncs) OR(argsList *list.List) formulaArg {
        if argsList.Len() == 0 {
                return newErrorFormulaArg(formulaErrorVALUE, "OR requires at least 1 argument")
@@ -11929,9 +11633,7 @@ func (fn *formulaFuncs) OR(argsList *list.List) formulaArg {
 // returned if none of the supplied values match the test expression. The
 // syntax of the function is:
 //
-//
-//    SWITCH(expression,value1,result1,[value2,result2],[value3,result3],...,[default])
-//
+//     SWITCH(expression,value1,result1,[value2,result2],[value3,result3],...,[default])
 func (fn *formulaFuncs) SWITCH(argsList *list.List) formulaArg {
        if argsList.Len() < 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "SWITCH requires at least 3 arguments")
@@ -11961,8 +11663,7 @@ func (fn *formulaFuncs) SWITCH(argsList *list.List) formulaArg {
 // TRUE function returns the logical value TRUE. The syntax of the function
 // is:
 //
-//    TRUE()
-//
+//     TRUE()
 func (fn *formulaFuncs) TRUE(argsList *list.List) formulaArg {
        if argsList.Len() != 0 {
                return newErrorFormulaArg(formulaErrorVALUE, "TRUE takes no arguments")
@@ -12006,8 +11707,7 @@ func calcXor(argsList *list.List) formulaArg {
 // of the supplied conditions evaluate to TRUE, and FALSE otherwise. The
 // syntax of the function is:
 //
-//    XOR(logical_test1,[logical_test2],...)
-//
+//     XOR(logical_test1,[logical_test2],...)
 func (fn *formulaFuncs) XOR(argsList *list.List) formulaArg {
        if argsList.Len() < 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "XOR requires at least 1 argument")
@@ -12020,8 +11720,7 @@ func (fn *formulaFuncs) XOR(argsList *list.List) formulaArg {
 // DATE returns a date, from a user-supplied year, month and day. The syntax
 // of the function is:
 //
-//    DATE(year,month,day)
-//
+//     DATE(year,month,day)
 func (fn *formulaFuncs) DATE(argsList *list.List) formulaArg {
        if argsList.Len() != 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "DATE requires 3 number arguments")
@@ -12072,8 +11771,7 @@ func calcDateDif(unit string, diff float64, seq []int, startArg, endArg formulaA
 // DATEDIF function calculates the number of days, months, or years between
 // two dates. The syntax of the function is:
 //
-//    DATEDIF(start_date,end_date,unit)
-//
+//     DATEDIF(start_date,end_date,unit)
 func (fn *formulaFuncs) DATEDIF(argsList *list.List) formulaArg {
        if argsList.Len() != 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "DATEDIF requires 3 number arguments")
@@ -12353,8 +12051,7 @@ func strToDate(str string) (int, int, int, bool, formulaArg) {
 // date, into the serial number that represents the date in Excels' date-time
 // code. The syntax of the function is:
 //
-//    DATEVALUE(date_text)
-//
+//     DATEVALUE(date_text)
 func (fn *formulaFuncs) DATEVALUE(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "DATEVALUE requires 1 argument")
@@ -12376,8 +12073,7 @@ func (fn *formulaFuncs) DATEVALUE(argsList *list.List) formulaArg {
 // day is given as an integer ranging from 1 to 31. The syntax of the
 // function is:
 //
-//    DAY(serial_number)
-//
+//     DAY(serial_number)
 func (fn *formulaFuncs) DAY(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "DAY requires exactly 1 argument")
@@ -12409,8 +12105,7 @@ func (fn *formulaFuncs) DAY(argsList *list.List) formulaArg {
 // DAYS function returns the number of days between two supplied dates. The
 // syntax of the function is:
 //
-//    DAYS(end_date,start_date)
-//
+//     DAYS(end_date,start_date)
 func (fn *formulaFuncs) DAYS(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "DAYS requires 2 arguments")
@@ -12426,8 +12121,7 @@ func (fn *formulaFuncs) DAYS(argsList *list.List) formulaArg {
 // DAYS360 function returns the number of days between 2 dates, based on a
 // 360-day year (12 x 30 months). The syntax of the function is:
 //
-//    DAYS360(start_date,end_date,[method])
-//
+//     DAYS360(start_date,end_date,[method])
 func (fn *formulaFuncs) DAYS360(argsList *list.List) formulaArg {
        if argsList.Len() < 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "DAYS360 requires at least 2 arguments")
@@ -12477,8 +12171,7 @@ func (fn *formulaFuncs) DAYS360(argsList *list.List) formulaArg {
 // ISOWEEKNUM function returns the ISO week number of a supplied date. The
 // syntax of the function is:
 //
-//    ISOWEEKNUM(date)
-//
+//     ISOWEEKNUM(date)
 func (fn *formulaFuncs) ISOWEEKNUM(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "ISOWEEKNUM requires 1 argument")
@@ -12510,8 +12203,7 @@ func (fn *formulaFuncs) ISOWEEKNUM(argsList *list.List) formulaArg {
 // EDATE function returns a date that is a specified number of months before or
 // after a supplied start date. The syntax of function is:
 //
-//    EDATE(start_date,months)
-//
+//     EDATE(start_date,months)
 func (fn *formulaFuncs) EDATE(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "EDATE requires 2 arguments")
@@ -12565,8 +12257,7 @@ func (fn *formulaFuncs) EDATE(argsList *list.List) formulaArg {
 // number of months before or after an initial supplied start date. The syntax
 // of the function is:
 //
-//    EOMONTH(start_date,months)
-//
+//     EOMONTH(start_date,months)
 func (fn *formulaFuncs) EOMONTH(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "EOMONTH requires 2 arguments")
@@ -12613,8 +12304,7 @@ func (fn *formulaFuncs) EOMONTH(argsList *list.List) formulaArg {
 // HOUR function returns an integer representing the hour component of a
 // supplied Excel time. The syntax of the function is:
 //
-//    HOUR(serial_number)
-//
+//     HOUR(serial_number)
 func (fn *formulaFuncs) HOUR(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "HOUR requires exactly 1 argument")
@@ -12647,8 +12337,7 @@ func (fn *formulaFuncs) HOUR(argsList *list.List) formulaArg {
 // MINUTE function returns an integer representing the minute component of a
 // supplied Excel time. The syntax of the function is:
 //
-//    MINUTE(serial_number)
-//
+//     MINUTE(serial_number)
 func (fn *formulaFuncs) MINUTE(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "MINUTE requires exactly 1 argument")
@@ -12679,8 +12368,7 @@ func (fn *formulaFuncs) MINUTE(argsList *list.List) formulaArg {
 // The month is given as an integer, ranging from 1 (January) to 12
 // (December). The syntax of the function is:
 //
-//    MONTH(serial_number)
-//
+//     MONTH(serial_number)
 func (fn *formulaFuncs) MONTH(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "MONTH requires exactly 1 argument")
@@ -12839,8 +12527,7 @@ func workdayIntl(endDate, sign int, holidays []int, weekendMask []byte, startDat
 // weekdays (Mon - Fri), excluding a supplied list of holidays. The syntax of
 // the function is:
 //
-//    NETWORKDAYS(start_date,end_date,[holidays])
-//
+//     NETWORKDAYS(start_date,end_date,[holidays])
 func (fn *formulaFuncs) NETWORKDAYS(argsList *list.List) formulaArg {
        if argsList.Len() < 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "NETWORKDAYS requires at least 2 arguments")
@@ -12863,8 +12550,7 @@ func (fn *formulaFuncs) NETWORKDAYS(argsList *list.List) formulaArg {
 // the user to specify which days are counted as weekends and holidays. The
 // syntax of the function is:
 //
-//    NETWORKDAYS.INTL(start_date,end_date,[weekend],[holidays])
-//
+//     NETWORKDAYS.INTL(start_date,end_date,[weekend],[holidays])
 func (fn *formulaFuncs) NETWORKDAYSdotINTL(argsList *list.List) formulaArg {
        if argsList.Len() < 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "NETWORKDAYS.INTL requires at least 2 arguments")
@@ -12922,8 +12608,7 @@ func (fn *formulaFuncs) NETWORKDAYSdotINTL(argsList *list.List) formulaArg {
 // (excluding weekends and holidays) ahead of a given start date. The syntax
 // of the function is:
 //
-//    WORKDAY(start_date,days,[holidays])
-//
+//     WORKDAY(start_date,days,[holidays])
 func (fn *formulaFuncs) WORKDAY(argsList *list.List) formulaArg {
        if argsList.Len() < 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "WORKDAY requires at least 2 arguments")
@@ -12946,8 +12631,7 @@ func (fn *formulaFuncs) WORKDAY(argsList *list.List) formulaArg {
 // function allows the user to specify which days of the week are counted as
 // weekends. The syntax of the function is:
 //
-//    WORKDAY.INTL(start_date,days,[weekend],[holidays])
-//
+//     WORKDAY.INTL(start_date,days,[weekend],[holidays])
 func (fn *formulaFuncs) WORKDAYdotINTL(argsList *list.List) formulaArg {
        if argsList.Len() < 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "WORKDAY.INTL requires at least 2 arguments")
@@ -13008,8 +12692,7 @@ func (fn *formulaFuncs) WORKDAYdotINTL(argsList *list.List) formulaArg {
 // YEAR function returns an integer representing the year of a supplied date.
 // The syntax of the function is:
 //
-//    YEAR(serial_number)
-//
+//     YEAR(serial_number)
 func (fn *formulaFuncs) YEAR(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "YEAR requires exactly 1 argument")
@@ -13156,8 +12839,7 @@ func getYearDays(year, basis int) int {
 // number of whole days between two supplied dates. The syntax of the
 // function is:
 //
-//    YEARFRAC(start_date,end_date,[basis])
-//
+//     YEARFRAC(start_date,end_date,[basis])
 func (fn *formulaFuncs) YEARFRAC(argsList *list.List) formulaArg {
        if argsList.Len() != 2 && argsList.Len() != 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "YEARFRAC requires 3 or 4 arguments")
@@ -13179,8 +12861,7 @@ func (fn *formulaFuncs) YEARFRAC(argsList *list.List) formulaArg {
 // NOW function returns the current date and time. The function receives no
 // arguments and therefore. The syntax of the function is:
 //
-//    NOW()
-//
+//     NOW()
 func (fn *formulaFuncs) NOW(argsList *list.List) formulaArg {
        if argsList.Len() != 0 {
                return newErrorFormulaArg(formulaErrorVALUE, "NOW accepts no arguments")
@@ -13193,8 +12874,7 @@ func (fn *formulaFuncs) NOW(argsList *list.List) formulaArg {
 // SECOND function returns an integer representing the second component of a
 // supplied Excel time. The syntax of the function is:
 //
-//    SECOND(serial_number)
-//
+//     SECOND(serial_number)
 func (fn *formulaFuncs) SECOND(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "SECOND requires exactly 1 argument")
@@ -13226,8 +12906,7 @@ func (fn *formulaFuncs) SECOND(argsList *list.List) formulaArg {
 // decimal value that represents the time in Excel. The syntax of the
 // function is:
 //
-//    TIME(hour,minute,second)
-//
+//     TIME(hour,minute,second)
 func (fn *formulaFuncs) TIME(argsList *list.List) formulaArg {
        if argsList.Len() != 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "TIME requires 3 number arguments")
@@ -13248,8 +12927,7 @@ func (fn *formulaFuncs) TIME(argsList *list.List) formulaArg {
 // TIMEVALUE function converts a text representation of a time, into an Excel
 // time. The syntax of the function is:
 //
-//    TIMEVALUE(time_text)
-//
+//     TIMEVALUE(time_text)
 func (fn *formulaFuncs) TIMEVALUE(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "TIMEVALUE requires exactly 1 argument")
@@ -13279,8 +12957,7 @@ func (fn *formulaFuncs) TIMEVALUE(argsList *list.List) formulaArg {
 // TODAY function returns the current date. The function has no arguments and
 // therefore. The syntax of the function is:
 //
-//    TODAY()
-//
+//     TODAY()
 func (fn *formulaFuncs) TODAY(argsList *list.List) formulaArg {
        if argsList.Len() != 0 {
                return newErrorFormulaArg(formulaErrorVALUE, "TODAY accepts no arguments")
@@ -13309,8 +12986,7 @@ func daysBetween(startDate, endDate int64) float64 {
 // WEEKDAY function returns an integer representing the day of the week for a
 // supplied date. The syntax of the function is:
 //
-//    WEEKDAY(serial_number,[return_type])
-//
+//     WEEKDAY(serial_number,[return_type])
 func (fn *formulaFuncs) WEEKDAY(argsList *list.List) formulaArg {
        if argsList.Len() < 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "WEEKDAY requires at least 1 argument")
@@ -13402,8 +13078,7 @@ func (fn *formulaFuncs) weeknum(snTime time.Time, returnType int) formulaArg {
 // WEEKNUM function returns an integer representing the week number (from 1 to
 // 53) of the year. The syntax of the function is:
 //
-//    WEEKNUM(serial_number,[return_type])
-//
+//     WEEKNUM(serial_number,[return_type])
 func (fn *formulaFuncs) WEEKNUM(argsList *list.List) formulaArg {
        if argsList.Len() < 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "WEEKNUM requires at least 1 argument")
@@ -13447,8 +13122,7 @@ func (fn *formulaFuncs) WEEKNUM(argsList *list.List) formulaArg {
 // CHAR function returns the character relating to a supplied character set
 // number (from 1 to 255). syntax of the function is:
 //
-//    CHAR(number)
-//
+//     CHAR(number)
 func (fn *formulaFuncs) CHAR(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "CHAR requires 1 argument")
@@ -13467,8 +13141,7 @@ func (fn *formulaFuncs) CHAR(argsList *list.List) formulaArg {
 // CLEAN removes all non-printable characters from a supplied text string. The
 // syntax of the function is:
 //
-//    CLEAN(text)
-//
+//     CLEAN(text)
 func (fn *formulaFuncs) CLEAN(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "CLEAN requires 1 argument")
@@ -13486,8 +13159,7 @@ func (fn *formulaFuncs) CLEAN(argsList *list.List) formulaArg {
 // the associated numeric character set code used by your computer. The
 // syntax of the function is:
 //
-//    CODE(text)
-//
+//     CODE(text)
 func (fn *formulaFuncs) CODE(argsList *list.List) formulaArg {
        return fn.code("CODE", argsList)
 }
@@ -13510,8 +13182,7 @@ func (fn *formulaFuncs) code(name string, argsList *list.List) formulaArg {
 // CONCAT function joins together a series of supplied text strings into one
 // combined text string.
 //
-//    CONCAT(text1,[text2],...)
-//
+//     CONCAT(text1,[text2],...)
 func (fn *formulaFuncs) CONCAT(argsList *list.List) formulaArg {
        return fn.concat("CONCAT", argsList)
 }
@@ -13519,8 +13190,7 @@ func (fn *formulaFuncs) CONCAT(argsList *list.List) formulaArg {
 // CONCATENATE function joins together a series of supplied text strings into
 // one combined text string.
 //
-//    CONCATENATE(text1,[text2],...)
-//
+//     CONCATENATE(text1,[text2],...)
 func (fn *formulaFuncs) CONCATENATE(argsList *list.List) formulaArg {
        return fn.concat("CONCATENATE", argsList)
 }
@@ -13555,8 +13225,7 @@ func (fn *formulaFuncs) concat(name string, argsList *list.List) formulaArg {
 // equal and if so, returns TRUE; Otherwise, the function returns FALSE. The
 // function is case-sensitive. The syntax of the function is:
 //
-//    EXACT(text1,text2)
-//
+//     EXACT(text1,text2)
 func (fn *formulaFuncs) EXACT(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "EXACT requires 2 arguments")
@@ -13569,8 +13238,7 @@ func (fn *formulaFuncs) EXACT(argsList *list.List) formulaArg {
 // FIXED function rounds a supplied number to a specified number of decimal
 // places and then converts this into text. The syntax of the function is:
 //
-//    FIXED(number,[decimals],[no_commas])
-//
+//     FIXED(number,[decimals],[no_commas])
 func (fn *formulaFuncs) FIXED(argsList *list.List) formulaArg {
        if argsList.Len() < 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "FIXED requires at least 1 argument")
@@ -13619,8 +13287,7 @@ func (fn *formulaFuncs) FIXED(argsList *list.List) formulaArg {
 // within a supplied text string. The function is case-sensitive. The syntax
 // of the function is:
 //
-//    FIND(find_text,within_text,[start_num])
-//
+//     FIND(find_text,within_text,[start_num])
 func (fn *formulaFuncs) FIND(argsList *list.List) formulaArg {
        return fn.find("FIND", argsList)
 }
@@ -13630,8 +13297,7 @@ func (fn *formulaFuncs) FIND(argsList *list.List) formulaArg {
 // language. Otherwise, FINDB counts each character as 1. The syntax of the
 // function is:
 //
-//    FINDB(find_text,within_text,[start_num])
-//
+//     FINDB(find_text,within_text,[start_num])
 func (fn *formulaFuncs) FINDB(argsList *list.List) formulaArg {
        return fn.find("FINDB", argsList)
 }
@@ -13675,8 +13341,7 @@ func (fn *formulaFuncs) find(name string, argsList *list.List) formulaArg {
 // LEFT function returns a specified number of characters from the start of a
 // supplied text string. The syntax of the function is:
 //
-//    LEFT(text,[num_chars])
-//
+//     LEFT(text,[num_chars])
 func (fn *formulaFuncs) LEFT(argsList *list.List) formulaArg {
        return fn.leftRight("LEFT", argsList)
 }
@@ -13684,8 +13349,7 @@ func (fn *formulaFuncs) LEFT(argsList *list.List) formulaArg {
 // LEFTB returns the first character or characters in a text string, based on
 // the number of bytes you specify. The syntax of the function is:
 //
-//    LEFTB(text,[num_bytes])
-//
+//     LEFTB(text,[num_bytes])
 func (fn *formulaFuncs) LEFTB(argsList *list.List) formulaArg {
        return fn.leftRight("LEFTB", argsList)
 }
@@ -13723,8 +13387,7 @@ func (fn *formulaFuncs) leftRight(name string, argsList *list.List) formulaArg {
 // LEN returns the length of a supplied text string. The syntax of the
 // function is:
 //
-//    LEN(text)
-//
+//     LEN(text)
 func (fn *formulaFuncs) LEN(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "LEN requires 1 string argument")
@@ -13737,7 +13400,7 @@ func (fn *formulaFuncs) LEN(argsList *list.List) formulaArg {
 // as the default language. Otherwise LENB behaves the same as LEN, counting
 // 1 byte per character. The syntax of the function is:
 //
-//    LENB(text)
+//     LENB(text)
 //
 // TODO: the languages that support DBCS include Japanese, Chinese
 // (Simplified), Chinese (Traditional), and Korean.
@@ -13751,8 +13414,7 @@ func (fn *formulaFuncs) LENB(argsList *list.List) formulaArg {
 // LOWER converts all characters in a supplied text string to lower case. The
 // syntax of the function is:
 //
-//    LOWER(text)
-//
+//     LOWER(text)
 func (fn *formulaFuncs) LOWER(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "LOWER requires 1 argument")
@@ -13763,8 +13425,7 @@ func (fn *formulaFuncs) LOWER(argsList *list.List) formulaArg {
 // MID function returns a specified number of characters from the middle of a
 // supplied text string. The syntax of the function is:
 //
-//    MID(text,start_num,num_chars)
-//
+//     MID(text,start_num,num_chars)
 func (fn *formulaFuncs) MID(argsList *list.List) formulaArg {
        return fn.mid("MID", argsList)
 }
@@ -13773,8 +13434,7 @@ func (fn *formulaFuncs) MID(argsList *list.List) formulaArg {
 // at the position you specify, based on the number of bytes you specify. The
 // syntax of the function is:
 //
-//    MID(text,start_num,num_chars)
-//
+//     MID(text,start_num,num_chars)
 func (fn *formulaFuncs) MIDB(argsList *list.List) formulaArg {
        return fn.mid("MIDB", argsList)
 }
@@ -13815,8 +13475,7 @@ func (fn *formulaFuncs) mid(name string, argsList *list.List) formulaArg {
 // upper case and all other characters are lower case). The syntax of the
 // function is:
 //
-//    PROPER(text)
-//
+//     PROPER(text)
 func (fn *formulaFuncs) PROPER(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "PROPER requires 1 argument")
@@ -13837,8 +13496,7 @@ func (fn *formulaFuncs) PROPER(argsList *list.List) formulaArg {
 // REPLACE function replaces all or part of a text string with another string.
 // The syntax of the function is:
 //
-//    REPLACE(old_text,start_num,num_chars,new_text)
-//
+//     REPLACE(old_text,start_num,num_chars,new_text)
 func (fn *formulaFuncs) REPLACE(argsList *list.List) formulaArg {
        return fn.replace("REPLACE", argsList)
 }
@@ -13846,8 +13504,7 @@ func (fn *formulaFuncs) REPLACE(argsList *list.List) formulaArg {
 // REPLACEB replaces part of a text string, based on the number of bytes you
 // specify, with a different text string.
 //
-//    REPLACEB(old_text,start_num,num_chars,new_text)
-//
+//     REPLACEB(old_text,start_num,num_chars,new_text)
 func (fn *formulaFuncs) REPLACEB(argsList *list.List) formulaArg {
        return fn.replace("REPLACEB", argsList)
 }
@@ -13885,8 +13542,7 @@ func (fn *formulaFuncs) replace(name string, argsList *list.List) formulaArg {
 // REPT function returns a supplied text string, repeated a specified number
 // of times. The syntax of the function is:
 //
-//    REPT(text,number_times)
-//
+//     REPT(text,number_times)
 func (fn *formulaFuncs) REPT(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "REPT requires 2 arguments")
@@ -13915,8 +13571,7 @@ func (fn *formulaFuncs) REPT(argsList *list.List) formulaArg {
 // RIGHT function returns a specified number of characters from the end of a
 // supplied text string. The syntax of the function is:
 //
-//    RIGHT(text,[num_chars])
-//
+//     RIGHT(text,[num_chars])
 func (fn *formulaFuncs) RIGHT(argsList *list.List) formulaArg {
        return fn.leftRight("RIGHT", argsList)
 }
@@ -13924,8 +13579,7 @@ func (fn *formulaFuncs) RIGHT(argsList *list.List) formulaArg {
 // RIGHTB returns the last character or characters in a text string, based on
 // the number of bytes you specify. The syntax of the function is:
 //
-//    RIGHTB(text,[num_bytes])
-//
+//     RIGHTB(text,[num_bytes])
 func (fn *formulaFuncs) RIGHTB(argsList *list.List) formulaArg {
        return fn.leftRight("RIGHTB", argsList)
 }
@@ -13933,8 +13587,7 @@ func (fn *formulaFuncs) RIGHTB(argsList *list.List) formulaArg {
 // SUBSTITUTE function replaces one or more instances of a given text string,
 // within an original text string. The syntax of the function is:
 //
-//    SUBSTITUTE(text,old_text,new_text,[instance_num])
-//
+//     SUBSTITUTE(text,old_text,new_text,[instance_num])
 func (fn *formulaFuncs) SUBSTITUTE(argsList *list.List) formulaArg {
        if argsList.Len() != 3 && argsList.Len() != 4 {
                return newErrorFormulaArg(formulaErrorVALUE, "SUBSTITUTE requires 3 or 4 arguments")
@@ -13980,8 +13633,7 @@ func (fn *formulaFuncs) SUBSTITUTE(argsList *list.List) formulaArg {
 // combined text string. The user can specify a delimiter to add between the
 // individual text items, if required. The syntax of the function is:
 //
-//    TEXTJOIN([delimiter],[ignore_empty],text1,[text2],...)
-//
+//     TEXTJOIN([delimiter],[ignore_empty],text1,[text2],...)
 func (fn *formulaFuncs) TEXTJOIN(argsList *list.List) formulaArg {
        if argsList.Len() < 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "TEXTJOIN requires at least 3 arguments")
@@ -14038,8 +13690,7 @@ func textJoin(arg *list.Element, arr []string, ignoreEmpty bool) ([]string, form
 // words or characters) from a supplied text string. The syntax of the
 // function is:
 //
-//    TRIM(text)
-//
+//     TRIM(text)
 func (fn *formulaFuncs) TRIM(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "TRIM requires 1 argument")
@@ -14050,8 +13701,7 @@ func (fn *formulaFuncs) TRIM(argsList *list.List) formulaArg {
 // UNICHAR returns the Unicode character that is referenced by the given
 // numeric value. The syntax of the function is:
 //
-//    UNICHAR(number)
-//
+//     UNICHAR(number)
 func (fn *formulaFuncs) UNICHAR(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "UNICHAR requires 1 argument")
@@ -14069,8 +13719,7 @@ func (fn *formulaFuncs) UNICHAR(argsList *list.List) formulaArg {
 // UNICODE function returns the code point for the first character of a
 // supplied text string. The syntax of the function is:
 //
-//    UNICODE(text)
-//
+//     UNICODE(text)
 func (fn *formulaFuncs) UNICODE(argsList *list.List) formulaArg {
        return fn.code("UNICODE", argsList)
 }
@@ -14078,8 +13727,7 @@ func (fn *formulaFuncs) UNICODE(argsList *list.List) formulaArg {
 // UPPER converts all characters in a supplied text string to upper case. The
 // syntax of the function is:
 //
-//    UPPER(text)
-//
+//     UPPER(text)
 func (fn *formulaFuncs) UPPER(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "UPPER requires 1 argument")
@@ -14090,8 +13738,7 @@ func (fn *formulaFuncs) UPPER(argsList *list.List) formulaArg {
 // VALUE function converts a text string into a numeric value. The syntax of
 // the function is:
 //
-//    VALUE(text)
-//
+//     VALUE(text)
 func (fn *formulaFuncs) VALUE(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "VALUE requires 1 argument")
@@ -14131,8 +13778,7 @@ func (fn *formulaFuncs) VALUE(argsList *list.List) formulaArg {
 // condition evaluates to TRUE, and another result if the condition evaluates
 // to FALSE. The syntax of the function is:
 //
-//    IF(logical_test,value_if_true,value_if_false)
-//
+//     IF(logical_test,value_if_true,value_if_false)
 func (fn *formulaFuncs) IF(argsList *list.List) formulaArg {
        if argsList.Len() == 0 {
                return newErrorFormulaArg(formulaErrorVALUE, "IF requires at least 1 argument")
@@ -14185,8 +13831,7 @@ func (fn *formulaFuncs) IF(argsList *list.List) formulaArg {
 // ADDRESS function takes a row and a column number and returns a cell
 // reference as a text string. The syntax of the function is:
 //
-//    ADDRESS(row_num,column_num,[abs_num],[a1],[sheet_text])
-//
+//     ADDRESS(row_num,column_num,[abs_num],[a1],[sheet_text])
 func (fn *formulaFuncs) ADDRESS(argsList *list.List) formulaArg {
        if argsList.Len() < 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "ADDRESS requires at least 2 arguments")
@@ -14240,8 +13885,7 @@ func (fn *formulaFuncs) ADDRESS(argsList *list.List) formulaArg {
 // CHOOSE function returns a value from an array, that corresponds to a
 // supplied index number (position). The syntax of the function is:
 //
-//    CHOOSE(index_num,value1,[value2],...)
-//
+//     CHOOSE(index_num,value1,[value2],...)
 func (fn *formulaFuncs) CHOOSE(argsList *list.List) formulaArg {
        if argsList.Len() < 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "CHOOSE requires 2 arguments")
@@ -14388,8 +14032,7 @@ func compareFormulaArgMatrix(lhs, rhs, matchMode formulaArg, caseSensitive bool)
 // COLUMN function returns the first column number within a supplied reference
 // or the number of the current column. The syntax of the function is:
 //
-//    COLUMN([reference])
-//
+//     COLUMN([reference])
 func (fn *formulaFuncs) COLUMN(argsList *list.List) formulaArg {
        if argsList.Len() > 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "COLUMN requires at most 1 argument")
@@ -14450,8 +14093,7 @@ func calcColumnsMinMax(argsList *list.List) (min, max int) {
 // COLUMNS function receives an Excel range and returns the number of columns
 // that are contained within the range. The syntax of the function is:
 //
-//    COLUMNS(array)
-//
+//     COLUMNS(array)
 func (fn *formulaFuncs) COLUMNS(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "COLUMNS requires 1 argument")
@@ -14473,8 +14115,7 @@ func (fn *formulaFuncs) COLUMNS(argsList *list.List) formulaArg {
 // FORMULATEXT function returns a formula as a text string. The syntax of the
 // function is:
 //
-//    FORMULATEXT(reference)
-//
+//     FORMULATEXT(reference)
 func (fn *formulaFuncs) FORMULATEXT(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "FORMULATEXT requires 1 argument")
@@ -14540,8 +14181,7 @@ func checkHVLookupArgs(name string, argsList *list.List) (idx int, lookupValue,
 // (or table), and returns the corresponding value from another row of the
 // array. The syntax of the function is:
 //
-//    HLOOKUP(lookup_value,table_array,row_index_num,[range_lookup])
-//
+//     HLOOKUP(lookup_value,table_array,row_index_num,[range_lookup])
 func (fn *formulaFuncs) HLOOKUP(argsList *list.List) formulaArg {
        rowIdx, lookupValue, tableArray, matchMode, errArg := checkHVLookupArgs("HLOOKUP", argsList)
        if errArg.Type == ArgError {
@@ -14570,8 +14210,7 @@ func (fn *formulaFuncs) HLOOKUP(argsList *list.List) formulaArg {
 // HYPERLINK function creates a hyperlink to a specified location. The syntax
 // of the function is:
 //
-//    HYPERLINK(link_location,[friendly_name])
-//
+//     HYPERLINK(link_location,[friendly_name])
 func (fn *formulaFuncs) HYPERLINK(argsList *list.List) formulaArg {
        if argsList.Len() < 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "HYPERLINK requires at least 1 argument")
@@ -14630,8 +14269,7 @@ func calcMatch(matchType int, criteria *formulaCriteria, lookupArray []formulaAr
 // should return the position of the closest match (above or below), if an
 // exact match is not found. The syntax of the Match function is:
 //
-//    MATCH(lookup_value,lookup_array,[match_type])
-//
+//     MATCH(lookup_value,lookup_array,[match_type])
 func (fn *formulaFuncs) MATCH(argsList *list.List) formulaArg {
        if argsList.Len() != 2 && argsList.Len() != 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "MATCH requires 1 or 2 arguments")
@@ -14667,8 +14305,7 @@ func (fn *formulaFuncs) MATCH(argsList *list.List) formulaArg {
 // a horizontal range of cells into a vertical range and vice versa). The
 // syntax of the function is:
 //
-//    TRANSPOSE(array)
-//
+//     TRANSPOSE(array)
 func (fn *formulaFuncs) TRANSPOSE(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "TRANSPOSE requires 1 argument")
@@ -14736,8 +14373,7 @@ start:
 // data array (or table), and returns the corresponding value from another
 // column of the array. The syntax of the function is:
 //
-//    VLOOKUP(lookup_value,table_array,col_index_num,[range_lookup])
-//
+//     VLOOKUP(lookup_value,table_array,col_index_num,[range_lookup])
 func (fn *formulaFuncs) VLOOKUP(argsList *list.List) formulaArg {
        colIdx, lookupValue, tableArray, matchMode, errArg := checkHVLookupArgs("VLOOKUP", argsList)
        if errArg.Type == ArgError {
@@ -14992,8 +14628,7 @@ func (fn *formulaFuncs) xlookup(lookupRows, lookupCols, returnArrayRows, returnA
 // XLOOKUP can return the closest (approximate) match. The syntax of the
 // function is:
 //
-//    XLOOKUP(lookup_value,lookup_array,return_array,[if_not_found],[match_mode],[search_mode])
-//
+//     XLOOKUP(lookup_value,lookup_array,return_array,[if_not_found],[match_mode],[search_mode])
 func (fn *formulaFuncs) XLOOKUP(argsList *list.List) formulaArg {
        args := fn.prepareXlookupArgs(argsList)
        if args.Type != ArgList {
@@ -15029,8 +14664,7 @@ func (fn *formulaFuncs) XLOOKUP(argsList *list.List) formulaArg {
 // INDEX function returns a reference to a cell that lies in a specified row
 // and column of a range of cells. The syntax of the function is:
 //
-//    INDEX(array,row_num,[col_num])
-//
+//     INDEX(array,row_num,[col_num])
 func (fn *formulaFuncs) INDEX(argsList *list.List) formulaArg {
        if argsList.Len() < 2 || argsList.Len() > 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "INDEX requires 2 or 3 arguments")
@@ -15070,8 +14704,7 @@ func (fn *formulaFuncs) INDEX(argsList *list.List) formulaArg {
 // INDIRECT function converts a text string into a cell reference. The syntax
 // of the Indirect function is:
 //
-//    INDIRECT(ref_text,[a1])
-//
+//     INDIRECT(ref_text,[a1])
 func (fn *formulaFuncs) INDIRECT(argsList *list.List) formulaArg {
        if argsList.Len() != 1 && argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "INDIRECT requires 1 or 2 arguments")
@@ -15133,8 +14766,7 @@ func (fn *formulaFuncs) INDIRECT(argsList *list.List) formulaArg {
 // one-row range, and returns the corresponding value from another one-column
 // or one-row range. The syntax of the function is:
 //
-//    LOOKUP(lookup_value,lookup_vector,[result_vector])
-//
+//     LOOKUP(lookup_value,lookup_vector,[result_vector])
 func (fn *formulaFuncs) LOOKUP(argsList *list.List) formulaArg {
        arrayForm, lookupValue, lookupVector, errArg := checkLookupArgs(argsList)
        if errArg.Type == ArgError {
@@ -15177,8 +14809,7 @@ func lookupCol(arr formulaArg, idx int) []formulaArg {
 // ROW function returns the first row number within a supplied reference or
 // the number of the current row. The syntax of the function is:
 //
-//    ROW([reference])
-//
+//     ROW([reference])
 func (fn *formulaFuncs) ROW(argsList *list.List) formulaArg {
        if argsList.Len() > 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "ROW requires at most 1 argument")
@@ -15239,8 +14870,7 @@ func calcRowsMinMax(argsList *list.List) (min, max int) {
 // ROWS function takes an Excel range and returns the number of rows that are
 // contained within the range. The syntax of the function is:
 //
-//    ROWS(array)
-//
+//     ROWS(array)
 func (fn *formulaFuncs) ROWS(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "ROWS requires 1 argument")
@@ -15265,8 +14895,7 @@ func (fn *formulaFuncs) ROWS(argsList *list.List) formulaArg {
 // non-alphanumeric characters with the percentage symbol (%) and a
 // hexadecimal number. The syntax of the function is:
 //
-//    ENCODEURL(url)
-//
+//     ENCODEURL(url)
 func (fn *formulaFuncs) ENCODEURL(argsList *list.List) formulaArg {
        if argsList.Len() != 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "ENCODEURL requires 1 argument")
@@ -15285,8 +14914,7 @@ func validateFrequency(freq float64) bool {
 // ACCRINT function returns the accrued interest in a security that pays
 // periodic interest. The syntax of the function is:
 //
-//    ACCRINT(issue,first_interest,settlement,rate,par,frequency,[basis],[calc_method])
-//
+//     ACCRINT(issue,first_interest,settlement,rate,par,frequency,[basis],[calc_method])
 func (fn *formulaFuncs) ACCRINT(argsList *list.List) formulaArg {
        if argsList.Len() < 6 {
                return newErrorFormulaArg(formulaErrorVALUE, "ACCRINT requires at least 6 arguments")
@@ -15329,8 +14957,7 @@ func (fn *formulaFuncs) ACCRINT(argsList *list.List) formulaArg {
 // ACCRINTM function returns the accrued interest in a security that pays
 // interest at maturity. The syntax of the function is:
 //
-//    ACCRINTM(issue,settlement,rate,[par],[basis])
-//
+//     ACCRINTM(issue,settlement,rate,[par],[basis])
 func (fn *formulaFuncs) ACCRINTM(argsList *list.List) formulaArg {
        if argsList.Len() != 4 && argsList.Len() != 5 {
                return newErrorFormulaArg(formulaErrorVALUE, "ACCRINTM requires 4 or 5 arguments")
@@ -15417,8 +15044,7 @@ func (fn *formulaFuncs) prepareAmorArgs(name string, argsList *list.List) formul
 // The function calculates the prorated linear depreciation of an asset for a
 // specified accounting period. The syntax of the function is:
 //
-//    AMORDEGRC(cost,date_purchased,first_period,salvage,period,rate,[basis])
-//
+//     AMORDEGRC(cost,date_purchased,first_period,salvage,period,rate,[basis])
 func (fn *formulaFuncs) AMORDEGRC(argsList *list.List) formulaArg {
        if argsList.Len() != 6 && argsList.Len() != 7 {
                return newErrorFormulaArg(formulaErrorVALUE, "AMORDEGRC requires 6 or 7 arguments")
@@ -15468,8 +15094,7 @@ func (fn *formulaFuncs) AMORDEGRC(argsList *list.List) formulaArg {
 // The function calculates the prorated linear depreciation of an asset for a
 // specified accounting period. The syntax of the function is:
 //
-//    AMORLINC(cost,date_purchased,first_period,salvage,period,rate,[basis])
-//
+//     AMORLINC(cost,date_purchased,first_period,salvage,period,rate,[basis])
 func (fn *formulaFuncs) AMORLINC(argsList *list.List) formulaArg {
        if argsList.Len() != 6 && argsList.Len() != 7 {
                return newErrorFormulaArg(formulaErrorVALUE, "AMORLINC requires 6 or 7 arguments")
@@ -15598,8 +15223,7 @@ func coupdays(from, to time.Time, basis int) float64 {
 // COUPDAYBS function calculates the number of days from the beginning of a
 // coupon's period to the settlement date. The syntax of the function is:
 //
-//    COUPDAYBS(settlement,maturity,frequency,[basis])
-//
+//     COUPDAYBS(settlement,maturity,frequency,[basis])
 func (fn *formulaFuncs) COUPDAYBS(argsList *list.List) formulaArg {
        args := fn.prepareCouponArgs("COUPDAYBS", argsList)
        if args.Type != ArgList {
@@ -15613,8 +15237,7 @@ func (fn *formulaFuncs) COUPDAYBS(argsList *list.List) formulaArg {
 // COUPDAYS function calculates the number of days in a coupon period that
 // contains the settlement date. The syntax of the function is:
 //
-//    COUPDAYS(settlement,maturity,frequency,[basis])
-//
+//     COUPDAYS(settlement,maturity,frequency,[basis])
 func (fn *formulaFuncs) COUPDAYS(argsList *list.List) formulaArg {
        args := fn.prepareCouponArgs("COUPDAYS", argsList)
        if args.Type != ArgList {
@@ -15633,8 +15256,7 @@ func (fn *formulaFuncs) COUPDAYS(argsList *list.List) formulaArg {
 // COUPDAYSNC function calculates the number of days from the settlement date
 // to the next coupon date. The syntax of the function is:
 //
-//    COUPDAYSNC(settlement,maturity,frequency,[basis])
-//
+//     COUPDAYSNC(settlement,maturity,frequency,[basis])
 func (fn *formulaFuncs) COUPDAYSNC(argsList *list.List) formulaArg {
        args := fn.prepareCouponArgs("COUPDAYSNC", argsList)
        if args.Type != ArgList {
@@ -15684,8 +15306,7 @@ func (fn *formulaFuncs) coupons(name string, arg formulaArg) formulaArg {
 // security's settlement date and maturity date, rounded up to the nearest
 // whole coupon. The syntax of the function is:
 //
-//    COUPNCD(settlement,maturity,frequency,[basis])
-//
+//     COUPNCD(settlement,maturity,frequency,[basis])
 func (fn *formulaFuncs) COUPNCD(argsList *list.List) formulaArg {
        args := fn.prepareCouponArgs("COUPNCD", argsList)
        if args.Type != ArgList {
@@ -15698,8 +15319,7 @@ func (fn *formulaFuncs) COUPNCD(argsList *list.List) formulaArg {
 // security's settlement date and maturity date, rounded up to the nearest
 // whole coupon. The syntax of the function is:
 //
-//    COUPNUM(settlement,maturity,frequency,[basis])
-//
+//     COUPNUM(settlement,maturity,frequency,[basis])
 func (fn *formulaFuncs) COUPNUM(argsList *list.List) formulaArg {
        args := fn.prepareCouponArgs("COUPNUM", argsList)
        if args.Type != ArgList {
@@ -15712,8 +15332,7 @@ func (fn *formulaFuncs) COUPNUM(argsList *list.List) formulaArg {
 // COUPPCD function returns the previous coupon date, before the settlement
 // date for a security. The syntax of the function is:
 //
-//    COUPPCD(settlement,maturity,frequency,[basis])
-//
+//     COUPPCD(settlement,maturity,frequency,[basis])
 func (fn *formulaFuncs) COUPPCD(argsList *list.List) formulaArg {
        args := fn.prepareCouponArgs("COUPPCD", argsList)
        if args.Type != ArgList {
@@ -15725,8 +15344,7 @@ func (fn *formulaFuncs) COUPPCD(argsList *list.List) formulaArg {
 // CUMIPMT function calculates the cumulative interest paid on a loan or
 // investment, between two specified periods. The syntax of the function is:
 //
-//    CUMIPMT(rate,nper,pv,start_period,end_period,type)
-//
+//     CUMIPMT(rate,nper,pv,start_period,end_period,type)
 func (fn *formulaFuncs) CUMIPMT(argsList *list.List) formulaArg {
        return fn.cumip("CUMIPMT", argsList)
 }
@@ -15735,8 +15353,7 @@ func (fn *formulaFuncs) CUMIPMT(argsList *list.List) formulaArg {
 // loan or investment, between two specified periods. The syntax of the
 // function is:
 //
-//    CUMPRINC(rate,nper,pv,start_period,end_period,type)
-//
+//     CUMPRINC(rate,nper,pv,start_period,end_period,type)
 func (fn *formulaFuncs) CUMPRINC(argsList *list.List) formulaArg {
        return fn.cumip("CUMPRINC", argsList)
 }
@@ -15803,8 +15420,7 @@ func calcDbArgsCompare(cost, salvage, life, period formulaArg) bool {
 // Declining Balance Method, for each period of the asset's lifetime. The
 // syntax of the function is:
 //
-//    DB(cost,salvage,life,period,[month])
-//
+//     DB(cost,salvage,life,period,[month])
 func (fn *formulaFuncs) DB(argsList *list.List) formulaArg {
        if argsList.Len() < 4 {
                return newErrorFormulaArg(formulaErrorVALUE, "DB requires at least 4 arguments")
@@ -15860,8 +15476,7 @@ func (fn *formulaFuncs) DB(argsList *list.List) formulaArg {
 // Declining Balance Method, or another specified depreciation rate. The
 // syntax of the function is:
 //
-//    DDB(cost,salvage,life,period,[factor])
-//
+//     DDB(cost,salvage,life,period,[factor])
 func (fn *formulaFuncs) DDB(argsList *list.List) formulaArg {
        if argsList.Len() < 4 {
                return newErrorFormulaArg(formulaErrorVALUE, "DDB requires at least 4 arguments")
@@ -15945,8 +15560,7 @@ func (fn *formulaFuncs) prepareDataValueArgs(n int, argsList *list.List) formula
 // DISC function calculates the Discount Rate for a security. The syntax of
 // the function is:
 //
-//    DISC(settlement,maturity,pr,redemption,[basis])
-//
+//     DISC(settlement,maturity,pr,redemption,[basis])
 func (fn *formulaFuncs) DISC(argsList *list.List) formulaArg {
        if argsList.Len() != 4 && argsList.Len() != 5 {
                return newErrorFormulaArg(formulaErrorVALUE, "DISC requires 4 or 5 arguments")
@@ -15989,8 +15603,7 @@ func (fn *formulaFuncs) DISC(argsList *list.List) formulaArg {
 // DOLLARDE function converts a dollar value in fractional notation, into a
 // dollar value expressed as a decimal. The syntax of the function is:
 //
-//    DOLLARDE(fractional_dollar,fraction)
-//
+//     DOLLARDE(fractional_dollar,fraction)
 func (fn *formulaFuncs) DOLLARDE(argsList *list.List) formulaArg {
        return fn.dollar("DOLLARDE", argsList)
 }
@@ -15999,8 +15612,7 @@ func (fn *formulaFuncs) DOLLARDE(argsList *list.List) formulaArg {
 // dollar value that is expressed in fractional notation. The syntax of the
 // function is:
 //
-//    DOLLARFR(decimal_dollar,fraction)
-//
+//     DOLLARFR(decimal_dollar,fraction)
 func (fn *formulaFuncs) DOLLARFR(argsList *list.List) formulaArg {
        return fn.dollar("DOLLARFR", argsList)
 }
@@ -16115,8 +15727,7 @@ func (fn *formulaFuncs) duration(settlement, maturity, coupon, yld, frequency, b
 // Duration) of a security that pays periodic interest, assuming a par value
 // of $100. The syntax of the function is:
 //
-//    DURATION(settlement,maturity,coupon,yld,frequency,[basis])
-//
+//     DURATION(settlement,maturity,coupon,yld,frequency,[basis])
 func (fn *formulaFuncs) DURATION(argsList *list.List) formulaArg {
        args := fn.prepareDurationArgs("DURATION", argsList)
        if args.Type != ArgList {
@@ -16129,8 +15740,7 @@ func (fn *formulaFuncs) DURATION(argsList *list.List) formulaArg {
 // nominal interest rate and number of compounding periods per year. The
 // syntax of the function is:
 //
-//    EFFECT(nominal_rate,npery)
-//
+//     EFFECT(nominal_rate,npery)
 func (fn *formulaFuncs) EFFECT(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "EFFECT requires 2 arguments")
@@ -16154,8 +15764,7 @@ func (fn *formulaFuncs) EFFECT(argsList *list.List) formulaArg {
 // participating currency to another by using the euro as an intermediary
 // (triangulation). The syntax of the function is:
 //
-//    EUROCONVERT(number,sourcecurrency,targetcurrency[,fullprecision,triangulationprecision])
-//
+//     EUROCONVERT(number,sourcecurrency,targetcurrency[,fullprecision,triangulationprecision])
 func (fn *formulaFuncs) EUROCONVERT(argsList *list.List) formulaArg {
        if argsList.Len() < 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "EUROCONVERT requires at least 3 arguments")
@@ -16235,8 +15844,7 @@ func (fn *formulaFuncs) EUROCONVERT(argsList *list.List) formulaArg {
 // constant payments and a constant interest rate. The syntax of the function
 // is:
 //
-//    FV(rate,nper,[pmt],[pv],[type])
-//
+//     FV(rate,nper,[pmt],[pv],[type])
 func (fn *formulaFuncs) FV(argsList *list.List) formulaArg {
        if argsList.Len() < 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "FV requires at least 3 arguments")
@@ -16279,8 +15887,7 @@ func (fn *formulaFuncs) FV(argsList *list.List) formulaArg {
 // FVSCHEDULE function calculates the Future Value of an investment with a
 // variable interest rate. The syntax of the function is:
 //
-//    FVSCHEDULE(principal,schedule)
-//
+//     FVSCHEDULE(principal,schedule)
 func (fn *formulaFuncs) FVSCHEDULE(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "FVSCHEDULE requires 2 arguments")
@@ -16306,8 +15913,7 @@ func (fn *formulaFuncs) FVSCHEDULE(argsList *list.List) formulaArg {
 // INTRATE function calculates the interest rate for a fully invested
 // security. The syntax of the function is:
 //
-//    INTRATE(settlement,maturity,investment,redemption,[basis])
-//
+//     INTRATE(settlement,maturity,investment,redemption,[basis])
 func (fn *formulaFuncs) INTRATE(argsList *list.List) formulaArg {
        if argsList.Len() != 4 && argsList.Len() != 5 {
                return newErrorFormulaArg(formulaErrorVALUE, "INTRATE requires 4 or 5 arguments")
@@ -16351,8 +15957,7 @@ func (fn *formulaFuncs) INTRATE(argsList *list.List) formulaArg {
 // loan or investment that is paid in constant periodic payments, with a
 // constant interest rate. The syntax of the function is:
 //
-//    IPMT(rate,per,nper,pv,[fv],[type])
-//
+//     IPMT(rate,per,nper,pv,[fv],[type])
 func (fn *formulaFuncs) IPMT(argsList *list.List) formulaArg {
        return fn.ipmt("IPMT", argsList)
 }
@@ -16430,8 +16035,7 @@ func (fn *formulaFuncs) ipmt(name string, argsList *list.List) formulaArg {
 // periodic cash flows (i.e. an initial investment value and a series of net
 // income values). The syntax of the function is:
 //
-//    IRR(values,[guess])
-//
+//     IRR(values,[guess])
 func (fn *formulaFuncs) IRR(argsList *list.List) formulaArg {
        if argsList.Len() < 1 {
                return newErrorFormulaArg(formulaErrorVALUE, "IRR requires at least 1 argument")
@@ -16499,8 +16103,7 @@ func (fn *formulaFuncs) IRR(argsList *list.List) formulaArg {
 // ISPMT function calculates the interest paid during a specific period of a
 // loan or investment. The syntax of the function is:
 //
-//    ISPMT(rate,per,nper,pv)
-//
+//     ISPMT(rate,per,nper,pv)
 func (fn *formulaFuncs) ISPMT(argsList *list.List) formulaArg {
        if argsList.Len() != 4 {
                return newErrorFormulaArg(formulaErrorVALUE, "ISPMT requires 4 arguments")
@@ -16536,8 +16139,7 @@ func (fn *formulaFuncs) ISPMT(argsList *list.List) formulaArg {
 // that pays periodic interest, assuming a par value of $100. The syntax of
 // the function is:
 //
-//    MDURATION(settlement,maturity,coupon,yld,frequency,[basis])
-//
+//     MDURATION(settlement,maturity,coupon,yld,frequency,[basis])
 func (fn *formulaFuncs) MDURATION(argsList *list.List) formulaArg {
        args := fn.prepareDurationArgs("MDURATION", argsList)
        if args.Type != ArgList {
@@ -16555,8 +16157,7 @@ func (fn *formulaFuncs) MDURATION(argsList *list.List) formulaArg {
 // initial investment value and a series of net income values). The syntax of
 // the function is:
 //
-//    MIRR(values,finance_rate,reinvest_rate)
-//
+//     MIRR(values,finance_rate,reinvest_rate)
 func (fn *formulaFuncs) MIRR(argsList *list.List) formulaArg {
        if argsList.Len() != 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "MIRR requires 3 arguments")
@@ -16589,8 +16190,7 @@ func (fn *formulaFuncs) MIRR(argsList *list.List) formulaArg {
 // interest rate and number of compounding periods per year. The syntax of
 // the function is:
 //
-//    NOMINAL(effect_rate,npery)
-//
+//     NOMINAL(effect_rate,npery)
 func (fn *formulaFuncs) NOMINAL(argsList *list.List) formulaArg {
        if argsList.Len() != 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "NOMINAL requires 2 arguments")
@@ -16613,8 +16213,7 @@ func (fn *formulaFuncs) NOMINAL(argsList *list.List) formulaArg {
 // for a constant periodic payment and a constant interest rate. The syntax
 // of the function is:
 //
-//    NPER(rate,pmt,pv,[fv],[type])
-//
+//     NPER(rate,pmt,pv,[fv],[type])
 func (fn *formulaFuncs) NPER(argsList *list.List) formulaArg {
        if argsList.Len() < 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "NPER requires at least 3 arguments")
@@ -16662,8 +16261,7 @@ func (fn *formulaFuncs) NPER(argsList *list.List) formulaArg {
 // supplied discount rate, and a series of future payments and income. The
 // syntax of the function is:
 //
-//    NPV(rate,value1,[value2],[value3],...)
-//
+//     NPV(rate,value1,[value2],[value3],...)
 func (fn *formulaFuncs) NPV(argsList *list.List) formulaArg {
        if argsList.Len() < 2 {
                return newErrorFormulaArg(formulaErrorVALUE, "NPV requires at least 2 arguments")
@@ -16827,8 +16425,7 @@ func (fn *formulaFuncs) prepareOddfpriceArgs(argsList *list.List) formulaArg {
 // ODDFPRICE function calculates the price per $100 face value of a security
 // with an odd (short or long) first period. The syntax of the function is:
 //
-//    ODDFPRICE(settlement,maturity,issue,first_coupon,rate,yld,redemption,frequency,[basis])
-//
+//     ODDFPRICE(settlement,maturity,issue,first_coupon,rate,yld,redemption,frequency,[basis])
 func (fn *formulaFuncs) ODDFPRICE(argsList *list.List) formulaArg {
        if argsList.Len() != 8 && argsList.Len() != 9 {
                return newErrorFormulaArg(formulaErrorVALUE, "ODDFPRICE requires 8 or 9 arguments")
@@ -16957,8 +16554,7 @@ func (fn *formulaFuncs) ODDFPRICE(argsList *list.List) formulaArg {
 // investment to reach a specified future value. The syntax of the function
 // is:
 //
-//    PDURATION(rate,pv,fv)
-//
+//     PDURATION(rate,pv,fv)
 func (fn *formulaFuncs) PDURATION(argsList *list.List) formulaArg {
        if argsList.Len() != 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "PDURATION requires 3 arguments")
@@ -16985,8 +16581,7 @@ func (fn *formulaFuncs) PDURATION(argsList *list.List) formulaArg {
 // (or partially pay off) a loan or investment, with a constant interest
 // rate, over a specified period. The syntax of the function is:
 //
-//    PMT(rate,nper,pv,[fv],[type])
-//
+//     PMT(rate,nper,pv,[fv],[type])
 func (fn *formulaFuncs) PMT(argsList *list.List) formulaArg {
        if argsList.Len() < 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "PMT requires at least 3 arguments")
@@ -17031,8 +16626,7 @@ func (fn *formulaFuncs) PMT(argsList *list.List) formulaArg {
 // period of a loan or investment that is paid in constant periodic payments,
 // with a constant interest rate. The syntax of the function is:
 //
-//    PPMT(rate,per,nper,pv,[fv],[type])
-//
+//     PPMT(rate,per,nper,pv,[fv],[type])
 func (fn *formulaFuncs) PPMT(argsList *list.List) formulaArg {
        return fn.ipmt("PPMT", argsList)
 }
@@ -17073,8 +16667,7 @@ func (fn *formulaFuncs) price(settlement, maturity, rate, yld, redemption, frequ
 // PRICE function calculates the price, per $100 face value of a security that
 // pays periodic interest. The syntax of the function is:
 //
-//    PRICE(settlement,maturity,rate,yld,redemption,frequency,[basis])
-//
+//     PRICE(settlement,maturity,rate,yld,redemption,frequency,[basis])
 func (fn *formulaFuncs) PRICE(argsList *list.List) formulaArg {
        if argsList.Len() != 6 && argsList.Len() != 7 {
                return newErrorFormulaArg(formulaErrorVALUE, "PRICE requires 6 or 7 arguments")
@@ -17124,8 +16717,7 @@ func (fn *formulaFuncs) PRICE(argsList *list.List) formulaArg {
 // PRICEDISC function calculates the price, per $100 face value of a
 // discounted security. The syntax of the function is:
 //
-//    PRICEDISC(settlement,maturity,discount,redemption,[basis])
-//
+//     PRICEDISC(settlement,maturity,discount,redemption,[basis])
 func (fn *formulaFuncs) PRICEDISC(argsList *list.List) formulaArg {
        if argsList.Len() != 4 && argsList.Len() != 5 {
                return newErrorFormulaArg(formulaErrorVALUE, "PRICEDISC requires 4 or 5 arguments")
@@ -17168,8 +16760,7 @@ func (fn *formulaFuncs) PRICEDISC(argsList *list.List) formulaArg {
 // PRICEMAT function calculates the price, per $100 face value of a security
 // that pays interest at maturity. The syntax of the function is:
 //
-//    PRICEMAT(settlement,maturity,issue,rate,yld,[basis])
-//
+//     PRICEMAT(settlement,maturity,issue,rate,yld,[basis])
 func (fn *formulaFuncs) PRICEMAT(argsList *list.List) formulaArg {
        if argsList.Len() != 5 && argsList.Len() != 6 {
                return newErrorFormulaArg(formulaErrorVALUE, "PRICEMAT requires 5 or 6 arguments")
@@ -17217,8 +16808,7 @@ func (fn *formulaFuncs) PRICEMAT(argsList *list.List) formulaArg {
 // PV function calculates the Present Value of an investment, based on a
 // series of future payments. The syntax of the function is:
 //
-//    PV(rate,nper,pmt,[fv],[type])
-//
+//     PV(rate,nper,pmt,[fv],[type])
 func (fn *formulaFuncs) PV(argsList *list.List) formulaArg {
        if argsList.Len() < 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "PV requires at least 3 arguments")
@@ -17286,8 +16876,7 @@ func (fn *formulaFuncs) rate(nper, pmt, pv, fv, t, guess formulaArg) formulaArg
 // amount of a loan, or to reach a target amount on an investment, over a
 // given period. The syntax of the function is:
 //
-//    RATE(nper,pmt,pv,[fv],[type],[guess])
-//
+//     RATE(nper,pmt,pv,[fv],[type],[guess])
 func (fn *formulaFuncs) RATE(argsList *list.List) formulaArg {
        if argsList.Len() < 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "RATE requires at least 3 arguments")
@@ -17334,8 +16923,7 @@ func (fn *formulaFuncs) RATE(argsList *list.List) formulaArg {
 // RECEIVED function calculates the amount received at maturity for a fully
 // invested security. The syntax of the function is:
 //
-//    RECEIVED(settlement,maturity,investment,discount,[basis])
-//
+//     RECEIVED(settlement,maturity,investment,discount,[basis])
 func (fn *formulaFuncs) RECEIVED(argsList *list.List) formulaArg {
        if argsList.Len() < 4 {
                return newErrorFormulaArg(formulaErrorVALUE, "RECEIVED requires at least 4 arguments")
@@ -17376,8 +16964,7 @@ func (fn *formulaFuncs) RECEIVED(argsList *list.List) formulaArg {
 // specified present value, future value and duration. The syntax of the
 // function is:
 //
-//    RRI(nper,pv,fv)
-//
+//     RRI(nper,pv,fv)
 func (fn *formulaFuncs) RRI(argsList *list.List) formulaArg {
        if argsList.Len() != 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "RRI requires 3 arguments")
@@ -17403,8 +16990,7 @@ func (fn *formulaFuncs) RRI(argsList *list.List) formulaArg {
 // SLN function calculates the straight line depreciation of an asset for one
 // period. The syntax of the function is:
 //
-//    SLN(cost,salvage,life)
-//
+//     SLN(cost,salvage,life)
 func (fn *formulaFuncs) SLN(argsList *list.List) formulaArg {
        if argsList.Len() != 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "SLN requires 3 arguments")
@@ -17425,8 +17011,7 @@ func (fn *formulaFuncs) SLN(argsList *list.List) formulaArg {
 // specified period in the lifetime of an asset. The syntax of the function
 // is:
 //
-//    SYD(cost,salvage,life,per)
-//
+//     SYD(cost,salvage,life,per)
 func (fn *formulaFuncs) SYD(argsList *list.List) formulaArg {
        if argsList.Len() != 4 {
                return newErrorFormulaArg(formulaErrorVALUE, "SYD requires 4 arguments")
@@ -17453,8 +17038,7 @@ func (fn *formulaFuncs) SYD(argsList *list.List) formulaArg {
 // TBILLEQ function calculates the bond-equivalent yield for a Treasury Bill.
 // The syntax of the function is:
 //
-//    TBILLEQ(settlement,maturity,discount)
-//
+//     TBILLEQ(settlement,maturity,discount)
 func (fn *formulaFuncs) TBILLEQ(argsList *list.List) formulaArg {
        if argsList.Len() != 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "TBILLEQ requires 3 arguments")
@@ -17481,8 +17065,7 @@ func (fn *formulaFuncs) TBILLEQ(argsList *list.List) formulaArg {
 // TBILLPRICE function returns the price, per $100 face value, of a Treasury
 // Bill. The syntax of the function is:
 //
-//    TBILLPRICE(settlement,maturity,discount)
-//
+//     TBILLPRICE(settlement,maturity,discount)
 func (fn *formulaFuncs) TBILLPRICE(argsList *list.List) formulaArg {
        if argsList.Len() != 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "TBILLPRICE requires 3 arguments")
@@ -17509,8 +17092,7 @@ func (fn *formulaFuncs) TBILLPRICE(argsList *list.List) formulaArg {
 // TBILLYIELD function calculates the yield of a Treasury Bill. The syntax of
 // the function is:
 //
-//    TBILLYIELD(settlement,maturity,pr)
-//
+//     TBILLYIELD(settlement,maturity,pr)
 func (fn *formulaFuncs) TBILLYIELD(argsList *list.List) formulaArg {
        if argsList.Len() != 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "TBILLYIELD requires 3 arguments")
@@ -17625,8 +17207,7 @@ func (fn *formulaFuncs) vdb(cost, salvage, life, life1, period, factor formulaAr
 // specified period (including partial periods). The syntax of the function
 // is:
 //
-//    VDB(cost,salvage,life,start_period,end_period,[factor],[no_switch])
-//
+//     VDB(cost,salvage,life,start_period,end_period,[factor],[no_switch])
 func (fn *formulaFuncs) VDB(argsList *list.List) formulaArg {
        if argsList.Len() < 5 || argsList.Len() > 7 {
                return newErrorFormulaArg(formulaErrorVALUE, "VDB requires 5 or 7 arguments")
@@ -17774,8 +17355,7 @@ func xirrPart2(values, dates []float64, rate float64) float64 {
 // value and a series of net income values) occurring at a series of supplied
 // dates. The syntax of the function is:
 //
-//    XIRR(values,dates,[guess])
-//
+//     XIRR(values,dates,[guess])
 func (fn *formulaFuncs) XIRR(argsList *list.List) formulaArg {
        if argsList.Len() != 2 && argsList.Len() != 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "XIRR requires 2 or 3 arguments")
@@ -17799,8 +17379,7 @@ func (fn *formulaFuncs) XIRR(argsList *list.List) formulaArg {
 // XNPV function calculates the Net Present Value for a schedule of cash flows
 // that is not necessarily periodic. The syntax of the function is:
 //
-//    XNPV(rate,values,dates)
-//
+//     XNPV(rate,values,dates)
 func (fn *formulaFuncs) XNPV(argsList *list.List) formulaArg {
        if argsList.Len() != 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "XNPV requires 3 arguments")
@@ -17862,8 +17441,7 @@ func (fn *formulaFuncs) yield(settlement, maturity, rate, pr, redemption, freque
 // YIELD function calculates the Yield of a security that pays periodic
 // interest. The syntax of the function is:
 //
-//    YIELD(settlement,maturity,rate,pr,redemption,frequency,[basis])
-//
+//     YIELD(settlement,maturity,rate,pr,redemption,frequency,[basis])
 func (fn *formulaFuncs) YIELD(argsList *list.List) formulaArg {
        if argsList.Len() != 6 && argsList.Len() != 7 {
                return newErrorFormulaArg(formulaErrorVALUE, "YIELD requires 6 or 7 arguments")
@@ -17913,8 +17491,7 @@ func (fn *formulaFuncs) YIELD(argsList *list.List) formulaArg {
 // YIELDDISC function calculates the annual yield of a discounted security.
 // The syntax of the function is:
 //
-//    YIELDDISC(settlement,maturity,pr,redemption,[basis])
-//
+//     YIELDDISC(settlement,maturity,pr,redemption,[basis])
 func (fn *formulaFuncs) YIELDDISC(argsList *list.List) formulaArg {
        if argsList.Len() != 4 && argsList.Len() != 5 {
                return newErrorFormulaArg(formulaErrorVALUE, "YIELDDISC requires 4 or 5 arguments")
@@ -17954,8 +17531,7 @@ func (fn *formulaFuncs) YIELDDISC(argsList *list.List) formulaArg {
 // YIELDMAT function calculates the annual yield of a security that pays
 // interest at maturity. The syntax of the function is:
 //
-//    YIELDMAT(settlement,maturity,issue,rate,pr,[basis])
-//
+//     YIELDMAT(settlement,maturity,issue,rate,pr,[basis])
 func (fn *formulaFuncs) YIELDMAT(argsList *list.List) formulaArg {
        if argsList.Len() != 5 && argsList.Len() != 6 {
                return newErrorFormulaArg(formulaErrorVALUE, "YIELDMAT requires 5 or 6 arguments")
@@ -18151,8 +17727,7 @@ func (fn *formulaFuncs) database(name string, argsList *list.List) formulaArg {
 // field (column) in a database for selected records, that satisfy
 // user-specified criteria. The syntax of the Excel Daverage function is:
 //
-//    DAVERAGE(database,field,criteria)
-//
+//     DAVERAGE(database,field,criteria)
 func (fn *formulaFuncs) DAVERAGE(argsList *list.List) formulaArg {
        return fn.database("DAVERAGE", argsList)
 }
@@ -18190,8 +17765,7 @@ func (fn *formulaFuncs) dcount(name string, argsList *list.List) formulaArg {
 // included in the count are those that satisfy a set of one or more
 // user-specified criteria. The syntax of the function is:
 //
-//    DCOUNT(database,[field],criteria)
-//
+//     DCOUNT(database,[field],criteria)
 func (fn *formulaFuncs) DCOUNT(argsList *list.List) formulaArg {
        return fn.dcount("DCOUNT", argsList)
 }
@@ -18201,8 +17775,7 @@ func (fn *formulaFuncs) DCOUNT(argsList *list.List) formulaArg {
 // included in the count are those that satisfy a set of one or more
 // user-specified criteria. The syntax of the function is:
 //
-//    DCOUNTA(database,[field],criteria)
-//
+//     DCOUNTA(database,[field],criteria)
 func (fn *formulaFuncs) DCOUNTA(argsList *list.List) formulaArg {
        return fn.dcount("DCOUNTA", argsList)
 }
@@ -18211,8 +17784,7 @@ func (fn *formulaFuncs) DCOUNTA(argsList *list.List) formulaArg {
 // is selected via a set of one or more user-specified criteria. The syntax of
 // the function is:
 //
-//    DGET(database,field,criteria)
-//
+//     DGET(database,field,criteria)
 func (fn *formulaFuncs) DGET(argsList *list.List) formulaArg {
        if argsList.Len() != 3 {
                return newErrorFormulaArg(formulaErrorVALUE, "DGET requires 3 arguments")
@@ -18238,8 +17810,7 @@ func (fn *formulaFuncs) DGET(argsList *list.List) formulaArg {
 // defined by a set of one or more user-specified criteria. The syntax of the
 // function is:
 //
-//    DMAX(database,field,criteria)
-//
+//     DMAX(database,field,criteria)
 func (fn *formulaFuncs) DMAX(argsList *list.List) formulaArg {
        return fn.database("DMAX", argsList)
 }
@@ -18249,8 +17820,7 @@ func (fn *formulaFuncs) DMAX(argsList *list.List) formulaArg {
 // defined by a set of one or more user-specified criteria. The syntax of the
 // function is:
 //
-//    DMIN(database,field,criteria)
-//
+//     DMIN(database,field,criteria)
 func (fn *formulaFuncs) DMIN(argsList *list.List) formulaArg {
        return fn.database("DMIN", argsList)
 }
@@ -18259,8 +17829,7 @@ func (fn *formulaFuncs) DMIN(argsList *list.List) formulaArg {
 // for selected records, that satisfy user-specified criteria. The syntax of
 // the function is:
 //
-//    DPRODUCT(database,field,criteria)
-//
+//     DPRODUCT(database,field,criteria)
 func (fn *formulaFuncs) DPRODUCT(argsList *list.List) formulaArg {
        return fn.database("DPRODUCT", argsList)
 }
@@ -18270,8 +17839,7 @@ func (fn *formulaFuncs) DPRODUCT(argsList *list.List) formulaArg {
 // included in the calculation are defined by a set of one or more
 // user-specified criteria. The syntax of the function is:
 //
-//    DSTDEV(database,field,criteria)
-//
+//     DSTDEV(database,field,criteria)
 func (fn *formulaFuncs) DSTDEV(argsList *list.List) formulaArg {
        return fn.database("DSTDEV", argsList)
 }
@@ -18281,8 +17849,7 @@ func (fn *formulaFuncs) DSTDEV(argsList *list.List) formulaArg {
 // calculation are defined by a set of one or more user-specified criteria.
 // The syntax of the function is:
 //
-//    DSTDEVP(database,field,criteria)
-//
+//     DSTDEVP(database,field,criteria)
 func (fn *formulaFuncs) DSTDEVP(argsList *list.List) formulaArg {
        return fn.database("DSTDEVP", argsList)
 }
@@ -18291,8 +17858,7 @@ func (fn *formulaFuncs) DSTDEVP(argsList *list.List) formulaArg {
 // selected records, that satisfy user-specified criteria. The syntax of the
 // function is:
 //
-//    DSUM(database,field,criteria)
-//
+//     DSUM(database,field,criteria)
 func (fn *formulaFuncs) DSUM(argsList *list.List) formulaArg {
        return fn.database("DSUM", argsList)
 }
@@ -18302,8 +17868,7 @@ func (fn *formulaFuncs) DSUM(argsList *list.List) formulaArg {
 // calculation are defined by a set of one or more user-specified criteria.
 // The syntax of the function is:
 //
-//    DVAR(database,field,criteria)
-//
+//     DVAR(database,field,criteria)
 func (fn *formulaFuncs) DVAR(argsList *list.List) formulaArg {
        return fn.database("DVAR", argsList)
 }
@@ -18313,8 +17878,7 @@ func (fn *formulaFuncs) DVAR(argsList *list.List) formulaArg {
 // records to be included in the calculation are defined by a set of one or
 // more user-specified criteria. The syntax of the function is:
 //
-//    DVARP(database,field,criteria)
-//
+//     DVARP(database,field,criteria)
 func (fn *formulaFuncs) DVARP(argsList *list.List) formulaArg {
        return fn.database("DVARP", argsList)
 }
diff --git a/cell.go b/cell.go
index 5506189..214f5c6 100644 (file)
--- a/cell.go
+++ b/cell.go
@@ -90,24 +90,24 @@ func (f *File) GetCellType(sheet, axis string) (CellType, error) {
 // can be set with string text. The following shows the supported data
 // types:
 //
-//    int
-//    int8
-//    int16
-//    int32
-//    int64
-//    uint
-//    uint8
-//    uint16
-//    uint32
-//    uint64
-//    float32
-//    float64
-//    string
-//    []byte
-//    time.Duration
-//    time.Time
-//    bool
-//    nil
+//     int
+//     int8
+//     int16
+//     int32
+//     int64
+//     uint
+//     uint8
+//     uint16
+//     uint32
+//     uint64
+//     float32
+//     float64
+//     string
+//     []byte
+//     time.Duration
+//     time.Time
+//     bool
+//     nil
 //
 // Note that default date format is m/d/yy h:mm of time.Time type value. You
 // can set numbers format by SetCellStyle() method. If you need to set the
@@ -334,9 +334,8 @@ func setCellBool(value bool) (t string, v string) {
 // represent the number. bitSize is 32 or 64 depending on if a float32 or
 // float64 was originally used for the value. For Example:
 //
-//    var x float32 = 1.325
-//    f.SetCellFloat("Sheet1", "A1", float64(x), 2, 32)
-//
+//     var x float32 = 1.325
+//     f.SetCellFloat("Sheet1", "A1", float64(x), 2, 32)
 func (f *File) SetCellFloat(sheet, axis string, value float64, precision, bitSize int) error {
        ws, err := f.workSheetReader(sheet)
        if err != nil {
@@ -522,73 +521,72 @@ type FormulaOpts struct {
 //
 // Example 1, set normal formula "=SUM(A1,B1)" for the cell "A3" on "Sheet1":
 //
-//    err := f.SetCellFormula("Sheet1", "A3", "=SUM(A1,B1)")
+//     err := f.SetCellFormula("Sheet1", "A3", "=SUM(A1,B1)")
 //
 // Example 2, set one-dimensional vertical constant array (row array) formula
 // "1,2,3" for the cell "A3" on "Sheet1":
 //
-//    err := f.SetCellFormula("Sheet1", "A3", "={1,2,3}")
+//     err := f.SetCellFormula("Sheet1", "A3", "={1,2,3}")
 //
 // Example 3, set one-dimensional horizontal constant array (column array)
 // formula '"a","b","c"' for the cell "A3" on "Sheet1":
 //
-//    err := f.SetCellFormula("Sheet1", "A3", "={\"a\",\"b\",\"c\"}")
+//     err := f.SetCellFormula("Sheet1", "A3", "={\"a\",\"b\",\"c\"}")
 //
 // Example 4, set two-dimensional constant array formula '{1,2,"a","b"}' for
 // the cell "A3" on "Sheet1":
 //
-//    formulaType, ref := excelize.STCellFormulaTypeArray, "A3:A3"
-//    err := f.SetCellFormula("Sheet1", "A3", "={1,2,\"a\",\"b\"}",
-//        excelize.FormulaOpts{Ref: &ref, Type: &formulaType})
+//     formulaType, ref := excelize.STCellFormulaTypeArray, "A3:A3"
+//     err := f.SetCellFormula("Sheet1", "A3", "={1,2,\"a\",\"b\"}",
+//         excelize.FormulaOpts{Ref: &ref, Type: &formulaType})
 //
 // Example 5, set range array formula "A1:A2" for the cell "A3" on "Sheet1":
 //
-//    formulaType, ref := excelize.STCellFormulaTypeArray, "A3:A3"
-//    err := f.SetCellFormula("Sheet1", "A3", "=A1:A2",
-//           excelize.FormulaOpts{Ref: &ref, Type: &formulaType})
+//        formulaType, ref := excelize.STCellFormulaTypeArray, "A3:A3"
+//        err := f.SetCellFormula("Sheet1", "A3", "=A1:A2",
+//                   excelize.FormulaOpts{Ref: &ref, Type: &formulaType})
 //
 // Example 6, set shared formula "=A1+B1" for the cell "C1:C5"
 // on "Sheet1", "C1" is the master cell:
 //
-//    formulaType, ref := excelize.STCellFormulaTypeShared, "C1:C5"
-//    err := f.SetCellFormula("Sheet1", "C1", "=A1+B1",
-//        excelize.FormulaOpts{Ref: &ref, Type: &formulaType})
+//     formulaType, ref := excelize.STCellFormulaTypeShared, "C1:C5"
+//     err := f.SetCellFormula("Sheet1", "C1", "=A1+B1",
+//         excelize.FormulaOpts{Ref: &ref, Type: &formulaType})
 //
 // Example 7, set table formula "=SUM(Table1[[A]:[B]])" for the cell "C2"
 // on "Sheet1":
 //
-//    package main
-//
-//    import (
-//        "fmt"
+//     package main
 //
-//        "github.com/xuri/excelize/v2"
-//    )
+//     import (
+//         "fmt"
 //
-//    func main() {
-//        f := excelize.NewFile()
-//        for idx, row := range [][]interface{}{{"A", "B", "C"}, {1, 2}} {
-//            if err := f.SetSheetRow("Sheet1", fmt.Sprintf("A%d", idx+1), &row); err != nil {
-//             fmt.Println(err)
-//             return
-//            }
-//        }
-//        if err := f.AddTable("Sheet1", "A1", "C2",
-//            `{"table_name":"Table1","table_style":"TableStyleMedium2"}`); err != nil {
-//            fmt.Println(err)
-//            return
-//        }
-//        formulaType := excelize.STCellFormulaTypeDataTable
-//        if err := f.SetCellFormula("Sheet1", "C2", "=SUM(Table1[[A]:[B]])",
-//            excelize.FormulaOpts{Type: &formulaType}); err != nil {
-//            fmt.Println(err)
-//            return
-//        }
-//        if err := f.SaveAs("Book1.xlsx"); err != nil {
-//            fmt.Println(err)
-//        }
-//    }
+//         "github.com/xuri/excelize/v2"
+//     )
 //
+//     func main() {
+//         f := excelize.NewFile()
+//         for idx, row := range [][]interface{}{{"A", "B", "C"}, {1, 2}} {
+//             if err := f.SetSheetRow("Sheet1", fmt.Sprintf("A%d", idx+1), &row); err != nil {
+//                     fmt.Println(err)
+//                     return
+//             }
+//         }
+//         if err := f.AddTable("Sheet1", "A1", "C2",
+//             `{"table_name":"Table1","table_style":"TableStyleMedium2"}`); err != nil {
+//             fmt.Println(err)
+//             return
+//         }
+//         formulaType := excelize.STCellFormulaTypeDataTable
+//         if err := f.SetCellFormula("Sheet1", "C2", "=SUM(Table1[[A]:[B]])",
+//             excelize.FormulaOpts{Type: &formulaType}); err != nil {
+//             fmt.Println(err)
+//             return
+//         }
+//         if err := f.SaveAs("Book1.xlsx"); err != nil {
+//             fmt.Println(err)
+//         }
+//     }
 func (f *File) SetCellFormula(sheet, axis, formula string, opts ...FormulaOpts) error {
        ws, err := f.workSheetReader(sheet)
        if err != nil {
@@ -671,8 +669,7 @@ func (ws *xlsxWorksheet) countSharedFormula() (count int) {
 //
 // For example, get a hyperlink to a 'H6' cell on a worksheet named 'Sheet1':
 //
-//    link, target, err := f.GetCellHyperLink("Sheet1", "H6")
-//
+//     link, target, err := f.GetCellHyperLink("Sheet1", "H6")
 func (f *File) GetCellHyperLink(sheet, axis string) (bool, string, error) {
        // Check for correct cell name
        if _, _, err := SplitCellName(axis); err != nil {
@@ -714,27 +711,26 @@ type HyperlinkOpts struct {
 // the other functions such as `SetCellStyle` or `SetSheetRow`. The below is
 // example for external link.
 //
-//    display, tooltip := "https://github.com/xuri/excelize", "Excelize on GitHub"
-//    if err := f.SetCellHyperLink("Sheet1", "A3",
-//        "https://github.com/xuri/excelize", "External", excelize.HyperlinkOpts{
-//            Display: &display,
-//            Tooltip: &tooltip,
-//        }); err != nil {
-//        fmt.Println(err)
-//    }
-//    // Set underline and font color style for the cell.
-//    style, err := f.NewStyle(&excelize.Style{
-//        Font: &excelize.Font{Color: "#1265BE", Underline: "single"},
-//    })
-//    if err != nil {
-//        fmt.Println(err)
-//    }
-//    err = f.SetCellStyle("Sheet1", "A3", "A3", style)
+//     display, tooltip := "https://github.com/xuri/excelize", "Excelize on GitHub"
+//     if err := f.SetCellHyperLink("Sheet1", "A3",
+//         "https://github.com/xuri/excelize", "External", excelize.HyperlinkOpts{
+//             Display: &display,
+//             Tooltip: &tooltip,
+//         }); err != nil {
+//         fmt.Println(err)
+//     }
+//     // Set underline and font color style for the cell.
+//     style, err := f.NewStyle(&excelize.Style{
+//         Font: &excelize.Font{Color: "#1265BE", Underline: "single"},
+//     })
+//     if err != nil {
+//         fmt.Println(err)
+//     }
+//     err = f.SetCellStyle("Sheet1", "A3", "A3", style)
 //
 // This is another example for "Location":
 //
-//    err := f.SetCellHyperLink("Sheet1", "A3", "Sheet1!A40", "Location")
-//
+//     err := f.SetCellHyperLink("Sheet1", "A3", "Sheet1!A40", "Location")
 func (f *File) SetCellHyperLink(sheet, axis, link, linkType string, opts ...HyperlinkOpts) error {
        // Check for correct cell name
        if _, _, err := SplitCellName(axis); err != nil {
@@ -892,121 +888,120 @@ func newRpr(fnt *Font) *xlsxRPr {
 // worksheet. For example, set rich text on the A1 cell of the worksheet named
 // Sheet1:
 //
-//    package main
-//
-//    import (
-//        "fmt"
+//     package main
 //
-//        "github.com/xuri/excelize/v2"
-//    )
+//     import (
+//         "fmt"
 //
-//    func main() {
-//        f := excelize.NewFile()
-//        if err := f.SetRowHeight("Sheet1", 1, 35); err != nil {
-//            fmt.Println(err)
-//            return
-//        }
-//        if err := f.SetColWidth("Sheet1", "A", "A", 44); err != nil {
-//            fmt.Println(err)
-//            return
-//        }
-//        if err := f.SetCellRichText("Sheet1", "A1", []excelize.RichTextRun{
-//            {
-//                Text: "bold",
-//                Font: &excelize.Font{
-//                    Bold:   true,
-//                    Color:  "2354e8",
-//                    Family: "Times New Roman",
-//                },
-//            },
-//            {
-//                Text: " and ",
-//                Font: &excelize.Font{
-//                    Family: "Times New Roman",
-//                },
-//            },
-//            {
-//                Text: "italic ",
-//                Font: &excelize.Font{
-//                    Bold:   true,
-//                    Color:  "e83723",
-//                    Italic: true,
-//                    Family: "Times New Roman",
-//                },
-//            },
-//            {
-//                Text: "text with color and font-family,",
-//                Font: &excelize.Font{
-//                    Bold:   true,
-//                    Color:  "2354e8",
-//                    Family: "Times New Roman",
-//                },
-//            },
-//            {
-//                Text: "\r\nlarge text with ",
-//                Font: &excelize.Font{
-//                    Size:  14,
-//                    Color: "ad23e8",
-//                },
-//            },
-//            {
-//                Text: "strike",
-//                Font: &excelize.Font{
-//                    Color:  "e89923",
-//                    Strike: true,
-//                },
-//            },
-//            {
-//                Text: " superscript",
-//                Font: &excelize.Font{
-//                    Color:     "dbc21f",
-//                    VertAlign: "superscript",
-//                },
-//            },
-//            {
-//                Text: " and ",
-//                Font: &excelize.Font{
-//                    Size:      14,
-//                    Color:     "ad23e8",
-//                    VertAlign: "baseline",
-//                },
-//            },
-//            {
-//                Text: "underline",
-//                Font: &excelize.Font{
-//                    Color:     "23e833",
-//                    Underline: "single",
-//                },
-//            },
-//            {
-//                Text: " subscript.",
-//                Font: &excelize.Font{
-//                    Color:     "017505",
-//                    VertAlign: "subscript",
-//                },
-//            },
-//        }); err != nil {
-//            fmt.Println(err)
-//            return
-//        }
-//        style, err := f.NewStyle(&excelize.Style{
-//            Alignment: &excelize.Alignment{
-//                WrapText: true,
-//            },
-//        })
-//        if err != nil {
-//            fmt.Println(err)
-//            return
-//        }
-//        if err := f.SetCellStyle("Sheet1", "A1", "A1", style); err != nil {
-//            fmt.Println(err)
-//            return
-//        }
-//        if err := f.SaveAs("Book1.xlsx"); err != nil {
-//            fmt.Println(err)
-//        }
-//    }
+//         "github.com/xuri/excelize/v2"
+//     )
 //
+//     func main() {
+//         f := excelize.NewFile()
+//         if err := f.SetRowHeight("Sheet1", 1, 35); err != nil {
+//             fmt.Println(err)
+//             return
+//         }
+//         if err := f.SetColWidth("Sheet1", "A", "A", 44); err != nil {
+//             fmt.Println(err)
+//             return
+//         }
+//         if err := f.SetCellRichText("Sheet1", "A1", []excelize.RichTextRun{
+//             {
+//                 Text: "bold",
+//                 Font: &excelize.Font{
+//                     Bold:   true,
+//                     Color:  "2354e8",
+//                     Family: "Times New Roman",
+//                 },
+//             },
+//             {
+//                 Text: " and ",
+//                 Font: &excelize.Font{
+//                     Family: "Times New Roman",
+//                 },
+//             },
+//             {
+//                 Text: "italic ",
+//                 Font: &excelize.Font{
+//                     Bold:   true,
+//                     Color:  "e83723",
+//                     Italic: true,
+//                     Family: "Times New Roman",
+//                 },
+//             },
+//             {
+//                 Text: "text with color and font-family,",
+//                 Font: &excelize.Font{
+//                     Bold:   true,
+//                     Color:  "2354e8",
+//                     Family: "Times New Roman",
+//                 },
+//             },
+//             {
+//                 Text: "\r\nlarge text with ",
+//                 Font: &excelize.Font{
+//                     Size:  14,
+//                     Color: "ad23e8",
+//                 },
+//             },
+//             {
+//                 Text: "strike",
+//                 Font: &excelize.Font{
+//                     Color:  "e89923",
+//                     Strike: true,
+//                 },
+//             },
+//             {
+//                 Text: " superscript",
+//                 Font: &excelize.Font{
+//                     Color:     "dbc21f",
+//                     VertAlign: "superscript",
+//                 },
+//             },
+//             {
+//                 Text: " and ",
+//                 Font: &excelize.Font{
+//                     Size:      14,
+//                     Color:     "ad23e8",
+//                     VertAlign: "baseline",
+//                 },
+//             },
+//             {
+//                 Text: "underline",
+//                 Font: &excelize.Font{
+//                     Color:     "23e833",
+//                     Underline: "single",
+//                 },
+//             },
+//             {
+//                 Text: " subscript.",
+//                 Font: &excelize.Font{
+//                     Color:     "017505",
+//                     VertAlign: "subscript",
+//                 },
+//             },
+//         }); err != nil {
+//             fmt.Println(err)
+//             return
+//         }
+//         style, err := f.NewStyle(&excelize.Style{
+//             Alignment: &excelize.Alignment{
+//                 WrapText: true,
+//             },
+//         })
+//         if err != nil {
+//             fmt.Println(err)
+//             return
+//         }
+//         if err := f.SetCellStyle("Sheet1", "A1", "A1", style); err != nil {
+//             fmt.Println(err)
+//             return
+//         }
+//         if err := f.SaveAs("Book1.xlsx"); err != nil {
+//             fmt.Println(err)
+//         }
+//     }
 func (f *File) SetCellRichText(sheet, cell string, runs []RichTextRun) error {
        ws, err := f.workSheetReader(sheet)
        if err != nil {
@@ -1055,8 +1050,7 @@ func (f *File) SetCellRichText(sheet, cell string, runs []RichTextRun) error {
 // coordinate and a pointer to array type 'slice'. For example, writes an
 // array to row 6 start with the cell B6 on Sheet1:
 //
-//     err := f.SetSheetRow("Sheet1", "B6", &[]interface{}{"1", nil, 2})
-//
+//     err := f.SetSheetRow("Sheet1", "B6", &[]interface{}{"1", nil, 2})
 func (f *File) SetSheetRow(sheet, axis string, slice interface{}) error {
        col, row, err := CellNameToCoordinates(axis)
        if err != nil {
index 7dcbe19..e18545d 100644 (file)
--- a/chart.go
+++ b/chart.go
@@ -500,152 +500,152 @@ func parseFormatChartSet(formatSet string) (*formatChart, error) {
 // properties set. For example, create 3D clustered column chart with data
 // Sheet1!$E$1:$L$15:
 //
-//    package main
+//     package main
 //
-//    import (
-//        "fmt"
+//     import (
+//         "fmt"
 //
-//        "github.com/xuri/excelize/v2"
-//    )
+//         "github.com/xuri/excelize/v2"
+//     )
 //
-//    func main() {
-//        categories := map[string]string{
-//            "A2": "Small", "A3": "Normal", "A4": "Large",
-//            "B1": "Apple", "C1": "Orange", "D1": "Pear"}
-//        values := map[string]int{
-//            "B2": 2, "C2": 3, "D2": 3, "B3": 5, "C3": 2, "D3": 4, "B4": 6, "C4": 7, "D4": 8}
-//        f := excelize.NewFile()
-//        for k, v := range categories {
-//            f.SetCellValue("Sheet1", k, v)
-//        }
-//        for k, v := range values {
-//            f.SetCellValue("Sheet1", k, v)
-//        }
-//        if err := f.AddChart("Sheet1", "E1", `{
-//            "type": "col3DClustered",
-//            "series": [
-//            {
-//                "name": "Sheet1!$A$2",
-//                "categories": "Sheet1!$B$1:$D$1",
-//                "values": "Sheet1!$B$2:$D$2"
-//            },
-//            {
-//                "name": "Sheet1!$A$3",
-//                "categories": "Sheet1!$B$1:$D$1",
-//                "values": "Sheet1!$B$3:$D$3"
-//            },
-//            {
-//                "name": "Sheet1!$A$4",
-//                "categories": "Sheet1!$B$1:$D$1",
-//                "values": "Sheet1!$B$4:$D$4"
-//            }],
-//            "title":
-//            {
-//                "name": "Fruit 3D Clustered Column Chart"
-//            },
-//            "legend":
-//            {
-//                "none": false,
-//                "position": "bottom",
-//                "show_legend_key": false
-//            },
-//            "plotarea":
-//            {
-//                "show_bubble_size": true,
-//                "show_cat_name": false,
-//                "show_leader_lines": false,
-//                "show_percent": true,
-//                "show_series_name": true,
-//                "show_val": true
-//            },
-//            "show_blanks_as": "zero",
-//            "x_axis":
-//            {
-//                "reverse_order": true
-//            },
-//            "y_axis":
-//            {
-//                "maximum": 7.5,
-//                "minimum": 0.5
-//            }
-//        }`); err != nil {
-//            fmt.Println(err)
-//            return
-//        }
-//        // Save spreadsheet by the given path.
-//        if err := f.SaveAs("Book1.xlsx"); err != nil {
-//            fmt.Println(err)
-//        }
-//    }
+//     func main() {
+//         categories := map[string]string{
+//             "A2": "Small", "A3": "Normal", "A4": "Large",
+//             "B1": "Apple", "C1": "Orange", "D1": "Pear"}
+//         values := map[string]int{
+//             "B2": 2, "C2": 3, "D2": 3, "B3": 5, "C3": 2, "D3": 4, "B4": 6, "C4": 7, "D4": 8}
+//         f := excelize.NewFile()
+//         for k, v := range categories {
+//             f.SetCellValue("Sheet1", k, v)
+//         }
+//         for k, v := range values {
+//             f.SetCellValue("Sheet1", k, v)
+//         }
+//         if err := f.AddChart("Sheet1", "E1", `{
+//             "type": "col3DClustered",
+//             "series": [
+//             {
+//                 "name": "Sheet1!$A$2",
+//                 "categories": "Sheet1!$B$1:$D$1",
+//                 "values": "Sheet1!$B$2:$D$2"
+//             },
+//             {
+//                 "name": "Sheet1!$A$3",
+//                 "categories": "Sheet1!$B$1:$D$1",
+//                 "values": "Sheet1!$B$3:$D$3"
+//             },
+//             {
+//                 "name": "Sheet1!$A$4",
+//                 "categories": "Sheet1!$B$1:$D$1",
+//                 "values": "Sheet1!$B$4:$D$4"
+//             }],
+//             "title":
+//             {
+//                 "name": "Fruit 3D Clustered Column Chart"
+//             },
+//             "legend":
+//             {
+//                 "none": false,
+//                 "position": "bottom",
+//                 "show_legend_key": false
+//             },
+//             "plotarea":
+//             {
+//                 "show_bubble_size": true,
+//                 "show_cat_name": false,
+//                 "show_leader_lines": false,
+//                 "show_percent": true,
+//                 "show_series_name": true,
+//                 "show_val": true
+//             },
+//             "show_blanks_as": "zero",
+//             "x_axis":
+//             {
+//                 "reverse_order": true
+//             },
+//             "y_axis":
+//             {
+//                 "maximum": 7.5,
+//                 "minimum": 0.5
+//             }
+//         }`); err != nil {
+//             fmt.Println(err)
+//             return
+//         }
+//         // Save spreadsheet by the given path.
+//         if err := f.SaveAs("Book1.xlsx"); err != nil {
+//             fmt.Println(err)
+//         }
+//     }
 //
 // The following shows the type of chart supported by excelize:
 //
-//     Type                        | Chart
-//    -----------------------------+------------------------------
-//     area                        | 2D area chart
-//     areaStacked                 | 2D stacked area chart
-//     areaPercentStacked          | 2D 100% stacked area chart
-//     area3D                      | 3D area chart
-//     area3DStacked               | 3D stacked area chart
-//     area3DPercentStacked        | 3D 100% stacked area chart
-//     bar                         | 2D clustered bar chart
-//     barStacked                  | 2D stacked bar chart
-//     barPercentStacked           | 2D 100% stacked bar chart
-//     bar3DClustered              | 3D clustered bar chart
-//     bar3DStacked                | 3D stacked bar chart
-//     bar3DPercentStacked         | 3D 100% stacked bar chart
-//     bar3DConeClustered          | 3D cone clustered bar chart
-//     bar3DConeStacked            | 3D cone stacked bar chart
-//     bar3DConePercentStacked     | 3D cone percent bar chart
-//     bar3DPyramidClustered       | 3D pyramid clustered bar chart
-//     bar3DPyramidStacked         | 3D pyramid stacked bar chart
-//     bar3DPyramidPercentStacked  | 3D pyramid percent stacked bar chart
-//     bar3DCylinderClustered      | 3D cylinder clustered bar chart
-//     bar3DCylinderStacked        | 3D cylinder stacked bar chart
-//     bar3DCylinderPercentStacked | 3D cylinder percent stacked bar chart
-//     col                         | 2D clustered column chart
-//     colStacked                  | 2D stacked column chart
-//     colPercentStacked           | 2D 100% stacked column chart
-//     col3DClustered              | 3D clustered column chart
-//     col3D                       | 3D column chart
-//     col3DStacked                | 3D stacked column chart
-//     col3DPercentStacked         | 3D 100% stacked column chart
-//     col3DCone                   | 3D cone column chart
-//     col3DConeClustered          | 3D cone clustered column chart
-//     col3DConeStacked            | 3D cone stacked column chart
-//     col3DConePercentStacked     | 3D cone percent stacked column chart
-//     col3DPyramid                | 3D pyramid column chart
-//     col3DPyramidClustered       | 3D pyramid clustered column chart
-//     col3DPyramidStacked         | 3D pyramid stacked column chart
-//     col3DPyramidPercentStacked  | 3D pyramid percent stacked column chart
-//     col3DCylinder               | 3D cylinder column chart
-//     col3DCylinderClustered      | 3D cylinder clustered column chart
-//     col3DCylinderStacked        | 3D cylinder stacked column chart
-//     col3DCylinderPercentStacked | 3D cylinder percent stacked column chart
-//     doughnut                    | doughnut chart
-//     line                        | line chart
-//     pie                         | pie chart
-//     pie3D                       | 3D pie chart
-//     pieOfPie                    | pie of pie chart
-//     barOfPie                    | bar of pie chart
-//     radar                       | radar chart
-//     scatter                     | scatter chart
-//     surface3D                   | 3D surface chart
-//     wireframeSurface3D          | 3D wireframe surface chart
-//     contour                     | contour chart
-//     wireframeContour            | wireframe contour chart
-//     bubble                      | bubble chart
-//     bubble3D                    | 3D bubble chart
+//      Type                        | Chart
+//     -----------------------------+------------------------------
+//      area                        | 2D area chart
+//      areaStacked                 | 2D stacked area chart
+//      areaPercentStacked          | 2D 100% stacked area chart
+//      area3D                      | 3D area chart
+//      area3DStacked               | 3D stacked area chart
+//      area3DPercentStacked        | 3D 100% stacked area chart
+//      bar                         | 2D clustered bar chart
+//      barStacked                  | 2D stacked bar chart
+//      barPercentStacked           | 2D 100% stacked bar chart
+//      bar3DClustered              | 3D clustered bar chart
+//      bar3DStacked                | 3D stacked bar chart
+//      bar3DPercentStacked         | 3D 100% stacked bar chart
+//      bar3DConeClustered          | 3D cone clustered bar chart
+//      bar3DConeStacked            | 3D cone stacked bar chart
+//      bar3DConePercentStacked     | 3D cone percent bar chart
+//      bar3DPyramidClustered       | 3D pyramid clustered bar chart
+//      bar3DPyramidStacked         | 3D pyramid stacked bar chart
+//      bar3DPyramidPercentStacked  | 3D pyramid percent stacked bar chart
+//      bar3DCylinderClustered      | 3D cylinder clustered bar chart
+//      bar3DCylinderStacked        | 3D cylinder stacked bar chart
+//      bar3DCylinderPercentStacked | 3D cylinder percent stacked bar chart
+//      col                         | 2D clustered column chart
+//      colStacked                  | 2D stacked column chart
+//      colPercentStacked           | 2D 100% stacked column chart
+//      col3DClustered              | 3D clustered column chart
+//      col3D                       | 3D column chart
+//      col3DStacked                | 3D stacked column chart
+//      col3DPercentStacked         | 3D 100% stacked column chart
+//      col3DCone                   | 3D cone column chart
+//      col3DConeClustered          | 3D cone clustered column chart
+//      col3DConeStacked            | 3D cone stacked column chart
+//      col3DConePercentStacked     | 3D cone percent stacked column chart
+//      col3DPyramid                | 3D pyramid column chart
+//      col3DPyramidClustered       | 3D pyramid clustered column chart
+//      col3DPyramidStacked         | 3D pyramid stacked column chart
+//      col3DPyramidPercentStacked  | 3D pyramid percent stacked column chart
+//      col3DCylinder               | 3D cylinder column chart
+//      col3DCylinderClustered      | 3D cylinder clustered column chart
+//      col3DCylinderStacked        | 3D cylinder stacked column chart
+//      col3DCylinderPercentStacked | 3D cylinder percent stacked column chart
+//      doughnut                    | doughnut chart
+//      line                        | line chart
+//      pie                         | pie chart
+//      pie3D                       | 3D pie chart
+//      pieOfPie                    | pie of pie chart
+//      barOfPie                    | bar of pie chart
+//      radar                       | radar chart
+//      scatter                     | scatter chart
+//      surface3D                   | 3D surface chart
+//      wireframeSurface3D          | 3D wireframe surface chart
+//      contour                     | contour chart
+//      wireframeContour            | wireframe contour chart
+//      bubble                      | bubble chart
+//      bubble3D                    | 3D bubble chart
 //
 // In Excel a chart series is a collection of information that defines which data is plotted such as values, axis labels and formatting.
 //
 // The series options that can be set are:
 //
-//    name
-//    categories
-//    values
-//    line
-//    marker
+//     name
+//     categories
+//     values
+//     line
+//     marker
 //
 // name: Set the name for the series. The name is displayed in the chart legend and in the formula bar. The name property is optional and if it isn't supplied it will default to Series 1..n. The name can also be a formula such as Sheet1!$A$1
 //
@@ -657,48 +657,48 @@ func parseFormatChartSet(formatSet string) (*formatChart, error) {
 //
 // marker: This sets the marker of the line chart and scatter chart. The range of optional field 'size' is 2-72 (default value is 5). The enumeration value of optional field 'symbol' are (default value is 'auto'):
 //
-//    circle
-//    dash
-//    diamond
-//    dot
-//    none
-//    picture
-//    plus
-//    square
-//    star
-//    triangle
-//    x
-//    auto
+//     circle
+//     dash
+//     diamond
+//     dot
+//     none
+//     picture
+//     plus
+//     square
+//     star
+//     triangle
+//     x
+//     auto
 //
 // Set properties of the chart legend. The options that can be set are:
 //
-//    none
-//    position
-//    show_legend_key
+//     none
+//     position
+//     show_legend_key
 //
 // none: Specified if show the legend without overlapping the chart. The default value is 'false'.
 //
 // position: Set the position of the chart legend. The default legend position is right. This parameter only takes effect when 'none' is false. The available positions are:
 //
-//    top
-//    bottom
-//    left
-//    right
-//    top_right
+//     top
+//     bottom
+//     left
+//     right
+//     top_right
 //
 // show_legend_key: Set the legend keys shall be shown in data labels. The default value is false.
 //
 // Set properties of the chart title. The properties that can be set are:
 //
-//    title
+//     title
 //
 // name: Set the name (title) for the chart. The name is displayed above the chart. The name can also be a formula such as Sheet1!$A$1 or a list with a sheetname. The name property is optional. The default is to have no chart title.
 //
 // Specifies how blank cells are plotted on the chart by show_blanks_as. The default value is gap. The options that can be set are:
 //
-//    gap
-//    span
-//    zero
+//     gap
+//     span
+//     zero
 //
 // gap: Specifies that blank values shall be left as a gap.
 //
@@ -712,12 +712,12 @@ func parseFormatChartSet(formatSet string) (*formatChart, error) {
 //
 // Set the position of the chart plot area by plotarea. The properties that can be set are:
 //
-//    show_bubble_size
-//    show_cat_name
-//    show_leader_lines
-//    show_percent
-//    show_series_name
-//    show_val
+//     show_bubble_size
+//     show_cat_name
+//     show_leader_lines
+//     show_percent
+//     show_series_name
+//     show_val
 //
 // show_bubble_size: Specifies the bubble size shall be shown in a data label. The show_bubble_size property is optional. The default value is false.
 //
@@ -733,23 +733,23 @@ func parseFormatChartSet(formatSet string) (*formatChart, error) {
 //
 // Set the primary horizontal and vertical axis options by x_axis and y_axis. The properties of x_axis that can be set are:
 //
-//    none
-//    major_grid_lines
-//    minor_grid_lines
-//    tick_label_skip
-//    reverse_order
-//    maximum
-//    minimum
+//     none
+//     major_grid_lines
+//     minor_grid_lines
+//     tick_label_skip
+//     reverse_order
+//     maximum
+//     minimum
 //
 // The properties of y_axis that can be set are:
 //
-//    none
-//    major_grid_lines
-//    minor_grid_lines
-//    major_unit
-//    reverse_order
-//    maximum
-//    minimum
+//     none
+//     major_grid_lines
+//     minor_grid_lines
+//     major_unit
+//     reverse_order
+//     maximum
+//     minimum
 //
 // none: Disable axes.
 //
@@ -773,115 +773,114 @@ func parseFormatChartSet(formatSet string) (*formatChart, error) {
 // in a single chart. For example, create a clustered column - line chart with
 // data Sheet1!$E$1:$L$15:
 //
-//    package main
+//     package main
 //
-//    import (
-//        "fmt"
+//     import (
+//         "fmt"
 //
-//        "github.com/xuri/excelize/v2"
-//    )
-//
-//    func main() {
-//        categories := map[string]string{
-//            "A2": "Small", "A3": "Normal", "A4": "Large",
-//            "B1": "Apple", "C1": "Orange", "D1": "Pear"}
-//        values := map[string]int{
-//            "B2": 2, "C2": 3, "D2": 3, "B3": 5, "C3": 2, "D3": 4, "B4": 6, "C4": 7, "D4": 8}
-//        f := excelize.NewFile()
-//        for k, v := range categories {
-//            f.SetCellValue("Sheet1", k, v)
-//        }
-//        for k, v := range values {
-//            f.SetCellValue("Sheet1", k, v)
-//        }
-//        if err := f.AddChart("Sheet1", "E1", `{
-//            "type": "col",
-//            "series": [
-//            {
-//                "name": "Sheet1!$A$2",
-//                "categories": "",
-//                "values": "Sheet1!$B$2:$D$2"
-//            },
-//            {
-//                "name": "Sheet1!$A$3",
-//                "categories": "Sheet1!$B$1:$D$1",
-//                "values": "Sheet1!$B$3:$D$3"
-//            }],
-//            "format":
-//            {
-//                "x_scale": 1.0,
-//                "y_scale": 1.0,
-//                "x_offset": 15,
-//                "y_offset": 10,
-//                "print_obj": true,
-//                "lock_aspect_ratio": false,
-//                "locked": false
-//            },
-//            "title":
-//            {
-//                "name": "Clustered Column - Line Chart"
-//            },
-//            "legend":
-//            {
-//                "position": "left",
-//                "show_legend_key": false
-//            },
-//            "plotarea":
-//            {
-//                "show_bubble_size": true,
-//                "show_cat_name": false,
-//                "show_leader_lines": false,
-//                "show_percent": true,
-//                "show_series_name": true,
-//                "show_val": true
-//            }
-//        }`, `{
-//            "type": "line",
-//            "series": [
-//            {
-//                "name": "Sheet1!$A$4",
-//                "categories": "Sheet1!$B$1:$D$1",
-//                "values": "Sheet1!$B$4:$D$4",
-//                "marker":
-//                {
-//                    "symbol": "none",
-//                    "size": 10
-//                }
-//            }],
-//            "format":
-//            {
-//                "x_scale": 1,
-//                "y_scale": 1,
-//                "x_offset": 15,
-//                "y_offset": 10,
-//                "print_obj": true,
-//                "lock_aspect_ratio": false,
-//                "locked": false
-//            },
-//            "legend":
-//            {
-//                "position": "right",
-//                "show_legend_key": false
-//            },
-//            "plotarea":
-//            {
-//                "show_bubble_size": true,
-//                "show_cat_name": false,
-//                "show_leader_lines": false,
-//                "show_percent": true,
-//                "show_series_name": true,
-//                "show_val": true
-//            }
-//        }`); err != nil {
-//            fmt.Println(err)
-//            return
-//        }
-//        // Save spreadsheet file by the given path.
-//        if err := f.SaveAs("Book1.xlsx"); err != nil {
-//            fmt.Println(err)
-//        }
-//    }
+//         "github.com/xuri/excelize/v2"
+//     )
 //
+//     func main() {
+//         categories := map[string]string{
+//             "A2": "Small", "A3": "Normal", "A4": "Large",
+//             "B1": "Apple", "C1": "Orange", "D1": "Pear"}
+//         values := map[string]int{
+//             "B2": 2, "C2": 3, "D2": 3, "B3": 5, "C3": 2, "D3": 4, "B4": 6, "C4": 7, "D4": 8}
+//         f := excelize.NewFile()
+//         for k, v := range categories {
+//             f.SetCellValue("Sheet1", k, v)
+//         }
+//         for k, v := range values {
+//             f.SetCellValue("Sheet1", k, v)
+//         }
+//         if err := f.AddChart("Sheet1", "E1", `{
+//             "type": "col",
+//             "series": [
+//             {
+//                 "name": "Sheet1!$A$2",
+//                 "categories": "",
+//                 "values": "Sheet1!$B$2:$D$2"
+//             },
+//             {
+//                 "name": "Sheet1!$A$3",
+//                 "categories": "Sheet1!$B$1:$D$1",
+//                 "values": "Sheet1!$B$3:$D$3"
+//             }],
+//             "format":
+//             {
+//                 "x_scale": 1.0,
+//                 "y_scale": 1.0,
+//                 "x_offset": 15,
+//                 "y_offset": 10,
+//                 "print_obj": true,
+//                 "lock_aspect_ratio": false,
+//                 "locked": false
+//             },
+//             "title":
+//             {
+//                 "name": "Clustered Column - Line Chart"
+//             },
+//             "legend":
+//             {
+//                 "position": "left",
+//                 "show_legend_key": false
+//             },
+//             "plotarea":
+//             {
+//                 "show_bubble_size": true,
+//                 "show_cat_name": false,
+//                 "show_leader_lines": false,
+//                 "show_percent": true,
+//                 "show_series_name": true,
+//                 "show_val": true
+//             }
+//         }`, `{
+//             "type": "line",
+//             "series": [
+//             {
+//                 "name": "Sheet1!$A$4",
+//                 "categories": "Sheet1!$B$1:$D$1",
+//                 "values": "Sheet1!$B$4:$D$4",
+//                 "marker":
+//                 {
+//                     "symbol": "none",
+//                     "size": 10
+//                 }
+//             }],
+//             "format":
+//             {
+//                 "x_scale": 1,
+//                 "y_scale": 1,
+//                 "x_offset": 15,
+//                 "y_offset": 10,
+//                 "print_obj": true,
+//                 "lock_aspect_ratio": false,
+//                 "locked": false
+//             },
+//             "legend":
+//             {
+//                 "position": "right",
+//                 "show_legend_key": false
+//             },
+//             "plotarea":
+//             {
+//                 "show_bubble_size": true,
+//                 "show_cat_name": false,
+//                 "show_leader_lines": false,
+//                 "show_percent": true,
+//                 "show_series_name": true,
+//                 "show_val": true
+//             }
+//         }`); err != nil {
+//             fmt.Println(err)
+//             return
+//         }
+//         // Save spreadsheet file by the given path.
+//         if err := f.SaveAs("Book1.xlsx"); err != nil {
+//             fmt.Println(err)
+//         }
+//     }
 func (f *File) AddChart(sheet, cell, format string, combo ...string) error {
        // Read sheet data.
        ws, err := f.workSheetReader(sheet)
diff --git a/col.go b/col.go
index 95c7961..248e22c 100644 (file)
--- a/col.go
+++ b/col.go
@@ -50,18 +50,17 @@ type Cols struct {
 // worksheet named
 // 'Sheet1':
 //
-//    cols, err := f.GetCols("Sheet1")
-//    if err != nil {
-//        fmt.Println(err)
-//        return
-//    }
-//    for _, col := range cols {
-//        for _, rowCell := range col {
-//            fmt.Print(rowCell, "\t")
-//        }
-//        fmt.Println()
-//    }
-//
+//     cols, err := f.GetCols("Sheet1")
+//     if err != nil {
+//         fmt.Println(err)
+//         return
+//     }
+//     for _, col := range cols {
+//         for _, rowCell := range col {
+//             fmt.Print(rowCell, "\t")
+//         }
+//         fmt.Println()
+//     }
 func (f *File) GetCols(sheet string, opts ...Options) ([][]string, error) {
        cols, err := f.Cols(sheet)
        if err != nil {
@@ -187,22 +186,21 @@ func columnXMLHandler(colIterator *columnXMLIterator, xmlElement *xml.StartEleme
 // Cols returns a columns iterator, used for streaming reading data for a
 // worksheet with a large data. For example:
 //
-//    cols, err := f.Cols("Sheet1")
-//    if err != nil {
-//        fmt.Println(err)
-//        return
-//    }
-//    for cols.Next() {
-//        col, err := cols.Rows()
-//        if err != nil {
-//            fmt.Println(err)
-//        }
-//        for _, rowCell := range col {
-//            fmt.Print(rowCell, "\t")
-//        }
-//        fmt.Println()
-//    }
-//
+//     cols, err := f.Cols("Sheet1")
+//     if err != nil {
+//         fmt.Println(err)
+//         return
+//     }
+//     for cols.Next() {
+//         col, err := cols.Rows()
+//         if err != nil {
+//             fmt.Println(err)
+//         }
+//         for _, rowCell := range col {
+//             fmt.Print(rowCell, "\t")
+//         }
+//         fmt.Println()
+//     }
 func (f *File) Cols(sheet string) (*Cols, error) {
        name, ok := f.getSheetXMLPath(sheet)
        if !ok {
@@ -244,8 +242,7 @@ func (f *File) Cols(sheet string) (*Cols, error) {
 // worksheet name and column name. For example, get visible state of column D
 // in Sheet1:
 //
-//    visible, err := f.GetColVisible("Sheet1", "D")
-//
+//     visible, err := f.GetColVisible("Sheet1", "D")
 func (f *File) GetColVisible(sheet, col string) (bool, error) {
        colNum, err := ColumnNameToNumber(col)
        if err != nil {
@@ -273,12 +270,11 @@ func (f *File) GetColVisible(sheet, col string) (bool, error) {
 //
 // For example hide column D on Sheet1:
 //
-//    err := f.SetColVisible("Sheet1", "D", false)
+//     err := f.SetColVisible("Sheet1", "D", false)
 //
 // Hide the columns from D to F (included):
 //
-//    err := f.SetColVisible("Sheet1", "D:F", false)
-//
+//     err := f.SetColVisible("Sheet1", "D:F", false)
 func (f *File) SetColVisible(sheet, columns string, visible bool) error {
        start, end, err := f.parseColRange(columns)
        if err != nil {
@@ -318,8 +314,7 @@ func (f *File) SetColVisible(sheet, columns string, visible bool) error {
 // column by given worksheet name and column name. For example, get outline
 // level of column D in Sheet1:
 //
-//    level, err := f.GetColOutlineLevel("Sheet1", "D")
-//
+//     level, err := f.GetColOutlineLevel("Sheet1", "D")
 func (f *File) GetColOutlineLevel(sheet, col string) (uint8, error) {
        level := uint8(0)
        colNum, err := ColumnNameToNumber(col)
@@ -365,8 +360,7 @@ func (f *File) parseColRange(columns string) (start, end int, err error) {
 // column by given worksheet name and column name. The value of parameter
 // 'level' is 1-7. For example, set outline level of column D in Sheet1 to 2:
 //
-//    err := f.SetColOutlineLevel("Sheet1", "D", 2)
-//
+//     err := f.SetColOutlineLevel("Sheet1", "D", 2)
 func (f *File) SetColOutlineLevel(sheet, col string, level uint8) error {
        if level > 7 || level < 1 {
                return ErrOutlineLevel
@@ -411,12 +405,11 @@ func (f *File) SetColOutlineLevel(sheet, col string, level uint8) error {
 //
 // For example set style of column H on Sheet1:
 //
-//    err = f.SetColStyle("Sheet1", "H", style)
+//     err = f.SetColStyle("Sheet1", "H", style)
 //
 // Set style of columns C:F on Sheet1:
 //
-//    err = f.SetColStyle("Sheet1", "C:F", style)
-//
+//     err = f.SetColStyle("Sheet1", "C:F", style)
 func (f *File) SetColStyle(sheet, columns string, styleID int) error {
        start, end, err := f.parseColRange(columns)
        if err != nil {
@@ -457,9 +450,8 @@ func (f *File) SetColStyle(sheet, columns string, styleID int) error {
 // SetColWidth provides a function to set the width of a single column or
 // multiple columns. For example:
 //
-//    f := excelize.NewFile()
-//    err := f.SetColWidth("Sheet1", "A", "H", 20)
-//
+//     f := excelize.NewFile()
+//     err := f.SetColWidth("Sheet1", "A", "H", 20)
 func (f *File) SetColWidth(sheet, startCol, endCol string, width float64) error {
        min, err := ColumnNameToNumber(startCol)
        if err != nil {
@@ -538,25 +530,25 @@ func flatCols(col xlsxCol, cols []xlsxCol, replacer func(fc, c xlsxCol) xlsxCol)
 // positionObjectPixels calculate the vertices that define the position of a
 // graphical object within the worksheet in pixels.
 //
-//          +------------+------------+
-//          |     A      |      B     |
-//    +-----+------------+------------+
-//    |     |(x1,y1)     |            |
-//    |  1  |(A1)._______|______      |
-//    |     |    |              |     |
-//    |     |    |              |     |
-//    +-----+----|    OBJECT    |-----+
-//    |     |    |              |     |
-//    |  2  |    |______________.     |
-//    |     |            |        (B2)|
-//    |     |            |     (x2,y2)|
-//    +-----+------------+------------+
+//           +------------+------------+
+//           |     A      |      B     |
+//     +-----+------------+------------+
+//     |     |(x1,y1)     |            |
+//     |  1  |(A1)._______|______      |
+//     |     |    |              |     |
+//     |     |    |              |     |
+//     +-----+----|    OBJECT    |-----+
+//     |     |    |              |     |
+//     |  2  |    |______________.     |
+//     |     |            |        (B2)|
+//     |     |            |     (x2,y2)|
+//     +-----+------------+------------+
 //
 // Example of an object that covers some area from cell A1 to B2.
 //
 // Based on the width and height of the object we need to calculate 8 vars:
 //
-//    colStart, rowStart, colEnd, rowEnd, x1, y1, x2, y2.
+//     colStart, rowStart, colEnd, rowEnd, x1, y1, x2, y2.
 //
 // We also calculate the absolute x and y position of the top left vertex of
 // the object. This is required for images.
@@ -569,21 +561,20 @@ func flatCols(col xlsxCol, cols []xlsxCol, replacer func(fc, c xlsxCol) xlsxCol)
 // subtracting the width and height of the object from the width and
 // height of the underlying cells.
 //
-//    colStart        # Col containing upper left corner of object.
-//    x1              # Distance to left side of object.
+//     colStart        # Col containing upper left corner of object.
+//     x1              # Distance to left side of object.
 //
-//    rowStart        # Row containing top left corner of object.
-//    y1              # Distance to top of object.
+//     rowStart        # Row containing top left corner of object.
+//     y1              # Distance to top of object.
 //
-//    colEnd          # Col containing lower right corner of object.
-//    x2              # Distance to right side of object.
+//     colEnd          # Col containing lower right corner of object.
+//     x2              # Distance to right side of object.
 //
-//    rowEnd          # Row containing bottom right corner of object.
-//    y2              # Distance to bottom of object.
-//
-//    width           # Width of object frame.
-//    height          # Height of object frame.
+//     rowEnd          # Row containing bottom right corner of object.
+//     y2              # Distance to bottom of object.
 //
+//     width           # Width of object frame.
+//     height          # Height of object frame.
 func (f *File) positionObjectPixels(sheet string, col, row, x1, y1, width, height int) (int, int, int, int, int, int) {
        // Adjust start column for offsets that are greater than the col width.
        for x1 >= f.getColWidth(sheet, col) {
@@ -669,8 +660,7 @@ func (f *File) GetColWidth(sheet, col string) (float64, error) {
 // InsertCol provides a function to insert a new column before given column
 // index. For example, create a new column before column C in Sheet1:
 //
-//    err := f.InsertCol("Sheet1", "C")
-//
+//     err := f.InsertCol("Sheet1", "C")
 func (f *File) InsertCol(sheet, col string) error {
        num, err := ColumnNameToNumber(col)
        if err != nil {
@@ -682,7 +672,7 @@ func (f *File) InsertCol(sheet, col string) error {
 // RemoveCol provides a function to remove single column by given worksheet
 // name and column index. For example, remove column C in Sheet1:
 //
-//    err := f.RemoveCol("Sheet1", "C")
+//     err := f.RemoveCol("Sheet1", "C")
 //
 // Use this method with caution, which will affect changes in references such
 // as formulas, charts, and so on. If there is any referenced value of the
index 03b1215..0794986 100644 (file)
@@ -92,8 +92,7 @@ func (f *File) getSheetComments(sheetFile string) string {
 // author length is 255 and the max text length is 32512. For example, add a
 // comment in Sheet1!$A$30:
 //
-//    err := f.AddComment("Sheet1", "A30", `{"author":"Excelize: ","text":"This is a comment."}`)
-//
+//     err := f.AddComment("Sheet1", "A30", `{"author":"Excelize: ","text":"This is a comment."}`)
 func (f *File) AddComment(sheet, cell, format string) error {
        formatSet, err := parseFormatCommentsSet(format)
        if err != nil {
index b00ccdf..a5670ac 100644 (file)
--- a/crypt.go
+++ b/crypt.go
@@ -1175,10 +1175,9 @@ func (c *cfb) writeSAT(MSATBlocks, SATBlocks, SSATBlocks, directoryBlocks, fileB
 // Writer provides a function to create compound file with given info stream
 // and package stream.
 //
-//    MSAT - The master sector allocation table
-//    SSAT - The short sector allocation table
-//    SAT  - The sector allocation table
-//
+//     MSAT - The master sector allocation table
+//     SSAT - The short sector allocation table
+//     SAT  - The sector allocation table
 func (c *cfb) Writer(encryptionInfoBuffer, encryptedPackage []byte) []byte {
        var (
                storage                                 cfb
index 1b06b6a..0cad1b8 100644 (file)
@@ -166,11 +166,10 @@ func (dd *DataValidation) SetRange(f1, f2 interface{}, t DataValidationType, o D
 // Sheet1!A7:B8 with validation criteria source Sheet1!E1:E3 settings, create
 // in-cell dropdown by allowing list source:
 //
-//     dvRange := excelize.NewDataValidation(true)
-//     dvRange.Sqref = "A7:B8"
-//     dvRange.SetSqrefDropList("$E$1:$E$3")
-//     f.AddDataValidation("Sheet1", dvRange)
-//
+//     dvRange := excelize.NewDataValidation(true)
+//     dvRange.Sqref = "A7:B8"
+//     dvRange.SetSqrefDropList("$E$1:$E$3")
+//     f.AddDataValidation("Sheet1", dvRange)
 func (dd *DataValidation) SetSqrefDropList(sqref string) {
        dd.Formula1 = fmt.Sprintf("<formula1>%s</formula1>", sqref)
        dd.Type = convDataValidationType(typeList)
@@ -225,29 +224,28 @@ func convDataValidationOperator(o DataValidationOperator) string {
 // settings, show error alert after invalid data is entered with "Stop" style
 // and custom title "error body":
 //
-//     dvRange := excelize.NewDataValidation(true)
-//     dvRange.Sqref = "A1:B2"
-//     dvRange.SetRange(10, 20, excelize.DataValidationTypeWhole, excelize.DataValidationOperatorBetween)
-//     dvRange.SetError(excelize.DataValidationErrorStyleStop, "error title", "error body")
-//     err := f.AddDataValidation("Sheet1", dvRange)
+//     dvRange := excelize.NewDataValidation(true)
+//     dvRange.Sqref = "A1:B2"
+//     dvRange.SetRange(10, 20, excelize.DataValidationTypeWhole, excelize.DataValidationOperatorBetween)
+//     dvRange.SetError(excelize.DataValidationErrorStyleStop, "error title", "error body")
+//     err := f.AddDataValidation("Sheet1", dvRange)
 //
 // Example 2, set data validation on Sheet1!A3:B4 with validation criteria
 // settings, and show input message when cell is selected:
 //
-//     dvRange = excelize.NewDataValidation(true)
-//     dvRange.Sqref = "A3:B4"
-//     dvRange.SetRange(10, 20, excelize.DataValidationTypeWhole, excelize.DataValidationOperatorGreaterThan)
-//     dvRange.SetInput("input title", "input body")
-//     err = f.AddDataValidation("Sheet1", dvRange)
+//     dvRange = excelize.NewDataValidation(true)
+//     dvRange.Sqref = "A3:B4"
+//     dvRange.SetRange(10, 20, excelize.DataValidationTypeWhole, excelize.DataValidationOperatorGreaterThan)
+//     dvRange.SetInput("input title", "input body")
+//     err = f.AddDataValidation("Sheet1", dvRange)
 //
 // Example 3, set data validation on Sheet1!A5:B6 with validation criteria
 // settings, create in-cell dropdown by allowing list source:
 //
-//     dvRange = excelize.NewDataValidation(true)
-//     dvRange.Sqref = "A5:B6"
-//     dvRange.SetDropList([]string{"1", "2", "3"})
-//     err = f.AddDataValidation("Sheet1", dvRange)
-//
+//     dvRange = excelize.NewDataValidation(true)
+//     dvRange.Sqref = "A5:B6"
+//     dvRange.SetDropList([]string{"1", "2", "3"})
+//     err = f.AddDataValidation("Sheet1", dvRange)
 func (f *File) AddDataValidation(sheet string, dv *DataValidation) error {
        ws, err := f.workSheetReader(sheet)
        if err != nil {
index fe6f214..df15b57 100644 (file)
@@ -22,50 +22,49 @@ import (
 // SetAppProps provides a function to set document application properties. The
 // properties that can be set are:
 //
-//     Property          | Description
-//    -------------------+--------------------------------------------------------------------------
-//     Application       | The name of the application that created this document.
-//                       |
-//     ScaleCrop         | Indicates the display mode of the document thumbnail. Set this element
-//                       | to 'true' to enable scaling of the document thumbnail to the display. Set
-//                       | this element to 'false' to enable cropping of the document thumbnail to
-//                       | show only sections that will fit the display.
-//                       |
-//     DocSecurity       | Security level of a document as a numeric value. Document security is
-//                       | defined as:
-//                       | 1 - Document is password protected.
-//                       | 2 - Document is recommended to be opened as read-only.
-//                       | 3 - Document is enforced to be opened as read-only.
-//                       | 4 - Document is locked for annotation.
-//                       |
-//     Company           | The name of a company associated with the document.
-//                       |
-//     LinksUpToDate     | Indicates whether hyperlinks in a document are up-to-date. Set this
-//                       | element to 'true' to indicate that hyperlinks are updated. Set this
-//                       | element to 'false' to indicate that hyperlinks are outdated.
-//                       |
-//     HyperlinksChanged | Specifies that one or more hyperlinks in this part were updated
-//                       | exclusively in this part by a producer. The next producer to open this
-//                       | document shall update the hyperlink relationships with the new
-//                       | hyperlinks specified in this part.
-//                       |
-//     AppVersion        | Specifies the version of the application which produced this document.
-//                       | The content of this element shall be of the form XX.YYYY where X and Y
-//                       | represent numerical values, or the document shall be considered
-//                       | non-conformant.
+//      Property          | Description
+//     -------------------+--------------------------------------------------------------------------
+//      Application       | The name of the application that created this document.
+//                        |
+//      ScaleCrop         | Indicates the display mode of the document thumbnail. Set this element
+//                        | to 'true' to enable scaling of the document thumbnail to the display. Set
+//                        | this element to 'false' to enable cropping of the document thumbnail to
+//                        | show only sections that will fit the display.
+//                        |
+//      DocSecurity       | Security level of a document as a numeric value. Document security is
+//                        | defined as:
+//                        | 1 - Document is password protected.
+//                        | 2 - Document is recommended to be opened as read-only.
+//                        | 3 - Document is enforced to be opened as read-only.
+//                        | 4 - Document is locked for annotation.
+//                        |
+//      Company           | The name of a company associated with the document.
+//                        |
+//      LinksUpToDate     | Indicates whether hyperlinks in a document are up-to-date. Set this
+//                        | element to 'true' to indicate that hyperlinks are updated. Set this
+//                        | element to 'false' to indicate that hyperlinks are outdated.
+//                        |
+//      HyperlinksChanged | Specifies that one or more hyperlinks in this part were updated
+//                        | exclusively in this part by a producer. The next producer to open this
+//                        | document shall update the hyperlink relationships with the new
+//                        | hyperlinks specified in this part.
+//                        |
+//      AppVersion        | Specifies the version of the application which produced this document.
+//                        | The content of this element shall be of the form XX.YYYY where X and Y
+//                        | represent numerical values, or the document shall be considered
+//                        | non-conformant.
 //
 // For example:
 //
-//    err := f.SetAppProps(&excelize.AppProperties{
-//        Application:       "Microsoft Excel",
-//        ScaleCrop:         true,
-//        DocSecurity:       3,
-//        Company:           "Company Name",
-//        LinksUpToDate:     true,
-//        HyperlinksChanged: true,
-//        AppVersion:        "16.0000",
-//    })
-//
+//     err := f.SetAppProps(&excelize.AppProperties{
+//         Application:       "Microsoft Excel",
+//         ScaleCrop:         true,
+//         DocSecurity:       3,
+//         Company:           "Company Name",
+//         LinksUpToDate:     true,
+//         HyperlinksChanged: true,
+//         AppVersion:        "16.0000",
+//     })
 func (f *File) SetAppProps(appProperties *AppProperties) (err error) {
        var (
                app                *xlsxProperties
@@ -122,54 +121,53 @@ func (f *File) GetAppProps() (ret *AppProperties, err error) {
 // SetDocProps provides a function to set document core properties. The
 // properties that can be set are:
 //
-//     Property       | Description
-//    ----------------+-----------------------------------------------------------------------------
-//     Title          | The name given to the resource.
-//                    |
-//     Subject        | The topic of the content of the resource.
-//                    |
-//     Creator        | An entity primarily responsible for making the content of the resource.
-//                    |
-//     Keywords       | A delimited set of keywords to support searching and indexing. This is
-//                    | typically a list of terms that are not available elsewhere in the properties.
-//                    |
-//     Description    | An explanation of the content of the resource.
-//                    |
-//     LastModifiedBy | The user who performed the last modification. The identification is
-//                    | environment-specific.
-//                    |
-//     Language       | The language of the intellectual content of the resource.
-//                    |
-//     Identifier     | An unambiguous reference to the resource within a given context.
-//                    |
-//     Revision       | The topic of the content of the resource.
-//                    |
-//     ContentStatus  | The status of the content. For example: Values might include "Draft",
-//                    | "Reviewed" and "Final"
-//                    |
-//     Category       | A categorization of the content of this package.
-//                    |
-//     Version        | The version number. This value is set by the user or by the application.
+//      Property       | Description
+//     ----------------+-----------------------------------------------------------------------------
+//      Title          | The name given to the resource.
+//                     |
+//      Subject        | The topic of the content of the resource.
+//                     |
+//      Creator        | An entity primarily responsible for making the content of the resource.
+//                     |
+//      Keywords       | A delimited set of keywords to support searching and indexing. This is
+//                     | typically a list of terms that are not available elsewhere in the properties.
+//                     |
+//      Description    | An explanation of the content of the resource.
+//                     |
+//      LastModifiedBy | The user who performed the last modification. The identification is
+//                     | environment-specific.
+//                     |
+//      Language       | The language of the intellectual content of the resource.
+//                     |
+//      Identifier     | An unambiguous reference to the resource within a given context.
+//                     |
+//      Revision       | The topic of the content of the resource.
+//                     |
+//      ContentStatus  | The status of the content. For example: Values might include "Draft",
+//                     | "Reviewed" and "Final"
+//                     |
+//      Category       | A categorization of the content of this package.
+//                     |
+//      Version        | The version number. This value is set by the user or by the application.
 //
 // For example:
 //
-//    err := f.SetDocProps(&excelize.DocProperties{
-//        Category:       "category",
-//        ContentStatus:  "Draft",
-//        Created:        "2019-06-04T22:00:10Z",
-//        Creator:        "Go Excelize",
-//        Description:    "This file created by Go Excelize",
-//        Identifier:     "xlsx",
-//        Keywords:       "Spreadsheet",
-//        LastModifiedBy: "Go Author",
-//        Modified:       "2019-06-04T22:00:10Z",
-//        Revision:       "0",
-//        Subject:        "Test Subject",
-//        Title:          "Test Title",
-//        Language:       "en-US",
-//        Version:        "1.0.0",
-//    })
-//
+//     err := f.SetDocProps(&excelize.DocProperties{
+//         Category:       "category",
+//         ContentStatus:  "Draft",
+//         Created:        "2019-06-04T22:00:10Z",
+//         Creator:        "Go Excelize",
+//         Description:    "This file created by Go Excelize",
+//         Identifier:     "xlsx",
+//         Keywords:       "Spreadsheet",
+//         LastModifiedBy: "Go Author",
+//         Modified:       "2019-06-04T22:00:10Z",
+//         Revision:       "0",
+//         Subject:        "Test Subject",
+//         Title:          "Test Title",
+//         Language:       "en-US",
+//         Version:        "1.0.0",
+//     })
 func (f *File) SetDocProps(docProperties *DocProperties) (err error) {
        var (
                core               *decodeCoreProperties
index 6603db0..ef438dd 100644 (file)
@@ -92,10 +92,10 @@ type Options struct {
 // spreadsheet file struct for it. For example, open spreadsheet with
 // password protection:
 //
-//    f, err := excelize.OpenFile("Book1.xlsx", excelize.Options{Password: "password"})
-//    if err != nil {
-//        return
-//    }
+//     f, err := excelize.OpenFile("Book1.xlsx", excelize.Options{Password: "password"})
+//     if err != nil {
+//         return
+//     }
 //
 // Close the file by Close function after opening the spreadsheet.
 func OpenFile(filename string, opt ...Options) (*File, error) {
@@ -403,21 +403,20 @@ func (f *File) addRels(relPath, relType, target, targetMode string) int {
 //
 // For example:
 //
-//    <row r="19" spans="2:2">
-//        <c r="B19">
-//            <f>SUM(Sheet2!D2,Sheet2!D11)</f>
-//            <v>100</v>
-//         </c>
-//    </row>
+//     <row r="19" spans="2:2">
+//         <c r="B19">
+//             <f>SUM(Sheet2!D2,Sheet2!D11)</f>
+//             <v>100</v>
+//          </c>
+//     </row>
 //
 // to
 //
-//    <row r="19" spans="2:2">
-//        <c r="B19">
-//            <f>SUM(Sheet2!D2,Sheet2!D11)</f>
-//        </c>
-//    </row>
-//
+//     <row r="19" spans="2:2">
+//         <c r="B19">
+//             <f>SUM(Sheet2!D2,Sheet2!D11)</f>
+//         </c>
+//     </row>
 func (f *File) UpdateLinkedValue() error {
        wb := f.workbookReader()
        // recalculate formulas
@@ -445,16 +444,15 @@ func (f *File) UpdateLinkedValue() error {
 // AddVBAProject provides the method to add vbaProject.bin file which contains
 // functions and/or macros. The file extension should be .xlsm. For example:
 //
-//    if err := f.SetSheetPrOptions("Sheet1", excelize.CodeName("Sheet1")); err != nil {
-//        fmt.Println(err)
-//    }
-//    if err := f.AddVBAProject("vbaProject.bin"); err != nil {
-//        fmt.Println(err)
-//    }
-//    if err := f.SaveAs("macros.xlsm"); err != nil {
-//        fmt.Println(err)
-//    }
-//
+//     if err := f.SetSheetPrOptions("Sheet1", excelize.CodeName("Sheet1")); err != nil {
+//         fmt.Println(err)
+//     }
+//     if err := f.AddVBAProject("vbaProject.bin"); err != nil {
+//         fmt.Println(err)
+//     }
+//     if err := f.SaveAs("macros.xlsm"); err != nil {
+//         fmt.Println(err)
+//     }
 func (f *File) AddVBAProject(bin string) error {
        var err error
        // Check vbaProject.bin exists first.
diff --git a/file.go b/file.go
index ce8b138..065e7c5 100644 (file)
--- a/file.go
+++ b/file.go
@@ -24,8 +24,7 @@ import (
 // NewFile provides a function to create new file by default template.
 // For example:
 //
-//    f := NewFile()
-//
+//     f := NewFile()
 func NewFile() *File {
        f := newFile()
        f.Pkg.Store("_rels/.rels", []byte(xml.Header+templateRels))
diff --git a/lib.go b/lib.go
index 99118ff..0408139 100644 (file)
--- a/lib.go
+++ b/lib.go
@@ -148,8 +148,7 @@ func readFile(file *zip.File) ([]byte, error) {
 //
 // Example:
 //
-//     excelize.SplitCellName("AK74") // return "AK", 74, nil
-//
+//     excelize.SplitCellName("AK74") // return "AK", 74, nil
 func SplitCellName(cell string) (string, int, error) {
        alpha := func(r rune) bool {
                return ('A' <= r && r <= 'Z') || ('a' <= r && r <= 'z') || (r == 36)
@@ -192,8 +191,7 @@ func JoinCellName(col string, row int) (string, error) {
 //
 // Example:
 //
-//     excelize.ColumnNameToNumber("AK") // returns 37, nil
-//
+//     excelize.ColumnNameToNumber("AK") // returns 37, nil
 func ColumnNameToNumber(name string) (int, error) {
        if len(name) == 0 {
                return -1, newInvalidColumnNameError(name)
@@ -222,8 +220,7 @@ func ColumnNameToNumber(name string) (int, error) {
 //
 // Example:
 //
-//     excelize.ColumnNumberToName(37) // returns "AK", nil
-//
+//     excelize.ColumnNumberToName(37) // returns "AK", nil
 func ColumnNumberToName(num int) (string, error) {
        if num < MinColumns || num > MaxColumns {
                return "", ErrColumnNumber
@@ -241,9 +238,8 @@ func ColumnNumberToName(num int) (string, error) {
 //
 // Example:
 //
-//    excelize.CellNameToCoordinates("A1") // returns 1, 1, nil
-//    excelize.CellNameToCoordinates("Z3") // returns 26, 3, nil
-//
+//     excelize.CellNameToCoordinates("A1") // returns 1, 1, nil
+//     excelize.CellNameToCoordinates("Z3") // returns 26, 3, nil
 func CellNameToCoordinates(cell string) (int, int, error) {
        colName, row, err := SplitCellName(cell)
        if err != nil {
@@ -261,9 +257,8 @@ func CellNameToCoordinates(cell string) (int, int, error) {
 //
 // Example:
 //
-//    excelize.CoordinatesToCellName(1, 1) // returns "A1", nil
-//    excelize.CoordinatesToCellName(1, 1, true) // returns "$A$1", nil
-//
+//     excelize.CoordinatesToCellName(1, 1) // returns "A1", nil
+//     excelize.CoordinatesToCellName(1, 1, true) // returns "$A$1", nil
 func CoordinatesToCellName(col, row int, abs ...bool) (string, error) {
        if col < 1 || row < 1 {
                return "", fmt.Errorf("invalid cell coordinates [%d, %d]", col, row)
@@ -641,7 +636,7 @@ func (f *File) replaceNameSpaceBytes(path string, contentMarshal []byte) []byte
        if attr, ok := f.xmlAttr[path]; ok {
                newXmlns = []byte(genXMLNamespace(attr))
        }
-       return bytesReplace(contentMarshal, oldXmlns, newXmlns, -1)
+       return bytesReplace(contentMarshal, oldXmlns, bytes.ReplaceAll(newXmlns, []byte(" mc:Ignorable=\"r\""), []byte{}), -1)
 }
 
 // addNameSpaces provides a function to add an XML attribute by the given
index 0f57826..d7400a2 100644 (file)
--- a/merge.go
+++ b/merge.go
@@ -27,25 +27,24 @@ func (mc *xlsxMergeCell) Rect() ([]int, error) {
 // discards the other values. For example create a merged cell of D3:E9 on
 // Sheet1:
 //
-//    err := f.MergeCell("Sheet1", "D3", "E9")
+//     err := f.MergeCell("Sheet1", "D3", "E9")
 //
 // If you create a merged cell that overlaps with another existing merged cell,
 // those merged cells that already exist will be removed. The cell coordinates
 // tuple after merging in the following range will be: A1(x3,y1) D1(x2,y1)
 // A8(x3,y4) D8(x2,y4)
 //
-//                 B1(x1,y1)      D1(x2,y1)
-//               +------------------------+
-//               |                        |
-//     A4(x3,y3) |    C4(x4,y3)           |
-//    +------------------------+          |
-//    |          |             |          |
-//    |          |B5(x1,y2)    | D5(x2,y2)|
-//    |          +------------------------+
-//    |                        |
-//    |A8(x3,y4)      C8(x4,y4)|
-//    +------------------------+
-//
+//                  B1(x1,y1)      D1(x2,y1)
+//                +------------------------+
+//                |                        |
+//      A4(x3,y3) |    C4(x4,y3)           |
+//     +------------------------+          |
+//     |          |             |          |
+//     |          |B5(x1,y2)    | D5(x2,y2)|
+//     |          +------------------------+
+//     |                        |
+//     |A8(x3,y4)      C8(x4,y4)|
+//     +------------------------+
 func (f *File) MergeCell(sheet, hCell, vCell string) error {
        rect, err := areaRefToCoordinates(hCell + ":" + vCell)
        if err != nil {
@@ -74,7 +73,7 @@ func (f *File) MergeCell(sheet, hCell, vCell string) error {
 // UnmergeCell provides a function to unmerge a given coordinate area.
 // For example unmerge area D3:E9 on Sheet1:
 //
-//    err := f.UnmergeCell("Sheet1", "D3", "E9")
+//     err := f.UnmergeCell("Sheet1", "D3", "E9")
 //
 // Attention: overlapped areas will also be unmerged.
 func (f *File) UnmergeCell(sheet string, hCell, vCell string) error {
index c3d0df7..c78df93 100644 (file)
@@ -42,34 +42,34 @@ func parseFormatPictureSet(formatSet string) (*formatPicture, error) {
 // format set (such as offset, scale, aspect ratio setting and print settings)
 // and file path. For example:
 //
-//    package main
+//     package main
 //
-//    import (
-//        _ "image/gif"
-//        _ "image/jpeg"
-//        _ "image/png"
+//     import (
+//         _ "image/gif"
+//         _ "image/jpeg"
+//         _ "image/png"
 //
-//        "github.com/xuri/excelize/v2"
-//    )
+//         "github.com/xuri/excelize/v2"
+//     )
 //
-//    func main() {
-//        f := excelize.NewFile()
-//        // Insert a picture.
-//        if err := f.AddPicture("Sheet1", "A2", "image.jpg", ""); err != nil {
-//            fmt.Println(err)
-//        }
-//        // Insert a picture scaling in the cell with location hyperlink.
-//        if err := f.AddPicture("Sheet1", "D2", "image.png", `{"x_scale": 0.5, "y_scale": 0.5, "hyperlink": "#Sheet2!D8", "hyperlink_type": "Location"}`); err != nil {
-//            fmt.Println(err)
-//        }
-//        // Insert a picture offset in the cell with external hyperlink, printing and positioning support.
-//        if err := f.AddPicture("Sheet1", "H2", "image.gif", `{"x_offset": 15, "y_offset": 10, "hyperlink": "https://github.com/xuri/excelize", "hyperlink_type": "External", "print_obj": true, "lock_aspect_ratio": false, "locked": false, "positioning": "oneCell"}`); err != nil {
-//            fmt.Println(err)
-//        }
-//        if err := f.SaveAs("Book1.xlsx"); err != nil {
-//            fmt.Println(err)
-//        }
-//    }
+//     func main() {
+//         f := excelize.NewFile()
+//         // Insert a picture.
+//         if err := f.AddPicture("Sheet1", "A2", "image.jpg", ""); err != nil {
+//             fmt.Println(err)
+//         }
+//         // Insert a picture scaling in the cell with location hyperlink.
+//         if err := f.AddPicture("Sheet1", "D2", "image.png", `{"x_scale": 0.5, "y_scale": 0.5, "hyperlink": "#Sheet2!D8", "hyperlink_type": "Location"}`); err != nil {
+//             fmt.Println(err)
+//         }
+//         // Insert a picture offset in the cell with external hyperlink, printing and positioning support.
+//         if err := f.AddPicture("Sheet1", "H2", "image.gif", `{"x_offset": 15, "y_offset": 10, "hyperlink": "https://github.com/xuri/excelize", "hyperlink_type": "External", "print_obj": true, "lock_aspect_ratio": false, "locked": false, "positioning": "oneCell"}`); err != nil {
+//             fmt.Println(err)
+//         }
+//         if err := f.SaveAs("Book1.xlsx"); err != nil {
+//             fmt.Println(err)
+//         }
+//     }
 //
 // The optional parameter "autofit" specifies if you make image size auto-fits the
 // cell, the default value of that is 'false'.
@@ -106,7 +106,6 @@ func parseFormatPictureSet(formatSet string) (*formatPicture, error) {
 //
 // The optional parameter "y_scale" specifies the vertical scale of images,
 // the default value of that is 1.0 which presents 100%.
-//
 func (f *File) AddPicture(sheet, cell, picture, format string) error {
        var err error
        // Check picture exists first.
@@ -126,31 +125,30 @@ func (f *File) AddPicture(sheet, cell, picture, format string) error {
 // picture format set (such as offset, scale, aspect ratio setting and print
 // settings), file base name, extension name and file bytes. For example:
 //
-//    package main
-//
-//    import (
-//        "fmt"
-//        _ "image/jpeg"
-//        "io/ioutil"
+//     package main
 //
-//        "github.com/xuri/excelize/v2"
-//    )
+//     import (
+//         "fmt"
+//         _ "image/jpeg"
+//         "io/ioutil"
 //
-//    func main() {
-//        f := excelize.NewFile()
+//         "github.com/xuri/excelize/v2"
+//     )
 //
-//        file, err := ioutil.ReadFile("image.jpg")
-//        if err != nil {
-//            fmt.Println(err)
-//        }
-//        if err := f.AddPictureFromBytes("Sheet1", "A2", "", "Excel Logo", ".jpg", file); err != nil {
-//            fmt.Println(err)
-//        }
-//        if err := f.SaveAs("Book1.xlsx"); err != nil {
-//            fmt.Println(err)
-//        }
-//    }
+//     func main() {
+//         f := excelize.NewFile()
 //
+//         file, err := ioutil.ReadFile("image.jpg")
+//         if err != nil {
+//             fmt.Println(err)
+//         }
+//         if err := f.AddPictureFromBytes("Sheet1", "A2", "", "Excel Logo", ".jpg", file); err != nil {
+//             fmt.Println(err)
+//         }
+//         if err := f.SaveAs("Book1.xlsx"); err != nil {
+//             fmt.Println(err)
+//         }
+//     }
 func (f *File) AddPictureFromBytes(sheet, cell, format, name, extension string, file []byte) error {
        var drawingHyperlinkRID int
        var hyperlinkType string
@@ -474,25 +472,24 @@ func (f *File) getSheetRelationshipsTargetByID(sheet, rID string) string {
 // returns the file name in spreadsheet and file contents as []byte data
 // types. For example:
 //
-//    f, err := excelize.OpenFile("Book1.xlsx")
-//    if err != nil {
-//        fmt.Println(err)
-//        return
-//    }
-//    defer func() {
-//        if err := f.Close(); err != nil {
-//            fmt.Println(err)
-//        }
-//    }()
-//    file, raw, err := f.GetPicture("Sheet1", "A2")
-//    if err != nil {
-//        fmt.Println(err)
-//        return
-//    }
-//    if err := ioutil.WriteFile(file, raw, 0644); err != nil {
-//        fmt.Println(err)
-//    }
-//
+//     f, err := excelize.OpenFile("Book1.xlsx")
+//     if err != nil {
+//         fmt.Println(err)
+//         return
+//     }
+//     defer func() {
+//         if err := f.Close(); err != nil {
+//             fmt.Println(err)
+//         }
+//     }()
+//     file, raw, err := f.GetPicture("Sheet1", "A2")
+//     if err != nil {
+//         fmt.Println(err)
+//         return
+//     }
+//     if err := ioutil.WriteFile(file, raw, 0644); err != nil {
+//         fmt.Println(err)
+//     }
 func (f *File) GetPicture(sheet, cell string) (string, []byte, error) {
        col, row, err := CellNameToCoordinates(cell)
        if err != nil {
index 73e5d34..bd9fee6 100644 (file)
@@ -22,10 +22,9 @@ import (
 //
 // PivotTableStyleName: The built-in pivot table style names
 //
-//    PivotStyleLight1 - PivotStyleLight28
-//    PivotStyleMedium1 - PivotStyleMedium28
-//    PivotStyleDark1 - PivotStyleDark28
-//
+//     PivotStyleLight1 - PivotStyleLight28
+//     PivotStyleMedium1 - PivotStyleMedium28
+//     PivotStyleDark1 - PivotStyleDark28
 type PivotTableOption struct {
        pivotTableSheetName string
        DataRange           string
@@ -55,17 +54,17 @@ type PivotTableOption struct {
 // field. The default value is sum. The possible values for this attribute
 // are:
 //
-//     Average
-//     Count
-//     CountNums
-//     Max
-//     Min
-//     Product
-//     StdDev
-//     StdDevp
-//     Sum
-//     Var
-//     Varp
+//     Average
+//     Count
+//     CountNums
+//     Max
+//     Min
+//     Product
+//     StdDev
+//     StdDevp
+//     Sum
+//     Var
+//     Varp
 //
 // Name specifies the name of the data field. Maximum 255 characters
 // are allowed in data field name, excess characters will be truncated.
@@ -85,51 +84,50 @@ type PivotTableField struct {
 // For example, create a pivot table on the Sheet1!$G$2:$M$34 area with the
 // region Sheet1!$A$1:$E$31 as the data source, summarize by sum for sales:
 //
-//    package main
-//
-//    import (
-//        "fmt"
-//        "math/rand"
+//     package main
 //
-//        "github.com/xuri/excelize/v2"
-//    )
+//     import (
+//         "fmt"
+//         "math/rand"
 //
-//    func main() {
-//        f := excelize.NewFile()
-//        // Create some data in a sheet
-//        month := []string{"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}
-//        year := []int{2017, 2018, 2019}
-//        types := []string{"Meat", "Dairy", "Beverages", "Produce"}
-//        region := []string{"East", "West", "North", "South"}
-//        f.SetSheetRow("Sheet1", "A1", &[]string{"Month", "Year", "Type", "Sales", "Region"})
-//        for row := 2; row < 32; row++ {
-//            f.SetCellValue("Sheet1", fmt.Sprintf("A%d", row), month[rand.Intn(12)])
-//            f.SetCellValue("Sheet1", fmt.Sprintf("B%d", row), year[rand.Intn(3)])
-//            f.SetCellValue("Sheet1", fmt.Sprintf("C%d", row), types[rand.Intn(4)])
-//            f.SetCellValue("Sheet1", fmt.Sprintf("D%d", row), rand.Intn(5000))
-//            f.SetCellValue("Sheet1", fmt.Sprintf("E%d", row), region[rand.Intn(4)])
-//        }
-//        if err := f.AddPivotTable(&excelize.PivotTableOption{
-//            DataRange:       "Sheet1!$A$1:$E$31",
-//            PivotTableRange: "Sheet1!$G$2:$M$34",
-//            Rows:            []excelize.PivotTableField{{Data: "Month", DefaultSubtotal: true}, {Data: "Year"}},
-//            Filter:          []excelize.PivotTableField{{Data: "Region"}},
-//            Columns:         []excelize.PivotTableField{{Data: "Type", DefaultSubtotal: true}},
-//            Data:            []excelize.PivotTableField{{Data: "Sales", Name: "Summarize", Subtotal: "Sum"}},
-//            RowGrandTotals:  true,
-//            ColGrandTotals:  true,
-//            ShowDrill:       true,
-//            ShowRowHeaders:  true,
-//            ShowColHeaders:  true,
-//            ShowLastColumn:  true,
-//        }); err != nil {
-//            fmt.Println(err)
-//        }
-//        if err := f.SaveAs("Book1.xlsx"); err != nil {
-//            fmt.Println(err)
-//        }
-//    }
+//         "github.com/xuri/excelize/v2"
+//     )
 //
+//     func main() {
+//         f := excelize.NewFile()
+//         // Create some data in a sheet
+//         month := []string{"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}
+//         year := []int{2017, 2018, 2019}
+//         types := []string{"Meat", "Dairy", "Beverages", "Produce"}
+//         region := []string{"East", "West", "North", "South"}
+//         f.SetSheetRow("Sheet1", "A1", &[]string{"Month", "Year", "Type", "Sales", "Region"})
+//         for row := 2; row < 32; row++ {
+//             f.SetCellValue("Sheet1", fmt.Sprintf("A%d", row), month[rand.Intn(12)])
+//             f.SetCellValue("Sheet1", fmt.Sprintf("B%d", row), year[rand.Intn(3)])
+//             f.SetCellValue("Sheet1", fmt.Sprintf("C%d", row), types[rand.Intn(4)])
+//             f.SetCellValue("Sheet1", fmt.Sprintf("D%d", row), rand.Intn(5000))
+//             f.SetCellValue("Sheet1", fmt.Sprintf("E%d", row), region[rand.Intn(4)])
+//         }
+//         if err := f.AddPivotTable(&excelize.PivotTableOption{
+//             DataRange:       "Sheet1!$A$1:$E$31",
+//             PivotTableRange: "Sheet1!$G$2:$M$34",
+//             Rows:            []excelize.PivotTableField{{Data: "Month", DefaultSubtotal: true}, {Data: "Year"}},
+//             Filter:          []excelize.PivotTableField{{Data: "Region"}},
+//             Columns:         []excelize.PivotTableField{{Data: "Type", DefaultSubtotal: true}},
+//             Data:            []excelize.PivotTableField{{Data: "Sales", Name: "Summarize", Subtotal: "Sum"}},
+//             RowGrandTotals:  true,
+//             ColGrandTotals:  true,
+//             ShowDrill:       true,
+//             ShowRowHeaders:  true,
+//             ShowColHeaders:  true,
+//             ShowLastColumn:  true,
+//         }); err != nil {
+//             fmt.Println(err)
+//         }
+//         if err := f.SaveAs("Book1.xlsx"); err != nil {
+//             fmt.Println(err)
+//         }
+//     }
 func (f *File) AddPivotTable(opt *PivotTableOption) error {
        // parameter validation
        _, pivotTableSheetPath, err := f.parseFormatPivotTableSet(opt)
diff --git a/rows.go b/rows.go
index 457f59b..9eef628 100644 (file)
--- a/rows.go
+++ b/rows.go
@@ -37,18 +37,17 @@ import (
 // For example, get and traverse the value of all cells by rows on a worksheet
 // named 'Sheet1':
 //
-//    rows, err := f.GetRows("Sheet1")
-//    if err != nil {
-//        fmt.Println(err)
-//        return
-//    }
-//    for _, row := range rows {
-//        for _, colCell := range row {
-//            fmt.Print(colCell, "\t")
-//        }
-//        fmt.Println()
-//    }
-//
+//     rows, err := f.GetRows("Sheet1")
+//     if err != nil {
+//         fmt.Println(err)
+//         return
+//     }
+//     for _, row := range rows {
+//         for _, colCell := range row {
+//             fmt.Print(colCell, "\t")
+//         }
+//         fmt.Println()
+//     }
 func (f *File) GetRows(sheet string, opts ...Options) ([][]string, error) {
        rows, err := f.Rows(sheet)
        if err != nil {
@@ -240,25 +239,24 @@ func (rows *Rows) rowXMLHandler(rowIterator *rowXMLIterator, xmlElement *xml.Sta
 // Rows returns a rows iterator, used for streaming reading data for a
 // worksheet with a large data. For example:
 //
-//    rows, err := f.Rows("Sheet1")
-//    if err != nil {
-//        fmt.Println(err)
-//        return
-//    }
-//    for rows.Next() {
-//        row, err := rows.Columns()
-//        if err != nil {
-//            fmt.Println(err)
-//        }
-//        for _, colCell := range row {
-//            fmt.Print(colCell, "\t")
-//        }
-//        fmt.Println()
-//    }
-//    if err = rows.Close(); err != nil {
-//        fmt.Println(err)
-//    }
-//
+//     rows, err := f.Rows("Sheet1")
+//     if err != nil {
+//         fmt.Println(err)
+//         return
+//     }
+//     for rows.Next() {
+//         row, err := rows.Columns()
+//         if err != nil {
+//             fmt.Println(err)
+//         }
+//         for _, colCell := range row {
+//             fmt.Print(colCell, "\t")
+//         }
+//         fmt.Println()
+//     }
+//     if err = rows.Close(); err != nil {
+//         fmt.Println(err)
+//     }
 func (f *File) Rows(sheet string) (*Rows, error) {
        name, ok := f.getSheetXMLPath(sheet)
        if !ok {
@@ -344,8 +342,7 @@ func (f *File) xmlDecoder(name string) (bool, *xml.Decoder, *os.File, error) {
 // SetRowHeight provides a function to set the height of a single row. For
 // example, set the height of the first row in Sheet1:
 //
-//    err := f.SetRowHeight("Sheet1", 1, 50)
-//
+//     err := f.SetRowHeight("Sheet1", 1, 50)
 func (f *File) SetRowHeight(sheet string, row int, height float64) error {
        if row < 1 {
                return newInvalidRowNumberError(row)
@@ -385,8 +382,7 @@ func (f *File) getRowHeight(sheet string, row int) int {
 // GetRowHeight provides a function to get row height by given worksheet name
 // and row number. For example, get the height of the first row in Sheet1:
 //
-//    height, err := f.GetRowHeight("Sheet1", 1)
-//
+//     height, err := f.GetRowHeight("Sheet1", 1)
 func (f *File) GetRowHeight(sheet string, row int) (float64, error) {
        if row < 1 {
                return defaultRowHeightPixels, newInvalidRowNumberError(row)
@@ -517,8 +513,7 @@ func roundPrecision(text string, prec int) string {
 // SetRowVisible provides a function to set visible of a single row by given
 // worksheet name and Excel row number. For example, hide row 2 in Sheet1:
 //
-//    err := f.SetRowVisible("Sheet1", 2, false)
-//
+//     err := f.SetRowVisible("Sheet1", 2, false)
 func (f *File) SetRowVisible(sheet string, row int, visible bool) error {
        if row < 1 {
                return newInvalidRowNumberError(row)
@@ -537,8 +532,7 @@ func (f *File) SetRowVisible(sheet string, row int, visible bool) error {
 // worksheet name and Excel row number. For example, get visible state of row
 // 2 in Sheet1:
 //
-//    visible, err := f.GetRowVisible("Sheet1", 2)
-//
+//     visible, err := f.GetRowVisible("Sheet1", 2)
 func (f *File) GetRowVisible(sheet string, row int) (bool, error) {
        if row < 1 {
                return false, newInvalidRowNumberError(row)
@@ -558,8 +552,7 @@ func (f *File) GetRowVisible(sheet string, row int) (bool, error) {
 // single row by given worksheet name and Excel row number. The value of
 // parameter 'level' is 1-7. For example, outline row 2 in Sheet1 to level 1:
 //
-//    err := f.SetRowOutlineLevel("Sheet1", 2, 1)
-//
+//     err := f.SetRowOutlineLevel("Sheet1", 2, 1)
 func (f *File) SetRowOutlineLevel(sheet string, row int, level uint8) error {
        if row < 1 {
                return newInvalidRowNumberError(row)
@@ -580,8 +573,7 @@ func (f *File) SetRowOutlineLevel(sheet string, row int, level uint8) error {
 // single row by given worksheet name and Excel row number. For example, get
 // outline number of row 2 in Sheet1:
 //
-//    level, err := f.GetRowOutlineLevel("Sheet1", 2)
-//
+//     level, err := f.GetRowOutlineLevel("Sheet1", 2)
 func (f *File) GetRowOutlineLevel(sheet string, row int) (uint8, error) {
        if row < 1 {
                return 0, newInvalidRowNumberError(row)
@@ -599,7 +591,7 @@ func (f *File) GetRowOutlineLevel(sheet string, row int) (uint8, error) {
 // RemoveRow provides a function to remove single row by given worksheet name
 // and Excel row number. For example, remove row 3 in Sheet1:
 //
-//    err := f.RemoveRow("Sheet1", 3)
+//     err := f.RemoveRow("Sheet1", 3)
 //
 // Use this method with caution, which will affect changes in references such
 // as formulas, charts, and so on. If there is any referenced value of the
@@ -633,7 +625,7 @@ func (f *File) RemoveRow(sheet string, row int) error {
 // number starting from 1. For example, create a new row before row 3 in
 // Sheet1:
 //
-//    err := f.InsertRow("Sheet1", 3)
+//     err := f.InsertRow("Sheet1", 3)
 //
 // Use this method with caution, which will affect changes in references such
 // as formulas, charts, and so on. If there is any referenced value of the
@@ -648,7 +640,7 @@ func (f *File) InsertRow(sheet string, row int) error {
 
 // DuplicateRow inserts a copy of specified row (by its Excel row number) below
 //
-//    err := f.DuplicateRow("Sheet1", 2)
+//     err := f.DuplicateRow("Sheet1", 2)
 //
 // Use this method with caution, which will affect changes in references such
 // as formulas, charts, and so on. If there is any referenced value of the
@@ -661,7 +653,7 @@ func (f *File) DuplicateRow(sheet string, row int) error {
 // DuplicateRowTo inserts a copy of specified row by it Excel number
 // to specified row position moving down exists rows after target position
 //
-//    err := f.DuplicateRowTo("Sheet1", 2, 7)
+//     err := f.DuplicateRowTo("Sheet1", 2, 7)
 //
 // Use this method with caution, which will affect changes in references such
 // as formulas, charts, and so on. If there is any referenced value of the
@@ -758,24 +750,24 @@ func (f *File) duplicateMergeCells(sheet string, ws *xlsxWorksheet, row, row2 in
 // checkRow provides a function to check and fill each column element for all
 // rows and make that is continuous in a worksheet of XML. For example:
 //
-//    <row r="15" spans="1:22" x14ac:dyDescent="0.2">
-//        <c r="A15" s="2" />
-//        <c r="B15" s="2" />
-//        <c r="F15" s="1" />
-//        <c r="G15" s="1" />
-//    </row>
+//     <row r="15" spans="1:22" x14ac:dyDescent="0.2">
+//         <c r="A15" s="2" />
+//         <c r="B15" s="2" />
+//         <c r="F15" s="1" />
+//         <c r="G15" s="1" />
+//     </row>
 //
 // in this case, we should to change it to
 //
-//    <row r="15" spans="1:22" x14ac:dyDescent="0.2">
-//        <c r="A15" s="2" />
-//        <c r="B15" s="2" />
-//        <c r="C15" s="2" />
-//        <c r="D15" s="2" />
-//        <c r="E15" s="2" />
-//        <c r="F15" s="1" />
-//        <c r="G15" s="1" />
-//    </row>
+//     <row r="15" spans="1:22" x14ac:dyDescent="0.2">
+//         <c r="A15" s="2" />
+//         <c r="B15" s="2" />
+//         <c r="C15" s="2" />
+//         <c r="D15" s="2" />
+//         <c r="E15" s="2" />
+//         <c r="F15" s="1" />
+//         <c r="G15" s="1" />
+//     </row>
 //
 // Noteice: this method could be very slow for large spreadsheets (more than
 // 3000 rows one sheet).
@@ -843,12 +835,11 @@ func checkRow(ws *xlsxWorksheet) error {
 //
 // For example set style of row 1 on Sheet1:
 //
-//    err = f.SetRowStyle("Sheet1", 1, 1, styleID)
+//     err = f.SetRowStyle("Sheet1", 1, 1, styleID)
 //
 // Set style of rows 1 to 10 on Sheet1:
 //
-//    err = f.SetRowStyle("Sheet1", 1, 10, styleID)
-//
+//     err = f.SetRowStyle("Sheet1", 1, 10, styleID)
 func (f *File) SetRowStyle(sheet string, start, end, styleID int) error {
        if end < start {
                start, end = end, start
index 58751b2..4fca348 100644 (file)
--- a/shape.go
+++ b/shape.go
@@ -39,245 +39,244 @@ func parseFormatShapeSet(formatSet string) (*formatShape, error) {
 // print settings) and properties set. For example, add text box (rect shape)
 // in Sheet1:
 //
-//    err := f.AddShape("Sheet1", "G6", `{
-//        "type": "rect",
-//        "color":
-//        {
-//            "line": "#4286F4",
-//            "fill": "#8eb9ff"
-//        },
-//        "paragraph": [
-//        {
-//            "text": "Rectangle Shape",
-//            "font":
-//            {
-//                "bold": true,
-//                "italic": true,
-//                "family": "Times New Roman",
-//                "size": 36,
-//                "color": "#777777",
-//                "underline": "sng"
-//            }
-//        }],
-//        "width": 180,
-//        "height": 90,
-//        "line":
-//        {
-//            "width": 1.2
-//        }
-//    }`)
+//     err := f.AddShape("Sheet1", "G6", `{
+//         "type": "rect",
+//         "color":
+//         {
+//             "line": "#4286F4",
+//             "fill": "#8eb9ff"
+//         },
+//         "paragraph": [
+//         {
+//             "text": "Rectangle Shape",
+//             "font":
+//             {
+//                 "bold": true,
+//                 "italic": true,
+//                 "family": "Times New Roman",
+//                 "size": 36,
+//                 "color": "#777777",
+//                 "underline": "sng"
+//             }
+//         }],
+//         "width": 180,
+//         "height": 90,
+//         "line":
+//         {
+//             "width": 1.2
+//         }
+//     }`)
 //
 // The following shows the type of shape supported by excelize:
 //
-//    accentBorderCallout1 (Callout 1 with Border and Accent Shape)
-//    accentBorderCallout2 (Callout 2 with Border and Accent Shape)
-//    accentBorderCallout3 (Callout 3 with Border and Accent Shape)
-//    accentCallout1 (Callout 1 Shape)
-//    accentCallout2 (Callout 2 Shape)
-//    accentCallout3 (Callout 3 Shape)
-//    actionButtonBackPrevious (Back or Previous Button Shape)
-//    actionButtonBeginning (Beginning Button Shape)
-//    actionButtonBlank (Blank Button Shape)
-//    actionButtonDocument (Document Button Shape)
-//    actionButtonEnd (End Button Shape)
-//    actionButtonForwardNext (Forward or Next Button Shape)
-//    actionButtonHelp (Help Button Shape)
-//    actionButtonHome (Home Button Shape)
-//    actionButtonInformation (Information Button Shape)
-//    actionButtonMovie (Movie Button Shape)
-//    actionButtonReturn (Return Button Shape)
-//    actionButtonSound (Sound Button Shape)
-//    arc (Curved Arc Shape)
-//    bentArrow (Bent Arrow Shape)
-//    bentConnector2 (Bent Connector 2 Shape)
-//    bentConnector3 (Bent Connector 3 Shape)
-//    bentConnector4 (Bent Connector 4 Shape)
-//    bentConnector5 (Bent Connector 5 Shape)
-//    bentUpArrow (Bent Up Arrow Shape)
-//    bevel (Bevel Shape)
-//    blockArc (Block Arc Shape)
-//    borderCallout1 (Callout 1 with Border Shape)
-//    borderCallout2 (Callout 2 with Border Shape)
-//    borderCallout3 (Callout 3 with Border Shape)
-//    bracePair (Brace Pair Shape)
-//    bracketPair (Bracket Pair Shape)
-//    callout1 (Callout 1 Shape)
-//    callout2 (Callout 2 Shape)
-//    callout3 (Callout 3 Shape)
-//    can (Can Shape)
-//    chartPlus (Chart Plus Shape)
-//    chartStar (Chart Star Shape)
-//    chartX (Chart X Shape)
-//    chevron (Chevron Shape)
-//    chord (Chord Shape)
-//    circularArrow (Circular Arrow Shape)
-//    cloud (Cloud Shape)
-//    cloudCallout (Callout Cloud Shape)
-//    corner (Corner Shape)
-//    cornerTabs (Corner Tabs Shape)
-//    cube (Cube Shape)
-//    curvedConnector2 (Curved Connector 2 Shape)
-//    curvedConnector3 (Curved Connector 3 Shape)
-//    curvedConnector4 (Curved Connector 4 Shape)
-//    curvedConnector5 (Curved Connector 5 Shape)
-//    curvedDownArrow (Curved Down Arrow Shape)
-//    curvedLeftArrow (Curved Left Arrow Shape)
-//    curvedRightArrow (Curved Right Arrow Shape)
-//    curvedUpArrow (Curved Up Arrow Shape)
-//    decagon (Decagon Shape)
-//    diagStripe (Diagonal Stripe Shape)
-//    diamond (Diamond Shape)
-//    dodecagon (Dodecagon Shape)
-//    donut (Donut Shape)
-//    doubleWave (Double Wave Shape)
-//    downArrow (Down Arrow Shape)
-//    downArrowCallout (Callout Down Arrow Shape)
-//    ellipse (Ellipse Shape)
-//    ellipseRibbon (Ellipse Ribbon Shape)
-//    ellipseRibbon2 (Ellipse Ribbon 2 Shape)
-//    flowChartAlternateProcess (Alternate Process Flow Shape)
-//    flowChartCollate (Collate Flow Shape)
-//    flowChartConnector (Connector Flow Shape)
-//    flowChartDecision (Decision Flow Shape)
-//    flowChartDelay (Delay Flow Shape)
-//    flowChartDisplay (Display Flow Shape)
-//    flowChartDocument (Document Flow Shape)
-//    flowChartExtract (Extract Flow Shape)
-//    flowChartInputOutput (Input Output Flow Shape)
-//    flowChartInternalStorage (Internal Storage Flow Shape)
-//    flowChartMagneticDisk (Magnetic Disk Flow Shape)
-//    flowChartMagneticDrum (Magnetic Drum Flow Shape)
-//    flowChartMagneticTape (Magnetic Tape Flow Shape)
-//    flowChartManualInput (Manual Input Flow Shape)
-//    flowChartManualOperation (Manual Operation Flow Shape)
-//    flowChartMerge (Merge Flow Shape)
-//    flowChartMultidocument (Multi-Document Flow Shape)
-//    flowChartOfflineStorage (Offline Storage Flow Shape)
-//    flowChartOffpageConnector (Off-Page Connector Flow Shape)
-//    flowChartOnlineStorage (Online Storage Flow Shape)
-//    flowChartOr (Or Flow Shape)
-//    flowChartPredefinedProcess (Predefined Process Flow Shape)
-//    flowChartPreparation (Preparation Flow Shape)
-//    flowChartProcess (Process Flow Shape)
-//    flowChartPunchedCard (Punched Card Flow Shape)
-//    flowChartPunchedTape (Punched Tape Flow Shape)
-//    flowChartSort (Sort Flow Shape)
-//    flowChartSummingJunction (Summing Junction Flow Shape)
-//    flowChartTerminator (Terminator Flow Shape)
-//    foldedCorner (Folded Corner Shape)
-//    frame (Frame Shape)
-//    funnel (Funnel Shape)
-//    gear6 (Gear 6 Shape)
-//    gear9 (Gear 9 Shape)
-//    halfFrame (Half Frame Shape)
-//    heart (Heart Shape)
-//    heptagon (Heptagon Shape)
-//    hexagon (Hexagon Shape)
-//    homePlate (Home Plate Shape)
-//    horizontalScroll (Horizontal Scroll Shape)
-//    irregularSeal1 (Irregular Seal 1 Shape)
-//    irregularSeal2 (Irregular Seal 2 Shape)
-//    leftArrow (Left Arrow Shape)
-//    leftArrowCallout (Callout Left Arrow Shape)
-//    leftBrace (Left Brace Shape)
-//    leftBracket (Left Bracket Shape)
-//    leftCircularArrow (Left Circular Arrow Shape)
-//    leftRightArrow (Left Right Arrow Shape)
-//    leftRightArrowCallout (Callout Left Right Arrow Shape)
-//    leftRightCircularArrow (Left Right Circular Arrow Shape)
-//    leftRightRibbon (Left Right Ribbon Shape)
-//    leftRightUpArrow (Left Right Up Arrow Shape)
-//    leftUpArrow (Left Up Arrow Shape)
-//    lightningBolt (Lightning Bolt Shape)
-//    line (Line Shape)
-//    lineInv (Line Inverse Shape)
-//    mathDivide (Divide Math Shape)
-//    mathEqual (Equal Math Shape)
-//    mathMinus (Minus Math Shape)
-//    mathMultiply (Multiply Math Shape)
-//    mathNotEqual (Not Equal Math Shape)
-//    mathPlus (Plus Math Shape)
-//    moon (Moon Shape)
-//    nonIsoscelesTrapezoid (Non-Isosceles Trapezoid Shape)
-//    noSmoking (No Smoking Shape)
-//    notchedRightArrow (Notched Right Arrow Shape)
-//    octagon (Octagon Shape)
-//    parallelogram (Parallelogram Shape)
-//    pentagon (Pentagon Shape)
-//    pie (Pie Shape)
-//    pieWedge (Pie Wedge Shape)
-//    plaque (Plaque Shape)
-//    plaqueTabs (Plaque Tabs Shape)
-//    plus (Plus Shape)
-//    quadArrow (Quad-Arrow Shape)
-//    quadArrowCallout (Callout Quad-Arrow Shape)
-//    rect (Rectangle Shape)
-//    ribbon (Ribbon Shape)
-//    ribbon2 (Ribbon 2 Shape)
-//    rightArrow (Right Arrow Shape)
-//    rightArrowCallout (Callout Right Arrow Shape)
-//    rightBrace (Right Brace Shape)
-//    rightBracket (Right Bracket Shape)
-//    round1Rect (One Round Corner Rectangle Shape)
-//    round2DiagRect (Two Diagonal Round Corner Rectangle Shape)
-//    round2SameRect (Two Same-side Round Corner Rectangle Shape)
-//    roundRect (Round Corner Rectangle Shape)
-//    rtTriangle (Right Triangle Shape)
-//    smileyFace (Smiley Face Shape)
-//    snip1Rect (One Snip Corner Rectangle Shape)
-//    snip2DiagRect (Two Diagonal Snip Corner Rectangle Shape)
-//    snip2SameRect (Two Same-side Snip Corner Rectangle Shape)
-//    snipRoundRect (One Snip One Round Corner Rectangle Shape)
-//    squareTabs (Square Tabs Shape)
-//    star10 (Ten Pointed Star Shape)
-//    star12 (Twelve Pointed Star Shape)
-//    star16 (Sixteen Pointed Star Shape)
-//    star24 (Twenty Four Pointed Star Shape)
-//    star32 (Thirty Two Pointed Star Shape)
-//    star4 (Four Pointed Star Shape)
-//    star5 (Five Pointed Star Shape)
-//    star6 (Six Pointed Star Shape)
-//    star7 (Seven Pointed Star Shape)
-//    star8 (Eight Pointed Star Shape)
-//    straightConnector1 (Straight Connector 1 Shape)
-//    stripedRightArrow (Striped Right Arrow Shape)
-//    sun (Sun Shape)
-//    swooshArrow (Swoosh Arrow Shape)
-//    teardrop (Teardrop Shape)
-//    trapezoid (Trapezoid Shape)
-//    triangle (Triangle Shape)
-//    upArrow (Up Arrow Shape)
-//    upArrowCallout (Callout Up Arrow Shape)
-//    upDownArrow (Up Down Arrow Shape)
-//    upDownArrowCallout (Callout Up Down Arrow Shape)
-//    uturnArrow (U-Turn Arrow Shape)
-//    verticalScroll (Vertical Scroll Shape)
-//    wave (Wave Shape)
-//    wedgeEllipseCallout (Callout Wedge Ellipse Shape)
-//    wedgeRectCallout (Callout Wedge Rectangle Shape)
-//    wedgeRoundRectCallout (Callout Wedge Round Rectangle Shape)
+//     accentBorderCallout1 (Callout 1 with Border and Accent Shape)
+//     accentBorderCallout2 (Callout 2 with Border and Accent Shape)
+//     accentBorderCallout3 (Callout 3 with Border and Accent Shape)
+//     accentCallout1 (Callout 1 Shape)
+//     accentCallout2 (Callout 2 Shape)
+//     accentCallout3 (Callout 3 Shape)
+//     actionButtonBackPrevious (Back or Previous Button Shape)
+//     actionButtonBeginning (Beginning Button Shape)
+//     actionButtonBlank (Blank Button Shape)
+//     actionButtonDocument (Document Button Shape)
+//     actionButtonEnd (End Button Shape)
+//     actionButtonForwardNext (Forward or Next Button Shape)
+//     actionButtonHelp (Help Button Shape)
+//     actionButtonHome (Home Button Shape)
+//     actionButtonInformation (Information Button Shape)
+//     actionButtonMovie (Movie Button Shape)
+//     actionButtonReturn (Return Button Shape)
+//     actionButtonSound (Sound Button Shape)
+//     arc (Curved Arc Shape)
+//     bentArrow (Bent Arrow Shape)
+//     bentConnector2 (Bent Connector 2 Shape)
+//     bentConnector3 (Bent Connector 3 Shape)
+//     bentConnector4 (Bent Connector 4 Shape)
+//     bentConnector5 (Bent Connector 5 Shape)
+//     bentUpArrow (Bent Up Arrow Shape)
+//     bevel (Bevel Shape)
+//     blockArc (Block Arc Shape)
+//     borderCallout1 (Callout 1 with Border Shape)
+//     borderCallout2 (Callout 2 with Border Shape)
+//     borderCallout3 (Callout 3 with Border Shape)
+//     bracePair (Brace Pair Shape)
+//     bracketPair (Bracket Pair Shape)
+//     callout1 (Callout 1 Shape)
+//     callout2 (Callout 2 Shape)
+//     callout3 (Callout 3 Shape)
+//     can (Can Shape)
+//     chartPlus (Chart Plus Shape)
+//     chartStar (Chart Star Shape)
+//     chartX (Chart X Shape)
+//     chevron (Chevron Shape)
+//     chord (Chord Shape)
+//     circularArrow (Circular Arrow Shape)
+//     cloud (Cloud Shape)
+//     cloudCallout (Callout Cloud Shape)
+//     corner (Corner Shape)
+//     cornerTabs (Corner Tabs Shape)
+//     cube (Cube Shape)
+//     curvedConnector2 (Curved Connector 2 Shape)
+//     curvedConnector3 (Curved Connector 3 Shape)
+//     curvedConnector4 (Curved Connector 4 Shape)
+//     curvedConnector5 (Curved Connector 5 Shape)
+//     curvedDownArrow (Curved Down Arrow Shape)
+//     curvedLeftArrow (Curved Left Arrow Shape)
+//     curvedRightArrow (Curved Right Arrow Shape)
+//     curvedUpArrow (Curved Up Arrow Shape)
+//     decagon (Decagon Shape)
+//     diagStripe (Diagonal Stripe Shape)
+//     diamond (Diamond Shape)
+//     dodecagon (Dodecagon Shape)
+//     donut (Donut Shape)
+//     doubleWave (Double Wave Shape)
+//     downArrow (Down Arrow Shape)
+//     downArrowCallout (Callout Down Arrow Shape)
+//     ellipse (Ellipse Shape)
+//     ellipseRibbon (Ellipse Ribbon Shape)
+//     ellipseRibbon2 (Ellipse Ribbon 2 Shape)
+//     flowChartAlternateProcess (Alternate Process Flow Shape)
+//     flowChartCollate (Collate Flow Shape)
+//     flowChartConnector (Connector Flow Shape)
+//     flowChartDecision (Decision Flow Shape)
+//     flowChartDelay (Delay Flow Shape)
+//     flowChartDisplay (Display Flow Shape)
+//     flowChartDocument (Document Flow Shape)
+//     flowChartExtract (Extract Flow Shape)
+//     flowChartInputOutput (Input Output Flow Shape)
+//     flowChartInternalStorage (Internal Storage Flow Shape)
+//     flowChartMagneticDisk (Magnetic Disk Flow Shape)
+//     flowChartMagneticDrum (Magnetic Drum Flow Shape)
+//     flowChartMagneticTape (Magnetic Tape Flow Shape)
+//     flowChartManualInput (Manual Input Flow Shape)
+//     flowChartManualOperation (Manual Operation Flow Shape)
+//     flowChartMerge (Merge Flow Shape)
+//     flowChartMultidocument (Multi-Document Flow Shape)
+//     flowChartOfflineStorage (Offline Storage Flow Shape)
+//     flowChartOffpageConnector (Off-Page Connector Flow Shape)
+//     flowChartOnlineStorage (Online Storage Flow Shape)
+//     flowChartOr (Or Flow Shape)
+//     flowChartPredefinedProcess (Predefined Process Flow Shape)
+//     flowChartPreparation (Preparation Flow Shape)
+//     flowChartProcess (Process Flow Shape)
+//     flowChartPunchedCard (Punched Card Flow Shape)
+//     flowChartPunchedTape (Punched Tape Flow Shape)
+//     flowChartSort (Sort Flow Shape)
+//     flowChartSummingJunction (Summing Junction Flow Shape)
+//     flowChartTerminator (Terminator Flow Shape)
+//     foldedCorner (Folded Corner Shape)
+//     frame (Frame Shape)
+//     funnel (Funnel Shape)
+//     gear6 (Gear 6 Shape)
+//     gear9 (Gear 9 Shape)
+//     halfFrame (Half Frame Shape)
+//     heart (Heart Shape)
+//     heptagon (Heptagon Shape)
+//     hexagon (Hexagon Shape)
+//     homePlate (Home Plate Shape)
+//     horizontalScroll (Horizontal Scroll Shape)
+//     irregularSeal1 (Irregular Seal 1 Shape)
+//     irregularSeal2 (Irregular Seal 2 Shape)
+//     leftArrow (Left Arrow Shape)
+//     leftArrowCallout (Callout Left Arrow Shape)
+//     leftBrace (Left Brace Shape)
+//     leftBracket (Left Bracket Shape)
+//     leftCircularArrow (Left Circular Arrow Shape)
+//     leftRightArrow (Left Right Arrow Shape)
+//     leftRightArrowCallout (Callout Left Right Arrow Shape)
+//     leftRightCircularArrow (Left Right Circular Arrow Shape)
+//     leftRightRibbon (Left Right Ribbon Shape)
+//     leftRightUpArrow (Left Right Up Arrow Shape)
+//     leftUpArrow (Left Up Arrow Shape)
+//     lightningBolt (Lightning Bolt Shape)
+//     line (Line Shape)
+//     lineInv (Line Inverse Shape)
+//     mathDivide (Divide Math Shape)
+//     mathEqual (Equal Math Shape)
+//     mathMinus (Minus Math Shape)
+//     mathMultiply (Multiply Math Shape)
+//     mathNotEqual (Not Equal Math Shape)
+//     mathPlus (Plus Math Shape)
+//     moon (Moon Shape)
+//     nonIsoscelesTrapezoid (Non-Isosceles Trapezoid Shape)
+//     noSmoking (No Smoking Shape)
+//     notchedRightArrow (Notched Right Arrow Shape)
+//     octagon (Octagon Shape)
+//     parallelogram (Parallelogram Shape)
+//     pentagon (Pentagon Shape)
+//     pie (Pie Shape)
+//     pieWedge (Pie Wedge Shape)
+//     plaque (Plaque Shape)
+//     plaqueTabs (Plaque Tabs Shape)
+//     plus (Plus Shape)
+//     quadArrow (Quad-Arrow Shape)
+//     quadArrowCallout (Callout Quad-Arrow Shape)
+//     rect (Rectangle Shape)
+//     ribbon (Ribbon Shape)
+//     ribbon2 (Ribbon 2 Shape)
+//     rightArrow (Right Arrow Shape)
+//     rightArrowCallout (Callout Right Arrow Shape)
+//     rightBrace (Right Brace Shape)
+//     rightBracket (Right Bracket Shape)
+//     round1Rect (One Round Corner Rectangle Shape)
+//     round2DiagRect (Two Diagonal Round Corner Rectangle Shape)
+//     round2SameRect (Two Same-side Round Corner Rectangle Shape)
+//     roundRect (Round Corner Rectangle Shape)
+//     rtTriangle (Right Triangle Shape)
+//     smileyFace (Smiley Face Shape)
+//     snip1Rect (One Snip Corner Rectangle Shape)
+//     snip2DiagRect (Two Diagonal Snip Corner Rectangle Shape)
+//     snip2SameRect (Two Same-side Snip Corner Rectangle Shape)
+//     snipRoundRect (One Snip One Round Corner Rectangle Shape)
+//     squareTabs (Square Tabs Shape)
+//     star10 (Ten Pointed Star Shape)
+//     star12 (Twelve Pointed Star Shape)
+//     star16 (Sixteen Pointed Star Shape)
+//     star24 (Twenty Four Pointed Star Shape)
+//     star32 (Thirty Two Pointed Star Shape)
+//     star4 (Four Pointed Star Shape)
+//     star5 (Five Pointed Star Shape)
+//     star6 (Six Pointed Star Shape)
+//     star7 (Seven Pointed Star Shape)
+//     star8 (Eight Pointed Star Shape)
+//     straightConnector1 (Straight Connector 1 Shape)
+//     stripedRightArrow (Striped Right Arrow Shape)
+//     sun (Sun Shape)
+//     swooshArrow (Swoosh Arrow Shape)
+//     teardrop (Teardrop Shape)
+//     trapezoid (Trapezoid Shape)
+//     triangle (Triangle Shape)
+//     upArrow (Up Arrow Shape)
+//     upArrowCallout (Callout Up Arrow Shape)
+//     upDownArrow (Up Down Arrow Shape)
+//     upDownArrowCallout (Callout Up Down Arrow Shape)
+//     uturnArrow (U-Turn Arrow Shape)
+//     verticalScroll (Vertical Scroll Shape)
+//     wave (Wave Shape)
+//     wedgeEllipseCallout (Callout Wedge Ellipse Shape)
+//     wedgeRectCallout (Callout Wedge Rectangle Shape)
+//     wedgeRoundRectCallout (Callout Wedge Round Rectangle Shape)
 //
 // The following shows the type of text underline supported by excelize:
 //
-//    none
-//    words
-//    sng
-//    dbl
-//    heavy
-//    dotted
-//    dottedHeavy
-//    dash
-//    dashHeavy
-//    dashLong
-//    dashLongHeavy
-//    dotDash
-//    dotDashHeavy
-//    dotDotDash
-//    dotDotDashHeavy
-//    wavy
-//    wavyHeavy
-//    wavyDbl
-//
+//     none
+//     words
+//     sng
+//     dbl
+//     heavy
+//     dotted
+//     dottedHeavy
+//     dash
+//     dashHeavy
+//     dashLong
+//     dashLongHeavy
+//     dotDash
+//     dotDashHeavy
+//     dotDotDash
+//     dotDotDashHeavy
+//     wavy
+//     wavyHeavy
+//     wavyDbl
 func (f *File) AddShape(sheet, cell, format string) error {
        formatSet, err := parseFormatShapeSet(format)
        if err != nil {
index 1f2dcea..a626758 100644 (file)
--- a/sheet.go
+++ b/sheet.go
@@ -392,19 +392,18 @@ func (f *File) GetSheetIndex(sheet string) int {
 // GetSheetMap provides a function to get worksheets, chart sheets, dialog
 // sheets ID and name map of the workbook. For example:
 //
-//    f, err := excelize.OpenFile("Book1.xlsx")
-//    if err != nil {
-//        return
-//    }
-//    defer func() {
-//        if err := f.Close(); err != nil {
-//            fmt.Println(err)
-//        }
-//    }()
-//    for index, name := range f.GetSheetMap() {
-//        fmt.Println(index, name)
-//    }
-//
+//     f, err := excelize.OpenFile("Book1.xlsx")
+//     if err != nil {
+//         return
+//     }
+//     defer func() {
+//         if err := f.Close(); err != nil {
+//             fmt.Println(err)
+//         }
+//     }()
+//     for index, name := range f.GetSheetMap() {
+//         fmt.Println(index, name)
+//     }
 func (f *File) GetSheetMap() map[int]string {
        wb := f.workbookReader()
        sheetMap := map[int]string{}
@@ -588,11 +587,10 @@ func (f *File) deleteSheetFromContentTypes(target string) {
 // target worksheet index. Note that currently doesn't support duplicate
 // workbooks that contain tables, charts or pictures. For Example:
 //
-//    // Sheet1 already exists...
-//    index := f.NewSheet("Sheet2")
-//    err := f.CopySheet(1, index)
-//    return err
-//
+//     // Sheet1 already exists...
+//     index := f.NewSheet("Sheet2")
+//     err := f.CopySheet(1, index)
+//     return err
 func (f *File) CopySheet(from, to int) error {
        if from < 0 || to < 0 || from == to || f.GetSheetName(from) == "" || f.GetSheetName(to) == "" {
                return ErrSheetIdx
@@ -634,14 +632,13 @@ func (f *File) copySheet(from, to int) error {
 // worksheet has been activated, this setting will be invalidated. Sheet state
 // values as defined by https://docs.microsoft.com/en-us/dotnet/api/documentformat.openxml.spreadsheet.sheetstatevalues
 //
-//    visible
-//    hidden
-//    veryHidden
+//     visible
+//     hidden
+//     veryHidden
 //
 // For example, hide Sheet1:
 //
-//    err := f.SetSheetVisible("Sheet1", false)
-//
+//     err := f.SetSheetVisible("Sheet1", false)
 func (f *File) SetSheetVisible(sheet string, visible bool) error {
        sheet = trimSheetName(sheet)
        content := f.workbookReader()
@@ -688,50 +685,50 @@ func parseFormatPanesSet(formatSet string) (*formatPanes, error) {
 // activePane defines the pane that is active. The possible values for this
 // attribute are defined in the following table:
 //
-//     Enumeration Value              | Description
-//    --------------------------------+-------------------------------------------------------------
-//     bottomLeft (Bottom Left Pane)  | Bottom left pane, when both vertical and horizontal
-//                                    | splits are applied.
-//                                    |
-//                                    | This value is also used when only a horizontal split has
-//                                    | been applied, dividing the pane into upper and lower
-//                                    | regions. In that case, this value specifies the bottom
-//                                    | pane.
-//                                    |
-//    bottomRight (Bottom Right Pane) | Bottom right pane, when both vertical and horizontal
-//                                    | splits are applied.
-//                                    |
-//    topLeft (Top Left Pane)         | Top left pane, when both vertical and horizontal splits
-//                                    | are applied.
-//                                    |
-//                                    | This value is also used when only a horizontal split has
-//                                    | been applied, dividing the pane into upper and lower
-//                                    | regions. In that case, this value specifies the top pane.
-//                                    |
-//                                    | This value is also used when only a vertical split has
-//                                    | been applied, dividing the pane into right and left
-//                                    | regions. In that case, this value specifies the left pane
-//                                    |
-//    topRight (Top Right Pane)       | Top right pane, when both vertical and horizontal
-//                                    | splits are applied.
-//                                    |
-//                                    | This value is also used when only a vertical split has
-//                                    | been applied, dividing the pane into right and left
-//                                    | regions. In that case, this value specifies the right
-//                                    | pane.
+//      Enumeration Value              | Description
+//     --------------------------------+-------------------------------------------------------------
+//      bottomLeft (Bottom Left Pane)  | Bottom left pane, when both vertical and horizontal
+//                                     | splits are applied.
+//                                     |
+//                                     | This value is also used when only a horizontal split has
+//                                     | been applied, dividing the pane into upper and lower
+//                                     | regions. In that case, this value specifies the bottom
+//                                     | pane.
+//                                     |
+//     bottomRight (Bottom Right Pane) | Bottom right pane, when both vertical and horizontal
+//                                     | splits are applied.
+//                                     |
+//     topLeft (Top Left Pane)         | Top left pane, when both vertical and horizontal splits
+//                                     | are applied.
+//                                     |
+//                                     | This value is also used when only a horizontal split has
+//                                     | been applied, dividing the pane into upper and lower
+//                                     | regions. In that case, this value specifies the top pane.
+//                                     |
+//                                     | This value is also used when only a vertical split has
+//                                     | been applied, dividing the pane into right and left
+//                                     | regions. In that case, this value specifies the left pane
+//                                     |
+//     topRight (Top Right Pane)       | Top right pane, when both vertical and horizontal
+//                                     | splits are applied.
+//                                     |
+//                                     | This value is also used when only a vertical split has
+//                                     | been applied, dividing the pane into right and left
+//                                     | regions. In that case, this value specifies the right
+//                                     | pane.
 //
 // Pane state type is restricted to the values supported currently listed in the following table:
 //
-//     Enumeration Value              | Description
-//    --------------------------------+-------------------------------------------------------------
-//     frozen (Frozen)                | Panes are frozen, but were not split being frozen. In
-//                                    | this state, when the panes are unfrozen again, a single
-//                                    | pane results, with no split.
-//                                    |
-//                                    | In this state, the split bars are not adjustable.
-//                                    |
-//     split (Split)                  | Panes are split, but not frozen. In this state, the split
-//                                    | bars are adjustable by the user.
+//      Enumeration Value              | Description
+//     --------------------------------+-------------------------------------------------------------
+//      frozen (Frozen)                | Panes are frozen, but were not split being frozen. In
+//                                     | this state, when the panes are unfrozen again, a single
+//                                     | pane results, with no split.
+//                                     |
+//                                     | In this state, the split bars are not adjustable.
+//                                     |
+//      split (Split)                  | Panes are split, but not frozen. In this state, the split
+//                                     | bars are adjustable by the user.
 //
 // x_split (Horizontal Split Position): Horizontal position of the split, in
 // 1/20th of a point; 0 (zero) if none. If the pane is frozen, this value
@@ -751,22 +748,21 @@ func parseFormatPanesSet(formatSet string) (*formatPanes, error) {
 // An example of how to freeze column A in the Sheet1 and set the active cell on
 // Sheet1!K16:
 //
-//    f.SetPanes("Sheet1", `{"freeze":true,"split":false,"x_split":1,"y_split":0,"top_left_cell":"B1","active_pane":"topRight","panes":[{"sqref":"K16","active_cell":"K16","pane":"topRight"}]}`)
+//     f.SetPanes("Sheet1", `{"freeze":true,"split":false,"x_split":1,"y_split":0,"top_left_cell":"B1","active_pane":"topRight","panes":[{"sqref":"K16","active_cell":"K16","pane":"topRight"}]}`)
 //
 // An example of how to freeze rows 1 to 9 in the Sheet1 and set the active cell
 // ranges on Sheet1!A11:XFD11:
 //
-//    f.SetPanes("Sheet1", `{"freeze":true,"split":false,"x_split":0,"y_split":9,"top_left_cell":"A34","active_pane":"bottomLeft","panes":[{"sqref":"A11:XFD11","active_cell":"A11","pane":"bottomLeft"}]}`)
+//     f.SetPanes("Sheet1", `{"freeze":true,"split":false,"x_split":0,"y_split":9,"top_left_cell":"A34","active_pane":"bottomLeft","panes":[{"sqref":"A11:XFD11","active_cell":"A11","pane":"bottomLeft"}]}`)
 //
 // An example of how to create split panes in the Sheet1 and set the active cell
 // on Sheet1!J60:
 //
-//    f.SetPanes("Sheet1", `{"freeze":false,"split":true,"x_split":3270,"y_split":1800,"top_left_cell":"N57","active_pane":"bottomLeft","panes":[{"sqref":"I36","active_cell":"I36"},{"sqref":"G33","active_cell":"G33","pane":"topRight"},{"sqref":"J60","active_cell":"J60","pane":"bottomLeft"},{"sqref":"O60","active_cell":"O60","pane":"bottomRight"}]}`)
+//     f.SetPanes("Sheet1", `{"freeze":false,"split":true,"x_split":3270,"y_split":1800,"top_left_cell":"N57","active_pane":"bottomLeft","panes":[{"sqref":"I36","active_cell":"I36"},{"sqref":"G33","active_cell":"G33","pane":"topRight"},{"sqref":"J60","active_cell":"J60","pane":"bottomLeft"},{"sqref":"O60","active_cell":"O60","pane":"bottomRight"}]}`)
 //
 // An example of how to unfreeze and remove all panes on Sheet1:
 //
-//    f.SetPanes("Sheet1", `{"freeze":false,"split":false}`)
-//
+//     f.SetPanes("Sheet1", `{"freeze":false,"split":false}`)
 func (f *File) SetPanes(sheet, panes string) error {
        fs, _ := parseFormatPanesSet(panes)
        ws, err := f.workSheetReader(sheet)
@@ -806,8 +802,7 @@ func (f *File) SetPanes(sheet, panes string) error {
 // GetSheetVisible provides a function to get worksheet visible by given worksheet
 // name. For example, get visible state of Sheet1:
 //
-//    f.GetSheetVisible("Sheet1")
-//
+//     f.GetSheetVisible("Sheet1")
 func (f *File) GetSheetVisible(sheet string) bool {
        content, name, visible := f.workbookReader(), trimSheetName(sheet), false
        for k, v := range content.Sheets.Sheet {
@@ -828,13 +823,12 @@ func (f *File) GetSheetVisible(sheet string) bool {
 //
 // An example of search the coordinates of the value of "100" on Sheet1:
 //
-//    result, err := f.SearchSheet("Sheet1", "100")
+//     result, err := f.SearchSheet("Sheet1", "100")
 //
 // An example of search the coordinates where the numerical value in the range
 // of "0-9" of Sheet1 is described:
 //
-//    result, err := f.SearchSheet("Sheet1", "[0-9]", true)
-//
+//     result, err := f.SearchSheet("Sheet1", "[0-9]", true)
 func (f *File) SearchSheet(sheet, value string, reg ...bool) ([]string, error) {
        var (
                regSearch bool
@@ -961,95 +955,95 @@ func attrValToBool(name string, attrs []xml.Attr) (val bool, err error) {
 //
 // Headers and footers are specified using the following settings fields:
 //
-//     Fields           | Description
-//    ------------------+-----------------------------------------------------------
-//     AlignWithMargins | Align header footer margins with page margins
-//     DifferentFirst   | Different first-page header and footer indicator
-//     DifferentOddEven | Different odd and even page headers and footers indicator
-//     ScaleWithDoc     | Scale header and footer with document scaling
-//     OddFooter        | Odd Page Footer
-//     OddHeader        | Odd Header
-//     EvenFooter       | Even Page Footer
-//     EvenHeader       | Even Page Header
-//     FirstFooter      | First Page Footer
-//     FirstHeader      | First Page Header
+//      Fields           | Description
+//     ------------------+-----------------------------------------------------------
+//      AlignWithMargins | Align header footer margins with page margins
+//      DifferentFirst   | Different first-page header and footer indicator
+//      DifferentOddEven | Different odd and even page headers and footers indicator
+//      ScaleWithDoc     | Scale header and footer with document scaling
+//      OddFooter        | Odd Page Footer
+//      OddHeader        | Odd Header
+//      EvenFooter       | Even Page Footer
+//      EvenHeader       | Even Page Header
+//      FirstFooter      | First Page Footer
+//      FirstHeader      | First Page Header
 //
 // The following formatting codes can be used in 6 string type fields:
 // OddHeader, OddFooter, EvenHeader, EvenFooter, FirstFooter, FirstHeader
 //
-//     Formatting Code        | Description
-//    ------------------------+-------------------------------------------------------------------------
-//     &&                     | The character "&"
-//                            |
-//     &font-size             | Size of the text font, where font-size is a decimal font size in points
-//                            |
-//     &"font name,font type" | A text font-name string, font name, and a text font-type string,
-//                            | font type
-//                            |
-//     &"-,Regular"           | Regular text format. Toggles bold and italic modes to off
-//                            |
-//     &A                     | Current worksheet's tab name
-//                            |
-//     &B or &"-,Bold"        | Bold text format, from off to on, or vice versa. The default mode is off
-//                            |
-//     &D                     | Current date
-//                            |
-//     &C                     | Center section
-//                            |
-//     &E                     | Double-underline text format
-//                            |
-//     &F                     | Current workbook's file name
-//                            |
-//     &G                     | Drawing object as background
-//                            |
-//     &H                     | Shadow text format
-//                            |
-//     &I or &"-,Italic"      | Italic text format
-//                            |
-//     &K                     | Text font color
-//                            |
-//                            | An RGB Color is specified as RRGGBB
-//                            |
-//                            | A Theme Color is specified as TTSNNN where TT is the theme color Id,
-//                            | S is either "+" or "-" of the tint/shade value, and NNN is the
-//                            | tint/shade value
-//                            |
-//     &L                     | Left section
-//                            |
-//     &N                     | Total number of pages
-//                            |
-//     &O                     | Outline text format
-//                            |
-//     &P[[+|-]n]             | Without the optional suffix, the current page number in decimal
-//                            |
-//     &R                     | Right section
-//                            |
-//     &S                     | Strikethrough text format
-//                            |
-//     &T                     | Current time
-//                            |
-//     &U                     | Single-underline text format. If double-underline mode is on, the next
-//                            | occurrence in a section specifier toggles double-underline mode to off;
-//                            | otherwise, it toggles single-underline mode, from off to on, or vice
-//                            | versa. The default mode is off
-//                            |
-//     &X                     | Superscript text format
-//                            |
-//     &Y                     | Subscript text format
-//                            |
-//     &Z                     | Current workbook's file path
+//      Formatting Code        | Description
+//     ------------------------+-------------------------------------------------------------------------
+//      &&                     | The character "&"
+//                             |
+//      &font-size             | Size of the text font, where font-size is a decimal font size in points
+//                             |
+//      &"font name,font type" | A text font-name string, font name, and a text font-type string,
+//                             | font type
+//                             |
+//      &"-,Regular"           | Regular text format. Toggles bold and italic modes to off
+//                             |
+//      &A                     | Current worksheet's tab name
+//                             |
+//      &B or &"-,Bold"        | Bold text format, from off to on, or vice versa. The default mode is off
+//                             |
+//      &D                     | Current date
+//                             |
+//      &C                     | Center section
+//                             |
+//      &E                     | Double-underline text format
+//                             |
+//      &F                     | Current workbook's file name
+//                             |
+//      &G                     | Drawing object as background
+//                             |
+//      &H                     | Shadow text format
+//                             |
+//      &I or &"-,Italic"      | Italic text format
+//                             |
+//      &K                     | Text font color
+//                             |
+//                             | An RGB Color is specified as RRGGBB
+//                             |
+//                             | A Theme Color is specified as TTSNNN where TT is the theme color Id,
+//                             | S is either "+" or "-" of the tint/shade value, and NNN is the
+//                             | tint/shade value
+//                             |
+//      &L                     | Left section
+//                             |
+//      &N                     | Total number of pages
+//                             |
+//      &O                     | Outline text format
+//                             |
+//      &P[[+|-]n]             | Without the optional suffix, the current page number in decimal
+//                             |
+//      &R                     | Right section
+//                             |
+//      &S                     | Strikethrough text format
+//                             |
+//      &T                     | Current time
+//                             |
+//      &U                     | Single-underline text format. If double-underline mode is on, the next
+//                             | occurrence in a section specifier toggles double-underline mode to off;
+//                             | otherwise, it toggles single-underline mode, from off to on, or vice
+//                             | versa. The default mode is off
+//                             |
+//      &X                     | Superscript text format
+//                             |
+//      &Y                     | Subscript text format
+//                             |
+//      &Z                     | Current workbook's file path
 //
 // For example:
 //
-//    err := f.SetHeaderFooter("Sheet1", &excelize.FormatHeaderFooter{
-//        DifferentFirst:   true,
-//        DifferentOddEven: true,
-//        OddHeader:        "&R&P",
-//        OddFooter:        "&C&F",
-//        EvenHeader:       "&L&P",
-//        EvenFooter:       "&L&D&R&T",
-//        FirstHeader:      `&CCenter &"-,Bold"Bold&"-,Regular"HeaderU+000A&D`,
-//    })
+//     err := f.SetHeaderFooter("Sheet1", &excelize.FormatHeaderFooter{
+//         DifferentFirst:   true,
+//         DifferentOddEven: true,
+//         OddHeader:        "&R&P",
+//         OddFooter:        "&C&F",
+//         EvenHeader:       "&L&P",
+//         EvenFooter:       "&L&D&R&T",
+//         FirstHeader:      `&CCenter &"-,Bold"Bold&"-,Regular"HeaderU+000A&D`,
+//     })
 //
 // This example shows:
 //
@@ -1071,7 +1065,6 @@ func attrValToBool(name string, attrs []xml.Attr) (val bool, err error) {
 // that same page
 //
 // - No footer on the first page
-//
 func (f *File) SetHeaderFooter(sheet string, settings *FormatHeaderFooter) error {
        ws, err := f.workSheetReader(sheet)
        if err != nil {
@@ -1112,12 +1105,11 @@ func (f *File) SetHeaderFooter(sheet string, settings *FormatHeaderFooter) error
 // specified, will be using the XOR algorithm as default. For example, protect
 // Sheet1 with protection settings:
 //
-//    err := f.ProtectSheet("Sheet1", &excelize.FormatSheetProtection{
-//        AlgorithmName: "SHA-512",
-//        Password:      "password",
-//        EditScenarios: false,
-//    })
-//
+//     err := f.ProtectSheet("Sheet1", &excelize.FormatSheetProtection{
+//         AlgorithmName: "SHA-512",
+//         Password:      "password",
+//         EditScenarios: false,
+//     })
 func (f *File) ProtectSheet(sheet string, settings *FormatSheetProtection) error {
        ws, err := f.workSheetReader(sheet)
        if err != nil {
@@ -1377,135 +1369,134 @@ func (p *PageLayoutScale) getPageLayout(ps *xlsxPageSetUp) {
 //
 // Available options:
 //
-//    BlackAndWhite(bool)
-//    FirstPageNumber(uint)
-//    PageLayoutOrientation(string)
-//    PageLayoutPaperSize(int)
-//    FitToHeight(int)
-//    FitToWidth(int)
-//    PageLayoutScale(uint)
+//     BlackAndWhite(bool)
+//     FirstPageNumber(uint)
+//     PageLayoutOrientation(string)
+//     PageLayoutPaperSize(int)
+//     FitToHeight(int)
+//     FitToWidth(int)
+//     PageLayoutScale(uint)
 //
 // The following shows the paper size sorted by excelize index number:
 //
-//     Index | Paper Size
-//    -------+-----------------------------------------------
-//       1   | Letter paper (8.5 in. by 11 in.)
-//       2   | Letter small paper (8.5 in. by 11 in.)
-//       3   | Tabloid paper (11 in. by 17 in.)
-//       4   | Ledger paper (17 in. by 11 in.)
-//       5   | Legal paper (8.5 in. by 14 in.)
-//       6   | Statement paper (5.5 in. by 8.5 in.)
-//       7   | Executive paper (7.25 in. by 10.5 in.)
-//       8   | A3 paper (297 mm by 420 mm)
-//       9   | A4 paper (210 mm by 297 mm)
-//       10  | A4 small paper (210 mm by 297 mm)
-//       11  | A5 paper (148 mm by 210 mm)
-//       12  | B4 paper (250 mm by 353 mm)
-//       13  | B5 paper (176 mm by 250 mm)
-//       14  | Folio paper (8.5 in. by 13 in.)
-//       15  | Quarto paper (215 mm by 275 mm)
-//       16  | Standard paper (10 in. by 14 in.)
-//       17  | Standard paper (11 in. by 17 in.)
-//       18  | Note paper (8.5 in. by 11 in.)
-//       19  | #9 envelope (3.875 in. by 8.875 in.)
-//       20  | #10 envelope (4.125 in. by 9.5 in.)
-//       21  | #11 envelope (4.5 in. by 10.375 in.)
-//       22  | #12 envelope (4.75 in. by 11 in.)
-//       23  | #14 envelope (5 in. by 11.5 in.)
-//       24  | C paper (17 in. by 22 in.)
-//       25  | D paper (22 in. by 34 in.)
-//       26  | E paper (34 in. by 44 in.)
-//       27  | DL envelope (110 mm by 220 mm)
-//       28  | C5 envelope (162 mm by 229 mm)
-//       29  | C3 envelope (324 mm by 458 mm)
-//       30  | C4 envelope (229 mm by 324 mm)
-//       31  | C6 envelope (114 mm by 162 mm)
-//       32  | C65 envelope (114 mm by 229 mm)
-//       33  | B4 envelope (250 mm by 353 mm)
-//       34  | B5 envelope (176 mm by 250 mm)
-//       35  | B6 envelope (176 mm by 125 mm)
-//       36  | Italy envelope (110 mm by 230 mm)
-//       37  | Monarch envelope (3.875 in. by 7.5 in.).
-//       38  | 6 3/4 envelope (3.625 in. by 6.5 in.)
-//       39  | US standard fanfold (14.875 in. by 11 in.)
-//       40  | German standard fanfold (8.5 in. by 12 in.)
-//       41  | German legal fanfold (8.5 in. by 13 in.)
-//       42  | ISO B4 (250 mm by 353 mm)
-//       43  | Japanese postcard (100 mm by 148 mm)
-//       44  | Standard paper (9 in. by 11 in.)
-//       45  | Standard paper (10 in. by 11 in.)
-//       46  | Standard paper (15 in. by 11 in.)
-//       47  | Invite envelope (220 mm by 220 mm)
-//       50  | Letter extra paper (9.275 in. by 12 in.)
-//       51  | Legal extra paper (9.275 in. by 15 in.)
-//       52  | Tabloid extra paper (11.69 in. by 18 in.)
-//       53  | A4 extra paper (236 mm by 322 mm)
-//       54  | Letter transverse paper (8.275 in. by 11 in.)
-//       55  | A4 transverse paper (210 mm by 297 mm)
-//       56  | Letter extra transverse paper (9.275 in. by 12 in.)
-//       57  | SuperA/SuperA/A4 paper (227 mm by 356 mm)
-//       58  | SuperB/SuperB/A3 paper (305 mm by 487 mm)
-//       59  | Letter plus paper (8.5 in. by 12.69 in.)
-//       60  | A4 plus paper (210 mm by 330 mm)
-//       61  | A5 transverse paper (148 mm by 210 mm)
-//       62  | JIS B5 transverse paper (182 mm by 257 mm)
-//       63  | A3 extra paper (322 mm by 445 mm)
-//       64  | A5 extra paper (174 mm by 235 mm)
-//       65  | ISO B5 extra paper (201 mm by 276 mm)
-//       66  | A2 paper (420 mm by 594 mm)
-//       67  | A3 transverse paper (297 mm by 420 mm)
-//       68  | A3 extra transverse paper (322 mm by 445 mm)
-//       69  | Japanese Double Postcard (200 mm x 148 mm)
-//       70  | A6 (105 mm x 148 mm)
-//       71  | Japanese Envelope Kaku #2
-//       72  | Japanese Envelope Kaku #3
-//       73  | Japanese Envelope Chou #3
-//       74  | Japanese Envelope Chou #4
-//       75  | Letter Rotated (11in x 8 1/2 11 in)
-//       76  | A3 Rotated (420 mm x 297 mm)
-//       77  | A4 Rotated (297 mm x 210 mm)
-//       78  | A5 Rotated (210 mm x 148 mm)
-//       79  | B4 (JIS) Rotated (364 mm x 257 mm)
-//       80  | B5 (JIS) Rotated (257 mm x 182 mm)
-//       81  | Japanese Postcard Rotated (148 mm x 100 mm)
-//       82  | Double Japanese Postcard Rotated (148 mm x 200 mm)
-//       83  | A6 Rotated (148 mm x 105 mm)
-//       84  | Japanese Envelope Kaku #2 Rotated
-//       85  | Japanese Envelope Kaku #3 Rotated
-//       86  | Japanese Envelope Chou #3 Rotated
-//       87  | Japanese Envelope Chou #4 Rotated
-//       88  | B6 (JIS) (128 mm x 182 mm)
-//       89  | B6 (JIS) Rotated (182 mm x 128 mm)
-//       90  | (12 in x 11 in)
-//       91  | Japanese Envelope You #4
-//       92  | Japanese Envelope You #4 Rotated
-//       93  | PRC 16K (146 mm x 215 mm)
-//       94  | PRC 32K (97 mm x 151 mm)
-//       95  | PRC 32K(Big) (97 mm x 151 mm)
-//       96  | PRC Envelope #1 (102 mm x 165 mm)
-//       97  | PRC Envelope #2 (102 mm x 176 mm)
-//       98  | PRC Envelope #3 (125 mm x 176 mm)
-//       99  | PRC Envelope #4 (110 mm x 208 mm)
-//       100 | PRC Envelope #5 (110 mm x 220 mm)
-//       101 | PRC Envelope #6 (120 mm x 230 mm)
-//       102 | PRC Envelope #7 (160 mm x 230 mm)
-//       103 | PRC Envelope #8 (120 mm x 309 mm)
-//       104 | PRC Envelope #9 (229 mm x 324 mm)
-//       105 | PRC Envelope #10 (324 mm x 458 mm)
-//       106 | PRC 16K Rotated
-//       107 | PRC 32K Rotated
-//       108 | PRC 32K(Big) Rotated
-//       109 | PRC Envelope #1 Rotated (165 mm x 102 mm)
-//       110 | PRC Envelope #2 Rotated (176 mm x 102 mm)
-//       111 | PRC Envelope #3 Rotated (176 mm x 125 mm)
-//       112 | PRC Envelope #4 Rotated (208 mm x 110 mm)
-//       113 | PRC Envelope #5 Rotated (220 mm x 110 mm)
-//       114 | PRC Envelope #6 Rotated (230 mm x 120 mm)
-//       115 | PRC Envelope #7 Rotated (230 mm x 160 mm)
-//       116 | PRC Envelope #8 Rotated (309 mm x 120 mm)
-//       117 | PRC Envelope #9 Rotated (324 mm x 229 mm)
-//       118 | PRC Envelope #10 Rotated (458 mm x 324 mm)
-//
+//      Index | Paper Size
+//     -------+-----------------------------------------------
+//        1   | Letter paper (8.5 in. by 11 in.)
+//        2   | Letter small paper (8.5 in. by 11 in.)
+//        3   | Tabloid paper (11 in. by 17 in.)
+//        4   | Ledger paper (17 in. by 11 in.)
+//        5   | Legal paper (8.5 in. by 14 in.)
+//        6   | Statement paper (5.5 in. by 8.5 in.)
+//        7   | Executive paper (7.25 in. by 10.5 in.)
+//        8   | A3 paper (297 mm by 420 mm)
+//        9   | A4 paper (210 mm by 297 mm)
+//        10  | A4 small paper (210 mm by 297 mm)
+//        11  | A5 paper (148 mm by 210 mm)
+//        12  | B4 paper (250 mm by 353 mm)
+//        13  | B5 paper (176 mm by 250 mm)
+//        14  | Folio paper (8.5 in. by 13 in.)
+//        15  | Quarto paper (215 mm by 275 mm)
+//        16  | Standard paper (10 in. by 14 in.)
+//        17  | Standard paper (11 in. by 17 in.)
+//        18  | Note paper (8.5 in. by 11 in.)
+//        19  | #9 envelope (3.875 in. by 8.875 in.)
+//        20  | #10 envelope (4.125 in. by 9.5 in.)
+//        21  | #11 envelope (4.5 in. by 10.375 in.)
+//        22  | #12 envelope (4.75 in. by 11 in.)
+//        23  | #14 envelope (5 in. by 11.5 in.)
+//        24  | C paper (17 in. by 22 in.)
+//        25  | D paper (22 in. by 34 in.)
+//        26  | E paper (34 in. by 44 in.)
+//        27  | DL envelope (110 mm by 220 mm)
+//        28  | C5 envelope (162 mm by 229 mm)
+//        29  | C3 envelope (324 mm by 458 mm)
+//        30  | C4 envelope (229 mm by 324 mm)
+//        31  | C6 envelope (114 mm by 162 mm)
+//        32  | C65 envelope (114 mm by 229 mm)
+//        33  | B4 envelope (250 mm by 353 mm)
+//        34  | B5 envelope (176 mm by 250 mm)
+//        35  | B6 envelope (176 mm by 125 mm)
+//        36  | Italy envelope (110 mm by 230 mm)
+//        37  | Monarch envelope (3.875 in. by 7.5 in.).
+//        38  | 6 3/4 envelope (3.625 in. by 6.5 in.)
+//        39  | US standard fanfold (14.875 in. by 11 in.)
+//        40  | German standard fanfold (8.5 in. by 12 in.)
+//        41  | German legal fanfold (8.5 in. by 13 in.)
+//        42  | ISO B4 (250 mm by 353 mm)
+//        43  | Japanese postcard (100 mm by 148 mm)
+//        44  | Standard paper (9 in. by 11 in.)
+//        45  | Standard paper (10 in. by 11 in.)
+//        46  | Standard paper (15 in. by 11 in.)
+//        47  | Invite envelope (220 mm by 220 mm)
+//        50  | Letter extra paper (9.275 in. by 12 in.)
+//        51  | Legal extra paper (9.275 in. by 15 in.)
+//        52  | Tabloid extra paper (11.69 in. by 18 in.)
+//        53  | A4 extra paper (236 mm by 322 mm)
+//        54  | Letter transverse paper (8.275 in. by 11 in.)
+//        55  | A4 transverse paper (210 mm by 297 mm)
+//        56  | Letter extra transverse paper (9.275 in. by 12 in.)
+//        57  | SuperA/SuperA/A4 paper (227 mm by 356 mm)
+//        58  | SuperB/SuperB/A3 paper (305 mm by 487 mm)
+//        59  | Letter plus paper (8.5 in. by 12.69 in.)
+//        60  | A4 plus paper (210 mm by 330 mm)
+//        61  | A5 transverse paper (148 mm by 210 mm)
+//        62  | JIS B5 transverse paper (182 mm by 257 mm)
+//        63  | A3 extra paper (322 mm by 445 mm)
+//        64  | A5 extra paper (174 mm by 235 mm)
+//        65  | ISO B5 extra paper (201 mm by 276 mm)
+//        66  | A2 paper (420 mm by 594 mm)
+//        67  | A3 transverse paper (297 mm by 420 mm)
+//        68  | A3 extra transverse paper (322 mm by 445 mm)
+//        69  | Japanese Double Postcard (200 mm x 148 mm)
+//        70  | A6 (105 mm x 148 mm)
+//        71  | Japanese Envelope Kaku #2
+//        72  | Japanese Envelope Kaku #3
+//        73  | Japanese Envelope Chou #3
+//        74  | Japanese Envelope Chou #4
+//        75  | Letter Rotated (11in x 8 1/2 11 in)
+//        76  | A3 Rotated (420 mm x 297 mm)
+//        77  | A4 Rotated (297 mm x 210 mm)
+//        78  | A5 Rotated (210 mm x 148 mm)
+//        79  | B4 (JIS) Rotated (364 mm x 257 mm)
+//        80  | B5 (JIS) Rotated (257 mm x 182 mm)
+//        81  | Japanese Postcard Rotated (148 mm x 100 mm)
+//        82  | Double Japanese Postcard Rotated (148 mm x 200 mm)
+//        83  | A6 Rotated (148 mm x 105 mm)
+//        84  | Japanese Envelope Kaku #2 Rotated
+//        85  | Japanese Envelope Kaku #3 Rotated
+//        86  | Japanese Envelope Chou #3 Rotated
+//        87  | Japanese Envelope Chou #4 Rotated
+//        88  | B6 (JIS) (128 mm x 182 mm)
+//        89  | B6 (JIS) Rotated (182 mm x 128 mm)
+//        90  | (12 in x 11 in)
+//        91  | Japanese Envelope You #4
+//        92  | Japanese Envelope You #4 Rotated
+//        93  | PRC 16K (146 mm x 215 mm)
+//        94  | PRC 32K (97 mm x 151 mm)
+//        95  | PRC 32K(Big) (97 mm x 151 mm)
+//        96  | PRC Envelope #1 (102 mm x 165 mm)
+//        97  | PRC Envelope #2 (102 mm x 176 mm)
+//        98  | PRC Envelope #3 (125 mm x 176 mm)
+//        99  | PRC Envelope #4 (110 mm x 208 mm)
+//        100 | PRC Envelope #5 (110 mm x 220 mm)
+//        101 | PRC Envelope #6 (120 mm x 230 mm)
+//        102 | PRC Envelope #7 (160 mm x 230 mm)
+//        103 | PRC Envelope #8 (120 mm x 309 mm)
+//        104 | PRC Envelope #9 (229 mm x 324 mm)
+//        105 | PRC Envelope #10 (324 mm x 458 mm)
+//        106 | PRC 16K Rotated
+//        107 | PRC 32K Rotated
+//        108 | PRC 32K(Big) Rotated
+//        109 | PRC Envelope #1 Rotated (165 mm x 102 mm)
+//        110 | PRC Envelope #2 Rotated (176 mm x 102 mm)
+//        111 | PRC Envelope #3 Rotated (176 mm x 125 mm)
+//        112 | PRC Envelope #4 Rotated (208 mm x 110 mm)
+//        113 | PRC Envelope #5 Rotated (220 mm x 110 mm)
+//        114 | PRC Envelope #6 Rotated (230 mm x 120 mm)
+//        115 | PRC Envelope #7 Rotated (230 mm x 160 mm)
+//        116 | PRC Envelope #8 Rotated (309 mm x 120 mm)
+//        117 | PRC Envelope #9 Rotated (324 mm x 229 mm)
+//        118 | PRC Envelope #10 Rotated (458 mm x 324 mm)
 func (f *File) SetPageLayout(sheet string, opts ...PageLayoutOption) error {
        s, err := f.workSheetReader(sheet)
        if err != nil {
@@ -1526,10 +1517,11 @@ func (f *File) SetPageLayout(sheet string, opts ...PageLayoutOption) error {
 // GetPageLayout provides a function to gets worksheet page layout.
 //
 // Available options:
-//   PageLayoutOrientation(string)
-//   PageLayoutPaperSize(int)
-//   FitToHeight(int)
-//   FitToWidth(int)
+//
+//     PageLayoutOrientation(string)
+//     PageLayoutPaperSize(int)
+//     FitToHeight(int)
+//     FitToWidth(int)
 func (f *File) GetPageLayout(sheet string, opts ...PageLayoutOptionPtr) error {
        s, err := f.workSheetReader(sheet)
        if err != nil {
@@ -1547,13 +1539,12 @@ func (f *File) GetPageLayout(sheet string, opts ...PageLayoutOptionPtr) error {
 // or worksheet. If not specified scope, the default scope is workbook.
 // For example:
 //
-//    f.SetDefinedName(&excelize.DefinedName{
-//        Name:     "Amount",
-//        RefersTo: "Sheet1!$A$2:$D$5",
-//        Comment:  "defined name comment",
-//        Scope:    "Sheet2",
-//    })
-//
+//     f.SetDefinedName(&excelize.DefinedName{
+//         Name:     "Amount",
+//         RefersTo: "Sheet1!$A$2:$D$5",
+//         Comment:  "defined name comment",
+//         Scope:    "Sheet2",
+//     })
 func (f *File) SetDefinedName(definedName *DefinedName) error {
        wb := f.workbookReader()
        d := xlsxDefinedName{
@@ -1589,11 +1580,10 @@ func (f *File) SetDefinedName(definedName *DefinedName) error {
 // workbook or worksheet. If not specified scope, the default scope is
 // workbook. For example:
 //
-//    f.DeleteDefinedName(&excelize.DefinedName{
-//        Name:     "Amount",
-//        Scope:    "Sheet2",
-//    })
-//
+//     f.DeleteDefinedName(&excelize.DefinedName{
+//         Name:     "Amount",
+//         Scope:    "Sheet2",
+//     })
 func (f *File) DeleteDefinedName(definedName *DefinedName) error {
        wb := f.workbookReader()
        if wb.DefinedNames != nil {
index 65939c1..8675c75 100644 (file)
@@ -238,16 +238,17 @@ func (o *AutoPageBreaks) getSheetPrOption(pr *xlsxSheetPr) {
 // SetSheetPrOptions provides a function to sets worksheet properties.
 //
 // Available options:
-//   CodeName(string)
-//   EnableFormatConditionsCalculation(bool)
-//   Published(bool)
-//   FitToPage(bool)
-//   TabColorIndexed(int)
-//   TabColorRGB(string)
-//   TabColorTheme(int)
-//   TabColorTint(float64)
-//   AutoPageBreaks(bool)
-//   OutlineSummaryBelow(bool)
+//
+//     CodeName(string)
+//     EnableFormatConditionsCalculation(bool)
+//     Published(bool)
+//     FitToPage(bool)
+//     TabColorIndexed(int)
+//     TabColorRGB(string)
+//     TabColorTheme(int)
+//     TabColorTint(float64)
+//     AutoPageBreaks(bool)
+//     OutlineSummaryBelow(bool)
 func (f *File) SetSheetPrOptions(sheet string, opts ...SheetPrOption) error {
        ws, err := f.workSheetReader(sheet)
        if err != nil {
@@ -268,16 +269,17 @@ func (f *File) SetSheetPrOptions(sheet string, opts ...SheetPrOption) error {
 // GetSheetPrOptions provides a function to gets worksheet properties.
 //
 // Available options:
-//   CodeName(string)
-//   EnableFormatConditionsCalculation(bool)
-//   Published(bool)
-//   FitToPage(bool)
-//   TabColorIndexed(int)
-//   TabColorRGB(string)
-//   TabColorTheme(int)
-//   TabColorTint(float64)
-//   AutoPageBreaks(bool)
-//   OutlineSummaryBelow(bool)
+//
+//     CodeName(string)
+//     EnableFormatConditionsCalculation(bool)
+//     Published(bool)
+//     FitToPage(bool)
+//     TabColorIndexed(int)
+//     TabColorRGB(string)
+//     TabColorTheme(int)
+//     TabColorTint(float64)
+//     AutoPageBreaks(bool)
+//     OutlineSummaryBelow(bool)
 func (f *File) GetSheetPrOptions(sheet string, opts ...SheetPrOptionPtr) error {
        ws, err := f.workSheetReader(sheet)
        if err != nil {
@@ -412,12 +414,13 @@ type PageMarginsOptionsPtr interface {
 // SetPageMargins provides a function to set worksheet page margins.
 //
 // Available options:
-//   PageMarginBottom(float64)
-//   PageMarginFooter(float64)
-//   PageMarginHeader(float64)
-//   PageMarginLeft(float64)
-//   PageMarginRight(float64)
-//   PageMarginTop(float64)
+//
+//     PageMarginBottom(float64)
+//     PageMarginFooter(float64)
+//     PageMarginHeader(float64)
+//     PageMarginLeft(float64)
+//     PageMarginRight(float64)
+//     PageMarginTop(float64)
 func (f *File) SetPageMargins(sheet string, opts ...PageMarginsOptions) error {
        s, err := f.workSheetReader(sheet)
        if err != nil {
@@ -438,12 +441,13 @@ func (f *File) SetPageMargins(sheet string, opts ...PageMarginsOptions) error {
 // GetPageMargins provides a function to get worksheet page margins.
 //
 // Available options:
-//   PageMarginBottom(float64)
-//   PageMarginFooter(float64)
-//   PageMarginHeader(float64)
-//   PageMarginLeft(float64)
-//   PageMarginRight(float64)
-//   PageMarginTop(float64)
+//
+//     PageMarginBottom(float64)
+//     PageMarginFooter(float64)
+//     PageMarginHeader(float64)
+//     PageMarginLeft(float64)
+//     PageMarginRight(float64)
+//     PageMarginTop(float64)
 func (f *File) GetPageMargins(sheet string, opts ...PageMarginsOptionsPtr) error {
        s, err := f.workSheetReader(sheet)
        if err != nil {
@@ -605,13 +609,14 @@ func (p *ThickBottom) getSheetFormatPr(fp *xlsxSheetFormatPr) {
 // SetSheetFormatPr provides a function to set worksheet formatting properties.
 //
 // Available options:
-//   BaseColWidth(uint8)
-//   DefaultColWidth(float64)
-//   DefaultRowHeight(float64)
-//   CustomHeight(bool)
-//   ZeroHeight(bool)
-//   ThickTop(bool)
-//   ThickBottom(bool)
+//
+//     BaseColWidth(uint8)
+//     DefaultColWidth(float64)
+//     DefaultRowHeight(float64)
+//     CustomHeight(bool)
+//     ZeroHeight(bool)
+//     ThickTop(bool)
+//     ThickBottom(bool)
 func (f *File) SetSheetFormatPr(sheet string, opts ...SheetFormatPrOptions) error {
        s, err := f.workSheetReader(sheet)
        if err != nil {
@@ -631,13 +636,14 @@ func (f *File) SetSheetFormatPr(sheet string, opts ...SheetFormatPrOptions) erro
 // GetSheetFormatPr provides a function to get worksheet formatting properties.
 //
 // Available options:
-//   BaseColWidth(uint8)
-//   DefaultColWidth(float64)
-//   DefaultRowHeight(float64)
-//   CustomHeight(bool)
-//   ZeroHeight(bool)
-//   ThickTop(bool)
-//   ThickBottom(bool)
+//
+//     BaseColWidth(uint8)
+//     DefaultColWidth(float64)
+//     DefaultRowHeight(float64)
+//     CustomHeight(bool)
+//     ZeroHeight(bool)
+//     ThickTop(bool)
+//     ThickBottom(bool)
 func (f *File) GetSheetFormatPr(sheet string, opts ...SheetFormatPrOptionsPtr) error {
        s, err := f.workSheetReader(sheet)
        if err != nil {
index 05312ca..3736588 100644 (file)
@@ -185,21 +185,20 @@ func (f *File) getSheetView(sheet string, viewIndex int) (*xlsxSheetView, error)
 //
 // Available options:
 //
-//    DefaultGridColor(bool)
-//    ShowFormulas(bool)
-//    ShowGridLines(bool)
-//    ShowRowColHeaders(bool)
-//    ShowZeros(bool)
-//    RightToLeft(bool)
-//    ShowRuler(bool)
-//    View(string)
-//    TopLeftCell(string)
-//    ZoomScale(float64)
+//     DefaultGridColor(bool)
+//     ShowFormulas(bool)
+//     ShowGridLines(bool)
+//     ShowRowColHeaders(bool)
+//     ShowZeros(bool)
+//     RightToLeft(bool)
+//     ShowRuler(bool)
+//     View(string)
+//     TopLeftCell(string)
+//     ZoomScale(float64)
 //
 // Example:
 //
-//    err = f.SetSheetViewOptions("Sheet1", -1, ShowGridLines(false))
-//
+//     err = f.SetSheetViewOptions("Sheet1", -1, ShowGridLines(false))
 func (f *File) SetSheetViewOptions(sheet string, viewIndex int, opts ...SheetViewOption) error {
        view, err := f.getSheetView(sheet, viewIndex)
        if err != nil {
@@ -217,22 +216,21 @@ func (f *File) SetSheetViewOptions(sheet string, viewIndex int, opts ...SheetVie
 //
 // Available options:
 //
-//    DefaultGridColor(bool)
-//    ShowFormulas(bool)
-//    ShowGridLines(bool)
-//    ShowRowColHeaders(bool)
-//    ShowZeros(bool)
-//    RightToLeft(bool)
-//    ShowRuler(bool)
-//    View(string)
-//    TopLeftCell(string)
-//    ZoomScale(float64)
+//     DefaultGridColor(bool)
+//     ShowFormulas(bool)
+//     ShowGridLines(bool)
+//     ShowRowColHeaders(bool)
+//     ShowZeros(bool)
+//     RightToLeft(bool)
+//     ShowRuler(bool)
+//     View(string)
+//     TopLeftCell(string)
+//     ZoomScale(float64)
 //
 // Example:
 //
-//    var showGridLines excelize.ShowGridLines
-//    err = f.GetSheetViewOptions("Sheet1", -1, &showGridLines)
-//
+//     var showGridLines excelize.ShowGridLines
+//     err = f.GetSheetViewOptions("Sheet1", -1, &showGridLines)
 func (f *File) GetSheetViewOptions(sheet string, viewIndex int, opts ...SheetViewOptionPtr) error {
        view, err := f.getSheetView(sheet, viewIndex)
        if err != nil {
index 880724a..bf1e09c 100644 (file)
@@ -365,29 +365,28 @@ func (f *File) addSparklineGroupByStyle(ID int) *xlsxX14SparklineGroup {
 // Excel 2007, but they won't be displayed. For example, add a grouped
 // sparkline. Changes are applied to all three:
 //
-//    err := f.AddSparkline("Sheet1", &excelize.SparklineOption{
-//        Location: []string{"A1", "A2", "A3"},
-//        Range:    []string{"Sheet2!A1:J1", "Sheet2!A2:J2", "Sheet2!A3:J3"},
-//        Markers:  true,
-//    })
+//     err := f.AddSparkline("Sheet1", &excelize.SparklineOption{
+//         Location: []string{"A1", "A2", "A3"},
+//         Range:    []string{"Sheet2!A1:J1", "Sheet2!A2:J2", "Sheet2!A3:J3"},
+//         Markers:  true,
+//     })
 //
 // The following shows the formatting options of sparkline supported by excelize:
 //
-//     Parameter | Description
-//    -----------+--------------------------------------------
-//     Location  | Required, must have the same number with 'Range' parameter
-//     Range     | Required, must have the same number with 'Location' parameter
-//     Type      | Enumeration value: line, column, win_loss
-//     Style     | Value range: 0 - 35
-//     Hight     | Toggle sparkline high points
-//     Low       | Toggle sparkline low points
-//     First     | Toggle sparkline first points
-//     Last      | Toggle sparkline last points
-//     Negative  | Toggle sparkline negative points
-//     Markers   | Toggle sparkline markers
-//     ColorAxis | An RGB Color is specified as RRGGBB
-//     Axis      | Show sparkline axis
-//
+//      Parameter | Description
+//     -----------+--------------------------------------------
+//      Location  | Required, must have the same number with 'Range' parameter
+//      Range     | Required, must have the same number with 'Location' parameter
+//      Type      | Enumeration value: line, column, win_loss
+//      Style     | Value range: 0 - 35
+//      Hight     | Toggle sparkline high points
+//      Low       | Toggle sparkline low points
+//      First     | Toggle sparkline first points
+//      Last      | Toggle sparkline last points
+//      Negative  | Toggle sparkline negative points
+//      Markers   | Toggle sparkline markers
+//      ColorAxis | An RGB Color is specified as RRGGBB
+//      Axis      | Show sparkline axis
 func (f *File) AddSparkline(sheet string, opt *SparklineOption) (err error) {
        var (
                ws                             *xlsxWorksheet
index 52e65a4..91ae78a 100644 (file)
--- a/stream.go
+++ b/stream.go
@@ -47,49 +47,48 @@ type StreamWriter struct {
 // example, set data for worksheet of size 102400 rows x 50 columns with
 // numbers and style:
 //
-//    file := excelize.NewFile()
-//    streamWriter, err := file.NewStreamWriter("Sheet1")
-//    if err != nil {
-//        fmt.Println(err)
-//    }
-//    styleID, err := file.NewStyle(&excelize.Style{Font: &excelize.Font{Color: "#777777"}})
-//    if err != nil {
-//        fmt.Println(err)
-//    }
-//    if err := streamWriter.SetRow("A1", []interface{}{excelize.Cell{StyleID: styleID, Value: "Data"}},
-//        excelize.RowOpts{Height: 45, Hidden: false}); err != nil {
-//        fmt.Println(err)
-//    }
-//    for rowID := 2; rowID <= 102400; rowID++ {
-//        row := make([]interface{}, 50)
-//        for colID := 0; colID < 50; colID++ {
-//            row[colID] = rand.Intn(640000)
-//        }
-//        cell, _ := excelize.CoordinatesToCellName(1, rowID)
-//        if err := streamWriter.SetRow(cell, row); err != nil {
-//            fmt.Println(err)
-//        }
-//    }
-//    if err := streamWriter.Flush(); err != nil {
-//        fmt.Println(err)
-//    }
-//    if err := file.SaveAs("Book1.xlsx"); err != nil {
-//        fmt.Println(err)
-//    }
+//     file := excelize.NewFile()
+//     streamWriter, err := file.NewStreamWriter("Sheet1")
+//     if err != nil {
+//         fmt.Println(err)
+//     }
+//     styleID, err := file.NewStyle(&excelize.Style{Font: &excelize.Font{Color: "#777777"}})
+//     if err != nil {
+//         fmt.Println(err)
+//     }
+//     if err := streamWriter.SetRow("A1", []interface{}{excelize.Cell{StyleID: styleID, Value: "Data"}},
+//         excelize.RowOpts{Height: 45, Hidden: false}); err != nil {
+//         fmt.Println(err)
+//     }
+//     for rowID := 2; rowID <= 102400; rowID++ {
+//         row := make([]interface{}, 50)
+//         for colID := 0; colID < 50; colID++ {
+//             row[colID] = rand.Intn(640000)
+//         }
+//         cell, _ := excelize.CoordinatesToCellName(1, rowID)
+//         if err := streamWriter.SetRow(cell, row); err != nil {
+//             fmt.Println(err)
+//         }
+//     }
+//     if err := streamWriter.Flush(); err != nil {
+//         fmt.Println(err)
+//     }
+//     if err := file.SaveAs("Book1.xlsx"); err != nil {
+//         fmt.Println(err)
+//     }
 //
 // Set cell value and cell formula for a worksheet with stream writer:
 //
-//    err := streamWriter.SetRow("A1", []interface{}{
-//        excelize.Cell{Value: 1},
-//        excelize.Cell{Value: 2},
-//        excelize.Cell{Formula: "SUM(A1,B1)"}});
+//     err := streamWriter.SetRow("A1", []interface{}{
+//         excelize.Cell{Value: 1},
+//         excelize.Cell{Value: 2},
+//         excelize.Cell{Formula: "SUM(A1,B1)"}});
 //
 // Set cell value and rows style for a worksheet with stream writer:
 //
-//    err := streamWriter.SetRow("A1", []interface{}{
-//        excelize.Cell{Value: 1}},
-//        excelize.RowOpts{StyleID: styleID, Height: 20, Hidden: false});
-//
+//     err := streamWriter.SetRow("A1", []interface{}{
+//         excelize.Cell{Value: 1}},
+//         excelize.RowOpts{StyleID: styleID, Height: 20, Hidden: false});
 func (f *File) NewStreamWriter(sheet string) (*StreamWriter, error) {
        sheetID := f.getSheetID(sheet)
        if sheetID == -1 {
@@ -120,18 +119,18 @@ func (f *File) NewStreamWriter(sheet string) (*StreamWriter, error) {
 // AddTable creates an Excel table for the StreamWriter using the given
 // coordinate area and format set. For example, create a table of A1:D5:
 //
-//    err := sw.AddTable("A1", "D5", "")
+//     err := sw.AddTable("A1", "D5", "")
 //
 // Create a table of F2:H6 with format set:
 //
-//    err := sw.AddTable("F2", "H6", `{
-//        "table_name": "table",
-//        "table_style": "TableStyleMedium2",
-//        "show_first_column": true,
-//        "show_last_column": true,
-//        "show_row_stripes": false,
-//        "show_column_stripes": true
-//    }`)
+//     err := sw.AddTable("F2", "H6", `{
+//         "table_name": "table",
+//         "table_style": "TableStyleMedium2",
+//         "show_first_column": true,
+//         "show_last_column": true,
+//         "show_row_stripes": false,
+//         "show_column_stripes": true
+//     }`)
 //
 // Note that the table must be at least two lines including the header. The
 // header cells must contain strings and must be unique.
@@ -384,8 +383,7 @@ func marshalRowAttrs(opts ...RowOpts) (attrs string, err error) {
 // the 'SetColWidth' function before the 'SetRow' function. For example set
 // the width column B:C as 20:
 //
-//    err := streamWriter.SetColWidth(2, 3, 20)
-//
+//     err := streamWriter.SetColWidth(2, 3, 20)
 func (sw *StreamWriter) SetColWidth(min, max int, width float64) error {
        if sw.sheetWritten {
                return ErrStreamSetColWidth
index 0220e9c..8eb0587 100644 (file)
--- a/styles.go
+++ b/styles.go
@@ -985,863 +985,862 @@ func parseFormatStyleSet(style interface{}) (*Style, error) {
 //
 // The following shows the border styles sorted by excelize index number:
 //
-//     Index | Name          | Weight | Style
-//    -------+---------------+--------+-------------
-//     0     | None          | 0      |
-//     1     | Continuous    | 1      | -----------
-//     2     | Continuous    | 2      | -----------
-//     3     | Dash          | 1      | - - - - - -
-//     4     | Dot           | 1      | . . . . . .
-//     5     | Continuous    | 3      | -----------
-//     6     | Double        | 3      | ===========
-//     7     | Continuous    | 0      | -----------
-//     8     | Dash          | 2      | - - - - - -
-//     9     | Dash Dot      | 1      | - . - . - .
-//     10    | Dash Dot      | 2      | - . - . - .
-//     11    | Dash Dot Dot  | 1      | - . . - . .
-//     12    | Dash Dot Dot  | 2      | - . . - . .
-//     13    | SlantDash Dot | 2      | / - . / - .
+//      Index | Name          | Weight | Style
+//     -------+---------------+--------+-------------
+//      0     | None          | 0      |
+//      1     | Continuous    | 1      | -----------
+//      2     | Continuous    | 2      | -----------
+//      3     | Dash          | 1      | - - - - - -
+//      4     | Dot           | 1      | . . . . . .
+//      5     | Continuous    | 3      | -----------
+//      6     | Double        | 3      | ===========
+//      7     | Continuous    | 0      | -----------
+//      8     | Dash          | 2      | - - - - - -
+//      9     | Dash Dot      | 1      | - . - . - .
+//      10    | Dash Dot      | 2      | - . - . - .
+//      11    | Dash Dot Dot  | 1      | - . . - . .
+//      12    | Dash Dot Dot  | 2      | - . . - . .
+//      13    | SlantDash Dot | 2      | / - . / - .
 //
 // The following shows the borders in the order shown in the Excel dialog:
 //
-//     Index | Style       | Index | Style
-//    -------+-------------+-------+-------------
-//     0     | None        | 12    | - . . - . .
-//     7     | ----------- | 13    | / - . / - .
-//     4     | . . . . . . | 10    | - . - . - .
-//     11    | - . . - . . | 8     | - - - - - -
-//     9     | - . - . - . | 2     | -----------
-//     3     | - - - - - - | 5     | -----------
-//     1     | ----------- | 6     | ===========
+//      Index | Style       | Index | Style
+//     -------+-------------+-------+-------------
+//      0     | None        | 12    | - . . - . .
+//      7     | ----------- | 13    | / - . / - .
+//      4     | . . . . . . | 10    | - . - . - .
+//      11    | - . . - . . | 8     | - - - - - -
+//      9     | - . - . - . | 2     | -----------
+//      3     | - - - - - - | 5     | -----------
+//      1     | ----------- | 6     | ===========
 //
 // The following shows the shading styles sorted by excelize index number:
 //
-//     Index | Style           | Index | Style
-//    -------+-----------------+-------+-----------------
-//     0     | Horizontal      | 3     | Diagonal down
-//     1     | Vertical        | 4     | From corner
-//     2     | Diagonal Up     | 5     | From center
+//      Index | Style           | Index | Style
+//     -------+-----------------+-------+-----------------
+//      0     | Horizontal      | 3     | Diagonal down
+//      1     | Vertical        | 4     | From corner
+//      2     | Diagonal Up     | 5     | From center
 //
 // The following shows the patterns styles sorted by excelize index number:
 //
-//     Index | Style           | Index | Style
-//    -------+-----------------+-------+-----------------
-//     0     | None            | 10    | darkTrellis
-//     1     | solid           | 11    | lightHorizontal
-//     2     | mediumGray      | 12    | lightVertical
-//     3     | darkGray        | 13    | lightDown
-//     4     | lightGray       | 14    | lightUp
-//     5     | darkHorizontal  | 15    | lightGrid
-//     6     | darkVertical    | 16    | lightTrellis
-//     7     | darkDown        | 17    | gray125
-//     8     | darkUp          | 18    | gray0625
-//     9     | darkGrid        |       |
+//      Index | Style           | Index | Style
+//     -------+-----------------+-------+-----------------
+//      0     | None            | 10    | darkTrellis
+//      1     | solid           | 11    | lightHorizontal
+//      2     | mediumGray      | 12    | lightVertical
+//      3     | darkGray        | 13    | lightDown
+//      4     | lightGray       | 14    | lightUp
+//      5     | darkHorizontal  | 15    | lightGrid
+//      6     | darkVertical    | 16    | lightTrellis
+//      7     | darkDown        | 17    | gray125
+//      8     | darkUp          | 18    | gray0625
+//      9     | darkGrid        |       |
 //
 // The following the type of horizontal alignment in cells:
 //
-//     Style
-//    ------------------
-//     left
-//     center
-//     right
-//     fill
-//     justify
-//     centerContinuous
-//     distributed
+//      Style
+//     ------------------
+//      left
+//      center
+//      right
+//      fill
+//      justify
+//      centerContinuous
+//      distributed
 //
 // The following the type of vertical alignment in cells:
 //
-//     Style
-//    ------------------
-//     top
-//     center
-//     justify
-//     distributed
+//      Style
+//     ------------------
+//      top
+//      center
+//      justify
+//      distributed
 //
 // The following the type of font underline style:
 //
-//     Style
-//    ------------------
-//     single
-//     double
+//      Style
+//     ------------------
+//      single
+//      double
 //
 // Excel's built-in all languages formats are shown in the following table:
 //
-//     Index | Format String
-//    -------+----------------------------------------------------
-//     0     | General
-//     1     | 0
-//     2     | 0.00
-//     3     | #,##0
-//     4     | #,##0.00
-//     5     | ($#,##0_);($#,##0)
-//     6     | ($#,##0_);[Red]($#,##0)
-//     7     | ($#,##0.00_);($#,##0.00)
-//     8     | ($#,##0.00_);[Red]($#,##0.00)
-//     9     | 0%
-//     10    | 0.00%
-//     11    | 0.00E+00
-//     12    | # ?/?
-//     13    | # ??/??
-//     14    | m/d/yy
-//     15    | d-mmm-yy
-//     16    | d-mmm
-//     17    | mmm-yy
-//     18    | h:mm AM/PM
-//     19    | h:mm:ss AM/PM
-//     20    | h:mm
-//     21    | h:mm:ss
-//     22    | m/d/yy h:mm
-//     ...   | ...
-//     37    | (#,##0_);(#,##0)
-//     38    | (#,##0_);[Red](#,##0)
-//     39    | (#,##0.00_);(#,##0.00)
-//     40    | (#,##0.00_);[Red](#,##0.00)
-//     41    | _(* #,##0_);_(* (#,##0);_(* "-"_);_(@_)
-//     42    | _($* #,##0_);_($* (#,##0);_($* "-"_);_(@_)
-//     43    | _(* #,##0.00_);_(* (#,##0.00);_(* "-"??_);_(@_)
-//     44    | _($* #,##0.00_);_($* (#,##0.00);_($* "-"??_);_(@_)
-//     45    | mm:ss
-//     46    | [h]:mm:ss
-//     47    | mm:ss.0
-//     48    | ##0.0E+0
-//     49    | @
+//      Index | Format String
+//     -------+----------------------------------------------------
+//      0     | General
+//      1     | 0
+//      2     | 0.00
+//      3     | #,##0
+//      4     | #,##0.00
+//      5     | ($#,##0_);($#,##0)
+//      6     | ($#,##0_);[Red]($#,##0)
+//      7     | ($#,##0.00_);($#,##0.00)
+//      8     | ($#,##0.00_);[Red]($#,##0.00)
+//      9     | 0%
+//      10    | 0.00%
+//      11    | 0.00E+00
+//      12    | # ?/?
+//      13    | # ??/??
+//      14    | m/d/yy
+//      15    | d-mmm-yy
+//      16    | d-mmm
+//      17    | mmm-yy
+//      18    | h:mm AM/PM
+//      19    | h:mm:ss AM/PM
+//      20    | h:mm
+//      21    | h:mm:ss
+//      22    | m/d/yy h:mm
+//      ...   | ...
+//      37    | (#,##0_);(#,##0)
+//      38    | (#,##0_);[Red](#,##0)
+//      39    | (#,##0.00_);(#,##0.00)
+//      40    | (#,##0.00_);[Red](#,##0.00)
+//      41    | _(* #,##0_);_(* (#,##0);_(* "-"_);_(@_)
+//      42    | _($* #,##0_);_($* (#,##0);_($* "-"_);_(@_)
+//      43    | _(* #,##0.00_);_(* (#,##0.00);_(* "-"??_);_(@_)
+//      44    | _($* #,##0.00_);_($* (#,##0.00);_($* "-"??_);_(@_)
+//      45    | mm:ss
+//      46    | [h]:mm:ss
+//      47    | mm:ss.0
+//      48    | ##0.0E+0
+//      49    | @
 //
 // Number format code in zh-tw language:
 //
-//     Index | Symbol
-//    -------+-------------------------------------------
-//     27    | [$-404]e/m/d
-//     28    | [$-404]e"年"m"月"d"日"
-//     29    | [$-404]e"年"m"月"d"日"
-//     30    | m/d/yy
-//     31    | yyyy"年"m"月"d"日"
-//     32    | hh"時"mm"分"
-//     33    | hh"時"mm"分"ss"秒"
-//     34    | 上午/下午 hh"時"mm"分"
-//     35    | 上午/下午 hh"時"mm"分"ss"秒"
-//     36    | [$-404]e/m/d
-//     50    | [$-404]e/m/d
-//     51    | [$-404]e"年"m"月"d"日"
-//     52    | 上午/下午 hh"時"mm"分"
-//     53    | 上午/下午 hh"時"mm"分"ss"秒"
-//     54    | [$-404]e"年"m"月"d"日"
-//     55    | 上午/下午 hh"時"mm"分"
-//     56    | 上午/下午 hh"時"mm"分"ss"秒"
-//     57    | [$-404]e/m/d
-//     58    | [$-404]e"年"m"月"d"日"
+//      Index | Symbol
+//     -------+-------------------------------------------
+//      27    | [$-404]e/m/d
+//      28    | [$-404]e"年"m"月"d"日"
+//      29    | [$-404]e"年"m"月"d"日"
+//      30    | m/d/yy
+//      31    | yyyy"年"m"月"d"日"
+//      32    | hh"時"mm"分"
+//      33    | hh"時"mm"分"ss"秒"
+//      34    | 上午/下午 hh"時"mm"分"
+//      35    | 上午/下午 hh"時"mm"分"ss"秒"
+//      36    | [$-404]e/m/d
+//      50    | [$-404]e/m/d
+//      51    | [$-404]e"年"m"月"d"日"
+//      52    | 上午/下午 hh"時"mm"分"
+//      53    | 上午/下午 hh"時"mm"分"ss"秒"
+//      54    | [$-404]e"年"m"月"d"日"
+//      55    | 上午/下午 hh"時"mm"分"
+//      56    | 上午/下午 hh"時"mm"分"ss"秒"
+//      57    | [$-404]e/m/d
+//      58    | [$-404]e"年"m"月"d"日"
 //
 // Number format code in zh-cn language:
 //
-//     Index | Symbol
-//    -------+-------------------------------------------
-//     27    | yyyy"年"m"月"
-//     28    | m"月"d"日"
-//     29    | m"月"d"日"
-//     30    | m-d-yy
-//     31    | yyyy"年"m"月"d"日"
-//     32    | h"时"mm"分"
-//     33    | h"时"mm"分"ss"秒"
-//     34    | 上午/下午 h"时"mm"分"
-//     35    | 上午/下午 h"时"mm"分"ss"秒
-//     36    | yyyy"年"m"月
-//     50    | yyyy"年"m"月
-//     51    | m"月"d"日
-//     52    | yyyy"年"m"月
-//     53    | m"月"d"日
-//     54    | m"月"d"日
-//     55    | 上午/下午 h"时"mm"分
-//     56    | 上午/下午 h"时"mm"分"ss"秒
-//     57    | yyyy"年"m"月
-//     58    | m"月"d"日"
+//      Index | Symbol
+//     -------+-------------------------------------------
+//      27    | yyyy"年"m"月"
+//      28    | m"月"d"日"
+//      29    | m"月"d"日"
+//      30    | m-d-yy
+//      31    | yyyy"年"m"月"d"日"
+//      32    | h"时"mm"分"
+//      33    | h"时"mm"分"ss"秒"
+//      34    | 上午/下午 h"时"mm"分"
+//      35    | 上午/下午 h"时"mm"分"ss"秒
+//      36    | yyyy"年"m"月
+//      50    | yyyy"年"m"月
+//      51    | m"月"d"日
+//      52    | yyyy"年"m"月
+//      53    | m"月"d"日
+//      54    | m"月"d"日
+//      55    | 上午/下午 h"时"mm"分
+//      56    | 上午/下午 h"时"mm"分"ss"秒
+//      57    | yyyy"年"m"月
+//      58    | m"月"d"日"
 //
 // Number format code with unicode values provided for language glyphs where
 // they occur in zh-tw language:
 //
-//     Index | Symbol
-//    -------+-------------------------------------------
-//     27    | [$-404]e/m/
-//     28    | [$-404]e"5E74"m"6708"d"65E5
-//     29    | [$-404]e"5E74"m"6708"d"65E5
-//     30    | m/d/y
-//     31    | yyyy"5E74"m"6708"d"65E5
-//     32    | hh"6642"mm"5206
-//     33    | hh"6642"mm"5206"ss"79D2
-//     34    | 4E0A5348/4E0B5348hh"6642"mm"5206
-//     35    | 4E0A5348/4E0B5348hh"6642"mm"5206"ss"79D2
-//     36    | [$-404]e/m/
-//     50    | [$-404]e/m/
-//     51    | [$-404]e"5E74"m"6708"d"65E5
-//     52    | 4E0A5348/4E0B5348hh"6642"mm"5206
-//     53    | 4E0A5348/4E0B5348hh"6642"mm"5206"ss"79D2
-//     54    | [$-404]e"5E74"m"6708"d"65E5
-//     55    | 4E0A5348/4E0B5348hh"6642"mm"5206
-//     56    | 4E0A5348/4E0B5348hh"6642"mm"5206"ss"79D2
-//     57    | [$-404]e/m/
-//     58    | [$-404]e"5E74"m"6708"d"65E5"
+//      Index | Symbol
+//     -------+-------------------------------------------
+//      27    | [$-404]e/m/
+//      28    | [$-404]e"5E74"m"6708"d"65E5
+//      29    | [$-404]e"5E74"m"6708"d"65E5
+//      30    | m/d/y
+//      31    | yyyy"5E74"m"6708"d"65E5
+//      32    | hh"6642"mm"5206
+//      33    | hh"6642"mm"5206"ss"79D2
+//      34    | 4E0A5348/4E0B5348hh"6642"mm"5206
+//      35    | 4E0A5348/4E0B5348hh"6642"mm"5206"ss"79D2
+//      36    | [$-404]e/m/
+//      50    | [$-404]e/m/
+//      51    | [$-404]e"5E74"m"6708"d"65E5
+//      52    | 4E0A5348/4E0B5348hh"6642"mm"5206
+//      53    | 4E0A5348/4E0B5348hh"6642"mm"5206"ss"79D2
+//      54    | [$-404]e"5E74"m"6708"d"65E5
+//      55    | 4E0A5348/4E0B5348hh"6642"mm"5206
+//      56    | 4E0A5348/4E0B5348hh"6642"mm"5206"ss"79D2
+//      57    | [$-404]e/m/
+//      58    | [$-404]e"5E74"m"6708"d"65E5"
 //
 // Number format code with unicode values provided for language glyphs where
 // they occur in zh-cn language:
 //
-//     Index | Symbol
-//    -------+-------------------------------------------
-//     27    | yyyy"5E74"m"6708
-//     28    | m"6708"d"65E5
-//     29    | m"6708"d"65E5
-//     30    | m-d-y
-//     31    | yyyy"5E74"m"6708"d"65E5
-//     32    | h"65F6"mm"5206
-//     33    | h"65F6"mm"5206"ss"79D2
-//     34    | 4E0A5348/4E0B5348h"65F6"mm"5206
-//     35    | 4E0A5348/4E0B5348h"65F6"mm"5206"ss"79D2
-//     36    | yyyy"5E74"m"6708
-//     50    | yyyy"5E74"m"6708
-//     51    | m"6708"d"65E5
-//     52    | yyyy"5E74"m"6708
-//     53    | m"6708"d"65E5
-//     54    | m"6708"d"65E5
-//     55    | 4E0A5348/4E0B5348h"65F6"mm"5206
-//     56    | 4E0A5348/4E0B5348h"65F6"mm"5206"ss"79D2
-//     57    | yyyy"5E74"m"6708
-//     58    | m"6708"d"65E5"
+//      Index | Symbol
+//     -------+-------------------------------------------
+//      27    | yyyy"5E74"m"6708
+//      28    | m"6708"d"65E5
+//      29    | m"6708"d"65E5
+//      30    | m-d-y
+//      31    | yyyy"5E74"m"6708"d"65E5
+//      32    | h"65F6"mm"5206
+//      33    | h"65F6"mm"5206"ss"79D2
+//      34    | 4E0A5348/4E0B5348h"65F6"mm"5206
+//      35    | 4E0A5348/4E0B5348h"65F6"mm"5206"ss"79D2
+//      36    | yyyy"5E74"m"6708
+//      50    | yyyy"5E74"m"6708
+//      51    | m"6708"d"65E5
+//      52    | yyyy"5E74"m"6708
+//      53    | m"6708"d"65E5
+//      54    | m"6708"d"65E5
+//      55    | 4E0A5348/4E0B5348h"65F6"mm"5206
+//      56    | 4E0A5348/4E0B5348h"65F6"mm"5206"ss"79D2
+//      57    | yyyy"5E74"m"6708
+//      58    | m"6708"d"65E5"
 //
 // Number format code in ja-jp language:
 //
-//     Index | Symbol
-//    -------+-------------------------------------------
-//     27    | [$-411]ge.m.d
-//     28    | [$-411]ggge"年"m"月"d"日
-//     29    | [$-411]ggge"年"m"月"d"日
-//     30    | m/d/y
-//     31    | yyyy"年"m"月"d"日
-//     32    | h"時"mm"分
-//     33    | h"時"mm"分"ss"秒
-//     34    | yyyy"年"m"月
-//     35    | m"月"d"日
-//     36    | [$-411]ge.m.d
-//     50    | [$-411]ge.m.d
-//     51    | [$-411]ggge"年"m"月"d"日
-//     52    | yyyy"年"m"月
-//     53    | m"月"d"日
-//     54    | [$-411]ggge"年"m"月"d"日
-//     55    | yyyy"年"m"月
-//     56    | m"月"d"日
-//     57    | [$-411]ge.m.d
-//     58    | [$-411]ggge"年"m"月"d"日"
+//      Index | Symbol
+//     -------+-------------------------------------------
+//      27    | [$-411]ge.m.d
+//      28    | [$-411]ggge"年"m"月"d"日
+//      29    | [$-411]ggge"年"m"月"d"日
+//      30    | m/d/y
+//      31    | yyyy"年"m"月"d"日
+//      32    | h"時"mm"分
+//      33    | h"時"mm"分"ss"秒
+//      34    | yyyy"年"m"月
+//      35    | m"月"d"日
+//      36    | [$-411]ge.m.d
+//      50    | [$-411]ge.m.d
+//      51    | [$-411]ggge"年"m"月"d"日
+//      52    | yyyy"年"m"月
+//      53    | m"月"d"日
+//      54    | [$-411]ggge"年"m"月"d"日
+//      55    | yyyy"年"m"月
+//      56    | m"月"d"日
+//      57    | [$-411]ge.m.d
+//      58    | [$-411]ggge"年"m"月"d"日"
 //
 // Number format code in ko-kr language:
 //
-//     Index | Symbol
-//    -------+-------------------------------------------
-//     27    | yyyy"年" mm"月" dd"日
-//     28    | mm-d
-//     29    | mm-d
-//     30    | mm-dd-y
-//     31    | yyyy"년" mm"월" dd"일
-//     32    | h"시" mm"분
-//     33    | h"시" mm"분" ss"초
-//     34    | yyyy-mm-d
-//     35    | yyyy-mm-d
-//     36    | yyyy"年" mm"月" dd"日
-//     50    | yyyy"年" mm"月" dd"日
-//     51    | mm-d
-//     52    | yyyy-mm-d
-//     53    | yyyy-mm-d
-//     54    | mm-d
-//     55    | yyyy-mm-d
-//     56    | yyyy-mm-d
-//     57    | yyyy"年" mm"月" dd"日
-//     58    | mm-dd
+//      Index | Symbol
+//     -------+-------------------------------------------
+//      27    | yyyy"年" mm"月" dd"日
+//      28    | mm-d
+//      29    | mm-d
+//      30    | mm-dd-y
+//      31    | yyyy"년" mm"월" dd"일
+//      32    | h"시" mm"분
+//      33    | h"시" mm"분" ss"초
+//      34    | yyyy-mm-d
+//      35    | yyyy-mm-d
+//      36    | yyyy"年" mm"月" dd"日
+//      50    | yyyy"年" mm"月" dd"日
+//      51    | mm-d
+//      52    | yyyy-mm-d
+//      53    | yyyy-mm-d
+//      54    | mm-d
+//      55    | yyyy-mm-d
+//      56    | yyyy-mm-d
+//      57    | yyyy"年" mm"月" dd"日
+//      58    | mm-dd
 //
 // Number format code with unicode values provided for language glyphs where
 // they occur in ja-jp language:
 //
-//     Index | Symbol
-//    -------+-------------------------------------------
-//     27    | [$-411]ge.m.d
-//     28    | [$-411]ggge"5E74"m"6708"d"65E5
-//     29    | [$-411]ggge"5E74"m"6708"d"65E5
-//     30    | m/d/y
-//     31    | yyyy"5E74"m"6708"d"65E5
-//     32    | h"6642"mm"5206
-//     33    | h"6642"mm"5206"ss"79D2
-//     34    | yyyy"5E74"m"6708
-//     35    | m"6708"d"65E5
-//     36    | [$-411]ge.m.d
-//     50    | [$-411]ge.m.d
-//     51    | [$-411]ggge"5E74"m"6708"d"65E5
-//     52    | yyyy"5E74"m"6708
-//     53    | m"6708"d"65E5
-//     54    | [$-411]ggge"5E74"m"6708"d"65E5
-//     55    | yyyy"5E74"m"6708
-//     56    | m"6708"d"65E5
-//     57    | [$-411]ge.m.d
-//     58    | [$-411]ggge"5E74"m"6708"d"65E5"
+//      Index | Symbol
+//     -------+-------------------------------------------
+//      27    | [$-411]ge.m.d
+//      28    | [$-411]ggge"5E74"m"6708"d"65E5
+//      29    | [$-411]ggge"5E74"m"6708"d"65E5
+//      30    | m/d/y
+//      31    | yyyy"5E74"m"6708"d"65E5
+//      32    | h"6642"mm"5206
+//      33    | h"6642"mm"5206"ss"79D2
+//      34    | yyyy"5E74"m"6708
+//      35    | m"6708"d"65E5
+//      36    | [$-411]ge.m.d
+//      50    | [$-411]ge.m.d
+//      51    | [$-411]ggge"5E74"m"6708"d"65E5
+//      52    | yyyy"5E74"m"6708
+//      53    | m"6708"d"65E5
+//      54    | [$-411]ggge"5E74"m"6708"d"65E5
+//      55    | yyyy"5E74"m"6708
+//      56    | m"6708"d"65E5
+//      57    | [$-411]ge.m.d
+//      58    | [$-411]ggge"5E74"m"6708"d"65E5"
 //
 // Number format code with unicode values provided for language glyphs where
 // they occur in ko-kr language:
 //
-//     Index | Symbol
-//    -------+-------------------------------------------
-//     27    | yyyy"5E74" mm"6708" dd"65E5
-//     28    | mm-d
-//     29    | mm-d
-//     30    | mm-dd-y
-//     31    | yyyy"B144" mm"C6D4" dd"C77C
-//     32    | h"C2DC" mm"BD84
-//     33    | h"C2DC" mm"BD84" ss"CD08
-//     34    | yyyy-mm-d
-//     35    | yyyy-mm-d
-//     36    | yyyy"5E74" mm"6708" dd"65E5
-//     50    | yyyy"5E74" mm"6708" dd"65E5
-//     51    | mm-d
-//     52    | yyyy-mm-d
-//     53    | yyyy-mm-d
-//     54    | mm-d
-//     55    | yyyy-mm-d
-//     56    | yyyy-mm-d
-//     57    | yyyy"5E74" mm"6708" dd"65E5
-//     58    | mm-dd
+//      Index | Symbol
+//     -------+-------------------------------------------
+//      27    | yyyy"5E74" mm"6708" dd"65E5
+//      28    | mm-d
+//      29    | mm-d
+//      30    | mm-dd-y
+//      31    | yyyy"B144" mm"C6D4" dd"C77C
+//      32    | h"C2DC" mm"BD84
+//      33    | h"C2DC" mm"BD84" ss"CD08
+//      34    | yyyy-mm-d
+//      35    | yyyy-mm-d
+//      36    | yyyy"5E74" mm"6708" dd"65E5
+//      50    | yyyy"5E74" mm"6708" dd"65E5
+//      51    | mm-d
+//      52    | yyyy-mm-d
+//      53    | yyyy-mm-d
+//      54    | mm-d
+//      55    | yyyy-mm-d
+//      56    | yyyy-mm-d
+//      57    | yyyy"5E74" mm"6708" dd"65E5
+//      58    | mm-dd
 //
 // Number format code in th-th language:
 //
-//     Index | Symbol
-//    -------+-------------------------------------------
-//     59    | t
-//     60    | t0.0
-//     61    | t#,##
-//     62    | t#,##0.0
-//     67    | t0
-//     68    | t0.00
-//     69    | t# ?/
-//     70    | t# ??/?
-//     71    | ว/ด/ปปป
-//     72    | ว-ดดด-ป
-//     73    | ว-ดด
-//     74    | ดดด-ป
-//     75    | ช:น
-//     76    | ช:นน:ท
-//     77    | ว/ด/ปปปป ช:น
-//     78    | นน:ท
-//     79    | [ช]:นน:ท
-//     80    | นน:ทท.
-//     81    | d/m/bb
+//      Index | Symbol
+//     -------+-------------------------------------------
+//      59    | t
+//      60    | t0.0
+//      61    | t#,##
+//      62    | t#,##0.0
+//      67    | t0
+//      68    | t0.00
+//      69    | t# ?/
+//      70    | t# ??/?
+//      71    | ว/ด/ปปป
+//      72    | ว-ดดด-ป
+//      73    | ว-ดด
+//      74    | ดดด-ป
+//      75    | ช:น
+//      76    | ช:นน:ท
+//      77    | ว/ด/ปปปป ช:น
+//      78    | นน:ท
+//      79    | [ช]:นน:ท
+//      80    | นน:ทท.
+//      81    | d/m/bb
 //
 // Number format code with unicode values provided for language glyphs where
 // they occur in th-th language:
 //
-//     Index | Symbol
-//    -------+-------------------------------------------
-//     59    | t
-//     60    | t0.0
-//     61    | t#,##
-//     62    | t#,##0.0
-//     67    | t0
-//     68    | t0.00
-//     69    | t# ?/
-//     70    | t# ??/?
-//     71    | 0E27/0E14/0E1B0E1B0E1B0E1
-//     72    | 0E27-0E140E140E14-0E1B0E1
-//     73    | 0E27-0E140E140E1
-//     74    | 0E140E140E14-0E1B0E1
-//     75    | 0E0A:0E190E1
-//     76    | 0E0A:0E190E19:0E170E1
-//     77    | 0E27/0E14/0E1B0E1B0E1B0E1B 0E0A:0E190E1
-//     78    | 0E190E19:0E170E1
-//     79    | [0E0A]:0E190E19:0E170E1
-//     80    | 0E190E19:0E170E17.
-//     81    | d/m/bb
+//      Index | Symbol
+//     -------+-------------------------------------------
+//      59    | t
+//      60    | t0.0
+//      61    | t#,##
+//      62    | t#,##0.0
+//      67    | t0
+//      68    | t0.00
+//      69    | t# ?/
+//      70    | t# ??/?
+//      71    | 0E27/0E14/0E1B0E1B0E1B0E1
+//      72    | 0E27-0E140E140E14-0E1B0E1
+//      73    | 0E27-0E140E140E1
+//      74    | 0E140E140E14-0E1B0E1
+//      75    | 0E0A:0E190E1
+//      76    | 0E0A:0E190E19:0E170E1
+//      77    | 0E27/0E14/0E1B0E1B0E1B0E1B 0E0A:0E190E1
+//      78    | 0E190E19:0E170E1
+//      79    | [0E0A]:0E190E19:0E170E1
+//      80    | 0E190E19:0E170E17.
+//      81    | d/m/bb
 //
 // Excelize built-in currency formats are shown in the following table, only
 // support these types in the following table (Index number is used only for
 // markup and is not used inside an Excel file and you can't get formatted value
 // by the function GetCellValue) currently:
 //
-//     Index | Symbol
-//    -------+---------------------------------------------------------------
-//     164   | CN¥
-//     165   | $ English (China)
-//     166   | $ Cherokee (United States)
-//     167   | $ Chinese (Singapore)
-//     168   | $ Chinese (Taiwan)
-//     169   | $ English (Australia)
-//     170   | $ English (Belize)
-//     171   | $ English (Canada)
-//     172   | $ English (Jamaica)
-//     173   | $ English (New Zealand)
-//     174   | $ English (Singapore)
-//     175   | $ English (Trinidad & Tobago)
-//     176   | $ English (U.S. Virgin Islands)
-//     177   | $ English (United States)
-//     178   | $ French (Canada)
-//     179   | $ Hawaiian (United States)
-//     180   | $ Malay (Brunei)
-//     181   | $ Quechua (Ecuador)
-//     182   | $ Spanish (Chile)
-//     183   | $ Spanish (Colombia)
-//     184   | $ Spanish (Ecuador)
-//     185   | $ Spanish (El Salvador)
-//     186   | $ Spanish (Mexico)
-//     187   | $ Spanish (Puerto Rico)
-//     188   | $ Spanish (United States)
-//     189   | $ Spanish (Uruguay)
-//     190   | £ English (United Kingdom)
-//     191   | £ Scottish Gaelic (United Kingdom)
-//     192   | £ Welsh (United Kindom)
-//     193   | ¥ Chinese (China)
-//     194   | ¥ Japanese (Japan)
-//     195   | ¥ Sichuan Yi (China)
-//     196   | ¥ Tibetan (China)
-//     197   | ¥ Uyghur (China)
-//     198   | ֏ Armenian (Armenia)
-//     199   | ؋ Pashto (Afghanistan)
-//     200   | ؋ Persian (Afghanistan)
-//     201   | ৳ Bengali (Bangladesh)
-//     202   | ៛ Khmer (Cambodia)
-//     203   | ₡ Spanish (Costa Rica)
-//     204   | ₦ Hausa (Nigeria)
-//     205   | ₦ Igbo (Nigeria)
-//     206   | ₦ Yoruba (Nigeria)
-//     207   | ₩ Korean (South Korea)
-//     208   | ₪ Hebrew (Israel)
-//     209   | ₫ Vietnamese (Vietnam)
-//     210   | € Basque (Spain)
-//     211   | € Breton (France)
-//     212   | € Catalan (Spain)
-//     213   | € Corsican (France)
-//     214   | € Dutch (Belgium)
-//     215   | € Dutch (Netherlands)
-//     216   | € English (Ireland)
-//     217   | € Estonian (Estonia)
-//     218   | € Euro (€ 123)
-//     219   | € Euro (123 €)
-//     220   | € Finnish (Finland)
-//     221   | € French (Belgium)
-//     222   | € French (France)
-//     223   | € French (Luxembourg)
-//     224   | € French (Monaco)
-//     225   | € French (Réunion)
-//     226   | € Galician (Spain)
-//     227   | € German (Austria)
-//     228   | € German (Luxembourg)
-//     229   | € Greek (Greece)
-//     230   | € Inari Sami (Finland)
-//     231   | € Irish (Ireland)
-//     232   | € Italian (Italy)
-//     233   | € Latin (Italy)
-//     234   | € Latin, Serbian (Montenegro)
-//     235   | € Larvian (Latvia)
-//     236   | € Lithuanian (Lithuania)
-//     237   | € Lower Sorbian (Germany)
-//     238   | € Luxembourgish (Luxembourg)
-//     239   | € Maltese (Malta)
-//     240   | € Northern Sami (Finland)
-//     241   | € Occitan (France)
-//     242   | € Portuguese (Portugal)
-//     243   | € Serbian (Montenegro)
-//     244   | € Skolt Sami (Finland)
-//     245   | € Slovak (Slovakia)
-//     246   | € Slovenian (Slovenia)
-//     247   | € Spanish (Spain)
-//     248   | € Swedish (Finland)
-//     249   | € Swiss German (France)
-//     250   | € Upper Sorbian (Germany)
-//     251   | € Western Frisian (Netherlands)
-//     252   | ₭ Lao (Laos)
-//     253   | ₮ Mongolian (Mongolia)
-//     254   | ₮ Mongolian, Mongolian (Mongolia)
-//     255   | ₱ English (Philippines)
-//     256   | ₱ Filipino (Philippines)
-//     257   | ₴ Ukrainian (Ukraine)
-//     258   | ₸ Kazakh (Kazakhstan)
-//     259   | ₹ Arabic, Kashmiri (India)
-//     260   | ₹ English (India)
-//     261   | ₹ Gujarati (India)
-//     262   | ₹ Hindi (India)
-//     263   | ₹ Kannada (India)
-//     264   | ₹ Kashmiri (India)
-//     265   | ₹ Konkani (India)
-//     266   | ₹ Manipuri (India)
-//     267   | ₹ Marathi (India)
-//     268   | ₹ Nepali (India)
-//     269   | ₹ Oriya (India)
-//     270   | ₹ Punjabi (India)
-//     271   | ₹ Sanskrit (India)
-//     272   | ₹ Sindhi (India)
-//     273   | ₹ Tamil (India)
-//     274   | ₹ Urdu (India)
-//     275   | ₺ Turkish (Turkey)
-//     276   | ₼ Azerbaijani (Azerbaijan)
-//     277   | ₼ Cyrillic, Azerbaijani (Azerbaijan)
-//     278   | ₽ Russian (Russia)
-//     279   | ₽ Sakha (Russia)
-//     280   | ₾ Georgian (Georgia)
-//     281   | B/. Spanish (Panama)
-//     282   | Br Oromo (Ethiopia)
-//     283   | Br Somali (Ethiopia)
-//     284   | Br Tigrinya (Ethiopia)
-//     285   | Bs Quechua (Bolivia)
-//     286   | Bs Spanish (Bolivia)
-//     287   | BS. Spanish (Venezuela)
-//     288   | BWP Tswana (Botswana)
-//     289   | C$ Spanish (Nicaragua)
-//     290   | CA$ Latin, Inuktitut (Canada)
-//     291   | CA$ Mohawk (Canada)
-//     292   | CA$ Unified Canadian Aboriginal Syllabics, Inuktitut (Canada)
-//     293   | CFA French (Mali)
-//     294   | CFA French (Senegal)
-//     295   | CFA Fulah (Senegal)
-//     296   | CFA Wolof (Senegal)
-//     297   | CHF French (Switzerland)
-//     298   | CHF German (Liechtenstein)
-//     299   | CHF German (Switzerland)
-//     300   | CHF Italian (Switzerland)
-//     301   | CHF Romansh (Switzerland)
-//     302   | CLP Mapuche (Chile)
-//     303   | CN¥ Mongolian, Mongolian (China)
-//     304   | DZD Central Atlas Tamazight (Algeria)
-//     305   | FCFA French (Cameroon)
-//     306   | Ft Hungarian (Hungary)
-//     307   | G French (Haiti)
-//     308   | Gs. Spanish (Paraguay)
-//     309   | GTQ K'iche' (Guatemala)
-//     310   | HK$ Chinese (Hong Kong (China))
-//     311   | HK$ English (Hong Kong (China))
-//     312   | HRK Croatian (Croatia)
-//     313   | IDR English (Indonesia)
-//     314   | IQD Arbic, Central Kurdish (Iraq)
-//     315   | ISK Icelandic (Iceland)
-//     316   | K Burmese (Myanmar (Burma))
-//     317   | Kč Czech (Czech Republic)
-//     318   | KM Bosnian (Bosnia & Herzegovina)
-//     319   | KM Croatian (Bosnia & Herzegovina)
-//     320   | KM Latin, Serbian (Bosnia & Herzegovina)
-//     321   | kr Faroese (Faroe Islands)
-//     322   | kr Northern Sami (Norway)
-//     323   | kr Northern Sami (Sweden)
-//     324   | kr Norwegian Bokmål (Norway)
-//     325   | kr Norwegian Nynorsk (Norway)
-//     326   | kr Swedish (Sweden)
-//     327   | kr. Danish (Denmark)
-//     328   | kr. Kalaallisut (Greenland)
-//     329   | Ksh Swahili (kenya)
-//     330   | L Romanian (Moldova)
-//     331   | L Russian (Moldova)
-//     332   | L Spanish (Honduras)
-//     333   | Lekë Albanian (Albania)
-//     334   | MAD Arabic, Central Atlas Tamazight (Morocco)
-//     335   | MAD French (Morocco)
-//     336   | MAD Tifinagh, Central Atlas Tamazight (Morocco)
-//     337   | MOP$ Chinese (Macau (China))
-//     338   | MVR Divehi (Maldives)
-//     339   | Nfk Tigrinya (Eritrea)
-//     340   | NGN Bini (Nigeria)
-//     341   | NGN Fulah (Nigeria)
-//     342   | NGN Ibibio (Nigeria)
-//     343   | NGN Kanuri (Nigeria)
-//     344   | NOK Lule Sami (Norway)
-//     345   | NOK Southern Sami (Norway)
-//     346   | NZ$ Maori (New Zealand)
-//     347   | PKR Sindhi (Pakistan)
-//     348   | PYG Guarani (Paraguay)
-//     349   | Q Spanish (Guatemala)
-//     350   | R Afrikaans (South Africa)
-//     351   | R English (South Africa)
-//     352   | R Zulu (South Africa)
-//     353   | R$ Portuguese (Brazil)
-//     354   | RD$ Spanish (Dominican Republic)
-//     355   | RF Kinyarwanda (Rwanda)
-//     356   | RM English (Malaysia)
-//     357   | RM Malay (Malaysia)
-//     358   | RON Romanian (Romania)
-//     359   | Rp Indonesoan (Indonesia)
-//     360   | Rs Urdu (Pakistan)
-//     361   | Rs. Tamil (Sri Lanka)
-//     362   | RSD Latin, Serbian (Serbia)
-//     363   | RSD Serbian (Serbia)
-//     364   | RUB Bashkir (Russia)
-//     365   | RUB Tatar (Russia)
-//     366   | S/. Quechua (Peru)
-//     367   | S/. Spanish (Peru)
-//     368   | SEK Lule Sami (Sweden)
-//     369   | SEK Southern Sami (Sweden)
-//     370   | soʻm Latin, Uzbek (Uzbekistan)
-//     371   | soʻm Uzbek (Uzbekistan)
-//     372   | SYP Syriac (Syria)
-//     373   | THB Thai (Thailand)
-//     374   | TMT Turkmen (Turkmenistan)
-//     375   | US$ English (Zimbabwe)
-//     376   | ZAR Northern Sotho (South Africa)
-//     377   | ZAR Southern Sotho (South Africa)
-//     378   | ZAR Tsonga (South Africa)
-//     379   | ZAR Tswana (south Africa)
-//     380   | ZAR Venda (South Africa)
-//     381   | ZAR Xhosa (South Africa)
-//     382   | zł Polish (Poland)
-//     383   | ден Macedonian (Macedonia)
-//     384   | KM Cyrillic, Bosnian (Bosnia & Herzegovina)
-//     385   | KM Serbian (Bosnia & Herzegovina)
-//     386   | лв. Bulgarian (Bulgaria)
-//     387   | p. Belarusian (Belarus)
-//     388   | сом Kyrgyz (Kyrgyzstan)
-//     389   | сом Tajik (Tajikistan)
-//     390   | ج.م. Arabic (Egypt)
-//     391   | د.أ. Arabic (Jordan)
-//     392   | د.أ. Arabic (United Arab Emirates)
-//     393   | د.ب. Arabic (Bahrain)
-//     394   | د.ت. Arabic (Tunisia)
-//     395   | د.ج. Arabic (Algeria)
-//     396   | د.ع. Arabic (Iraq)
-//     397   | د.ك. Arabic (Kuwait)
-//     398   | د.ل. Arabic (Libya)
-//     399   | د.م. Arabic (Morocco)
-//     400   | ر Punjabi (Pakistan)
-//     401   | ر.س. Arabic (Saudi Arabia)
-//     402   | ر.ع. Arabic (Oman)
-//     403   | ر.ق. Arabic (Qatar)
-//     404   | ر.ي. Arabic (Yemen)
-//     405   | ریال Persian (Iran)
-//     406   | ل.س. Arabic (Syria)
-//     407   | ل.ل. Arabic (Lebanon)
-//     408   | ብር Amharic (Ethiopia)
-//     409   | रू Nepaol (Nepal)
-//     410   | රු. Sinhala (Sri Lanka)
-//     411   | ADP
-//     412   | AED
-//     413   | AFA
-//     414   | AFN
-//     415   | ALL
-//     416   | AMD
-//     417   | ANG
-//     418   | AOA
-//     419   | ARS
-//     420   | ATS
-//     421   | AUD
-//     422   | AWG
-//     423   | AZM
-//     424   | AZN
-//     425   | BAM
-//     426   | BBD
-//     427   | BDT
-//     428   | BEF
-//     429   | BGL
-//     430   | BGN
-//     431   | BHD
-//     432   | BIF
-//     433   | BMD
-//     434   | BND
-//     435   | BOB
-//     436   | BOV
-//     437   | BRL
-//     438   | BSD
-//     439   | BTN
-//     440   | BWP
-//     441   | BYR
-//     442   | BZD
-//     443   | CAD
-//     444   | CDF
-//     445   | CHE
-//     446   | CHF
-//     447   | CHW
-//     448   | CLF
-//     449   | CLP
-//     450   | CNY
-//     451   | COP
-//     452   | COU
-//     453   | CRC
-//     454   | CSD
-//     455   | CUC
-//     456   | CVE
-//     457   | CYP
-//     458   | CZK
-//     459   | DEM
-//     460   | DJF
-//     461   | DKK
-//     462   | DOP
-//     463   | DZD
-//     464   | ECS
-//     465   | ECV
-//     466   | EEK
-//     467   | EGP
-//     468   | ERN
-//     469   | ESP
-//     470   | ETB
-//     471   | EUR
-//     472   | FIM
-//     473   | FJD
-//     474   | FKP
-//     475   | FRF
-//     476   | GBP
-//     477   | GEL
-//     478   | GHC
-//     479   | GHS
-//     480   | GIP
-//     481   | GMD
-//     482   | GNF
-//     483   | GRD
-//     484   | GTQ
-//     485   | GYD
-//     486   | HKD
-//     487   | HNL
-//     488   | HRK
-//     489   | HTG
-//     490   | HUF
-//     491   | IDR
-//     492   | IEP
-//     493   | ILS
-//     494   | INR
-//     495   | IQD
-//     496   | IRR
-//     497   | ISK
-//     498   | ITL
-//     499   | JMD
-//     500   | JOD
-//     501   | JPY
-//     502   | KAF
-//     503   | KES
-//     504   | KGS
-//     505   | KHR
-//     506   | KMF
-//     507   | KPW
-//     508   | KRW
-//     509   | KWD
-//     510   | KYD
-//     511   | KZT
-//     512   | LAK
-//     513   | LBP
-//     514   | LKR
-//     515   | LRD
-//     516   | LSL
-//     517   | LTL
-//     518   | LUF
-//     519   | LVL
-//     520   | LYD
-//     521   | MAD
-//     522   | MDL
-//     523   | MGA
-//     524   | MGF
-//     525   | MKD
-//     526   | MMK
-//     527   | MNT
-//     528   | MOP
-//     529   | MRO
-//     530   | MTL
-//     531   | MUR
-//     532   | MVR
-//     533   | MWK
-//     534   | MXN
-//     535   | MXV
-//     536   | MYR
-//     537   | MZM
-//     538   | MZN
-//     539   | NAD
-//     540   | NGN
-//     541   | NIO
-//     542   | NLG
-//     543   | NOK
-//     544   | NPR
-//     545   | NTD
-//     546   | NZD
-//     547   | OMR
-//     548   | PAB
-//     549   | PEN
-//     550   | PGK
-//     551   | PHP
-//     552   | PKR
-//     553   | PLN
-//     554   | PTE
-//     555   | PYG
-//     556   | QAR
-//     557   | ROL
-//     558   | RON
-//     559   | RSD
-//     560   | RUB
-//     561   | RUR
-//     562   | RWF
-//     563   | SAR
-//     564   | SBD
-//     565   | SCR
-//     566   | SDD
-//     567   | SDG
-//     568   | SDP
-//     569   | SEK
-//     570   | SGD
-//     571   | SHP
-//     572   | SIT
-//     573   | SKK
-//     574   | SLL
-//     575   | SOS
-//     576   | SPL
-//     577   | SRD
-//     578   | SRG
-//     579   | STD
-//     580   | SVC
-//     581   | SYP
-//     582   | SZL
-//     583   | THB
-//     584   | TJR
-//     585   | TJS
-//     586   | TMM
-//     587   | TMT
-//     588   | TND
-//     589   | TOP
-//     590   | TRL
-//     591   | TRY
-//     592   | TTD
-//     593   | TWD
-//     594   | TZS
-//     595   | UAH
-//     596   | UGX
-//     597   | USD
-//     598   | USN
-//     599   | USS
-//     600   | UYI
-//     601   | UYU
-//     602   | UZS
-//     603   | VEB
-//     604   | VEF
-//     605   | VND
-//     606   | VUV
-//     607   | WST
-//     608   | XAF
-//     609   | XAG
-//     610   | XAU
-//     611   | XB5
-//     612   | XBA
-//     613   | XBB
-//     614   | XBC
-//     615   | XBD
-//     616   | XCD
-//     617   | XDR
-//     618   | XFO
-//     619   | XFU
-//     620   | XOF
-//     621   | XPD
-//     622   | XPF
-//     623   | XPT
-//     624   | XTS
-//     625   | XXX
-//     626   | YER
-//     627   | YUM
-//     628   | ZAR
-//     629   | ZMK
-//     630   | ZMW
-//     631   | ZWD
-//     632   | ZWL
-//     633   | ZWN
-//     634   | ZWR
+//      Index | Symbol
+//     -------+---------------------------------------------------------------
+//      164   | CN¥
+//      165   | $ English (China)
+//      166   | $ Cherokee (United States)
+//      167   | $ Chinese (Singapore)
+//      168   | $ Chinese (Taiwan)
+//      169   | $ English (Australia)
+//      170   | $ English (Belize)
+//      171   | $ English (Canada)
+//      172   | $ English (Jamaica)
+//      173   | $ English (New Zealand)
+//      174   | $ English (Singapore)
+//      175   | $ English (Trinidad & Tobago)
+//      176   | $ English (U.S. Virgin Islands)
+//      177   | $ English (United States)
+//      178   | $ French (Canada)
+//      179   | $ Hawaiian (United States)
+//      180   | $ Malay (Brunei)
+//      181   | $ Quechua (Ecuador)
+//      182   | $ Spanish (Chile)
+//      183   | $ Spanish (Colombia)
+//      184   | $ Spanish (Ecuador)
+//      185   | $ Spanish (El Salvador)
+//      186   | $ Spanish (Mexico)
+//      187   | $ Spanish (Puerto Rico)
+//      188   | $ Spanish (United States)
+//      189   | $ Spanish (Uruguay)
+//      190   | £ English (United Kingdom)
+//      191   | £ Scottish Gaelic (United Kingdom)
+//      192   | £ Welsh (United Kindom)
+//      193   | ¥ Chinese (China)
+//      194   | ¥ Japanese (Japan)
+//      195   | ¥ Sichuan Yi (China)
+//      196   | ¥ Tibetan (China)
+//      197   | ¥ Uyghur (China)
+//      198   | ֏ Armenian (Armenia)
+//      199   | ؋ Pashto (Afghanistan)
+//      200   | ؋ Persian (Afghanistan)
+//      201   | ৳ Bengali (Bangladesh)
+//      202   | ៛ Khmer (Cambodia)
+//      203   | ₡ Spanish (Costa Rica)
+//      204   | ₦ Hausa (Nigeria)
+//      205   | ₦ Igbo (Nigeria)
+//      206   | ₦ Yoruba (Nigeria)
+//      207   | ₩ Korean (South Korea)
+//      208   | ₪ Hebrew (Israel)
+//      209   | ₫ Vietnamese (Vietnam)
+//      210   | € Basque (Spain)
+//      211   | € Breton (France)
+//      212   | € Catalan (Spain)
+//      213   | € Corsican (France)
+//      214   | € Dutch (Belgium)
+//      215   | € Dutch (Netherlands)
+//      216   | € English (Ireland)
+//      217   | € Estonian (Estonia)
+//      218   | € Euro (€ 123)
+//      219   | € Euro (123 €)
+//      220   | € Finnish (Finland)
+//      221   | € French (Belgium)
+//      222   | € French (France)
+//      223   | € French (Luxembourg)
+//      224   | € French (Monaco)
+//      225   | € French (Réunion)
+//      226   | € Galician (Spain)
+//      227   | € German (Austria)
+//      228   | € German (Luxembourg)
+//      229   | € Greek (Greece)
+//      230   | € Inari Sami (Finland)
+//      231   | € Irish (Ireland)
+//      232   | € Italian (Italy)
+//      233   | € Latin (Italy)
+//      234   | € Latin, Serbian (Montenegro)
+//      235   | € Larvian (Latvia)
+//      236   | € Lithuanian (Lithuania)
+//      237   | € Lower Sorbian (Germany)
+//      238   | € Luxembourgish (Luxembourg)
+//      239   | € Maltese (Malta)
+//      240   | € Northern Sami (Finland)
+//      241   | € Occitan (France)
+//      242   | € Portuguese (Portugal)
+//      243   | € Serbian (Montenegro)
+//      244   | € Skolt Sami (Finland)
+//      245   | € Slovak (Slovakia)
+//      246   | € Slovenian (Slovenia)
+//      247   | € Spanish (Spain)
+//      248   | € Swedish (Finland)
+//      249   | € Swiss German (France)
+//      250   | € Upper Sorbian (Germany)
+//      251   | € Western Frisian (Netherlands)
+//      252   | ₭ Lao (Laos)
+//      253   | ₮ Mongolian (Mongolia)
+//      254   | ₮ Mongolian, Mongolian (Mongolia)
+//      255   | ₱ English (Philippines)
+//      256   | ₱ Filipino (Philippines)
+//      257   | ₴ Ukrainian (Ukraine)
+//      258   | ₸ Kazakh (Kazakhstan)
+//      259   | ₹ Arabic, Kashmiri (India)
+//      260   | ₹ English (India)
+//      261   | ₹ Gujarati (India)
+//      262   | ₹ Hindi (India)
+//      263   | ₹ Kannada (India)
+//      264   | ₹ Kashmiri (India)
+//      265   | ₹ Konkani (India)
+//      266   | ₹ Manipuri (India)
+//      267   | ₹ Marathi (India)
+//      268   | ₹ Nepali (India)
+//      269   | ₹ Oriya (India)
+//      270   | ₹ Punjabi (India)
+//      271   | ₹ Sanskrit (India)
+//      272   | ₹ Sindhi (India)
+//      273   | ₹ Tamil (India)
+//      274   | ₹ Urdu (India)
+//      275   | ₺ Turkish (Turkey)
+//      276   | ₼ Azerbaijani (Azerbaijan)
+//      277   | ₼ Cyrillic, Azerbaijani (Azerbaijan)
+//      278   | ₽ Russian (Russia)
+//      279   | ₽ Sakha (Russia)
+//      280   | ₾ Georgian (Georgia)
+//      281   | B/. Spanish (Panama)
+//      282   | Br Oromo (Ethiopia)
+//      283   | Br Somali (Ethiopia)
+//      284   | Br Tigrinya (Ethiopia)
+//      285   | Bs Quechua (Bolivia)
+//      286   | Bs Spanish (Bolivia)
+//      287   | BS. Spanish (Venezuela)
+//      288   | BWP Tswana (Botswana)
+//      289   | C$ Spanish (Nicaragua)
+//      290   | CA$ Latin, Inuktitut (Canada)
+//      291   | CA$ Mohawk (Canada)
+//      292   | CA$ Unified Canadian Aboriginal Syllabics, Inuktitut (Canada)
+//      293   | CFA French (Mali)
+//      294   | CFA French (Senegal)
+//      295   | CFA Fulah (Senegal)
+//      296   | CFA Wolof (Senegal)
+//      297   | CHF French (Switzerland)
+//      298   | CHF German (Liechtenstein)
+//      299   | CHF German (Switzerland)
+//      300   | CHF Italian (Switzerland)
+//      301   | CHF Romansh (Switzerland)
+//      302   | CLP Mapuche (Chile)
+//      303   | CN¥ Mongolian, Mongolian (China)
+//      304   | DZD Central Atlas Tamazight (Algeria)
+//      305   | FCFA French (Cameroon)
+//      306   | Ft Hungarian (Hungary)
+//      307   | G French (Haiti)
+//      308   | Gs. Spanish (Paraguay)
+//      309   | GTQ K'iche' (Guatemala)
+//      310   | HK$ Chinese (Hong Kong (China))
+//      311   | HK$ English (Hong Kong (China))
+//      312   | HRK Croatian (Croatia)
+//      313   | IDR English (Indonesia)
+//      314   | IQD Arbic, Central Kurdish (Iraq)
+//      315   | ISK Icelandic (Iceland)
+//      316   | K Burmese (Myanmar (Burma))
+//      317   | Kč Czech (Czech Republic)
+//      318   | KM Bosnian (Bosnia & Herzegovina)
+//      319   | KM Croatian (Bosnia & Herzegovina)
+//      320   | KM Latin, Serbian (Bosnia & Herzegovina)
+//      321   | kr Faroese (Faroe Islands)
+//      322   | kr Northern Sami (Norway)
+//      323   | kr Northern Sami (Sweden)
+//      324   | kr Norwegian Bokmål (Norway)
+//      325   | kr Norwegian Nynorsk (Norway)
+//      326   | kr Swedish (Sweden)
+//      327   | kr. Danish (Denmark)
+//      328   | kr. Kalaallisut (Greenland)
+//      329   | Ksh Swahili (kenya)
+//      330   | L Romanian (Moldova)
+//      331   | L Russian (Moldova)
+//      332   | L Spanish (Honduras)
+//      333   | Lekë Albanian (Albania)
+//      334   | MAD Arabic, Central Atlas Tamazight (Morocco)
+//      335   | MAD French (Morocco)
+//      336   | MAD Tifinagh, Central Atlas Tamazight (Morocco)
+//      337   | MOP$ Chinese (Macau (China))
+//      338   | MVR Divehi (Maldives)
+//      339   | Nfk Tigrinya (Eritrea)
+//      340   | NGN Bini (Nigeria)
+//      341   | NGN Fulah (Nigeria)
+//      342   | NGN Ibibio (Nigeria)
+//      343   | NGN Kanuri (Nigeria)
+//      344   | NOK Lule Sami (Norway)
+//      345   | NOK Southern Sami (Norway)
+//      346   | NZ$ Maori (New Zealand)
+//      347   | PKR Sindhi (Pakistan)
+//      348   | PYG Guarani (Paraguay)
+//      349   | Q Spanish (Guatemala)
+//      350   | R Afrikaans (South Africa)
+//      351   | R English (South Africa)
+//      352   | R Zulu (South Africa)
+//      353   | R$ Portuguese (Brazil)
+//      354   | RD$ Spanish (Dominican Republic)
+//      355   | RF Kinyarwanda (Rwanda)
+//      356   | RM English (Malaysia)
+//      357   | RM Malay (Malaysia)
+//      358   | RON Romanian (Romania)
+//      359   | Rp Indonesoan (Indonesia)
+//      360   | Rs Urdu (Pakistan)
+//      361   | Rs. Tamil (Sri Lanka)
+//      362   | RSD Latin, Serbian (Serbia)
+//      363   | RSD Serbian (Serbia)
+//      364   | RUB Bashkir (Russia)
+//      365   | RUB Tatar (Russia)
+//      366   | S/. Quechua (Peru)
+//      367   | S/. Spanish (Peru)
+//      368   | SEK Lule Sami (Sweden)
+//      369   | SEK Southern Sami (Sweden)
+//      370   | soʻm Latin, Uzbek (Uzbekistan)
+//      371   | soʻm Uzbek (Uzbekistan)
+//      372   | SYP Syriac (Syria)
+//      373   | THB Thai (Thailand)
+//      374   | TMT Turkmen (Turkmenistan)
+//      375   | US$ English (Zimbabwe)
+//      376   | ZAR Northern Sotho (South Africa)
+//      377   | ZAR Southern Sotho (South Africa)
+//      378   | ZAR Tsonga (South Africa)
+//      379   | ZAR Tswana (south Africa)
+//      380   | ZAR Venda (South Africa)
+//      381   | ZAR Xhosa (South Africa)
+//      382   | zł Polish (Poland)
+//      383   | ден Macedonian (Macedonia)
+//      384   | KM Cyrillic, Bosnian (Bosnia & Herzegovina)
+//      385   | KM Serbian (Bosnia & Herzegovina)
+//      386   | лв. Bulgarian (Bulgaria)
+//      387   | p. Belarusian (Belarus)
+//      388   | сом Kyrgyz (Kyrgyzstan)
+//      389   | сом Tajik (Tajikistan)
+//      390   | ج.م. Arabic (Egypt)
+//      391   | د.أ. Arabic (Jordan)
+//      392   | د.أ. Arabic (United Arab Emirates)
+//      393   | د.ب. Arabic (Bahrain)
+//      394   | د.ت. Arabic (Tunisia)
+//      395   | د.ج. Arabic (Algeria)
+//      396   | د.ع. Arabic (Iraq)
+//      397   | د.ك. Arabic (Kuwait)
+//      398   | د.ل. Arabic (Libya)
+//      399   | د.م. Arabic (Morocco)
+//      400   | ر Punjabi (Pakistan)
+//      401   | ر.س. Arabic (Saudi Arabia)
+//      402   | ر.ع. Arabic (Oman)
+//      403   | ر.ق. Arabic (Qatar)
+//      404   | ر.ي. Arabic (Yemen)
+//      405   | ریال Persian (Iran)
+//      406   | ل.س. Arabic (Syria)
+//      407   | ل.ل. Arabic (Lebanon)
+//      408   | ብር Amharic (Ethiopia)
+//      409   | रू Nepaol (Nepal)
+//      410   | රු. Sinhala (Sri Lanka)
+//      411   | ADP
+//      412   | AED
+//      413   | AFA
+//      414   | AFN
+//      415   | ALL
+//      416   | AMD
+//      417   | ANG
+//      418   | AOA
+//      419   | ARS
+//      420   | ATS
+//      421   | AUD
+//      422   | AWG
+//      423   | AZM
+//      424   | AZN
+//      425   | BAM
+//      426   | BBD
+//      427   | BDT
+//      428   | BEF
+//      429   | BGL
+//      430   | BGN
+//      431   | BHD
+//      432   | BIF
+//      433   | BMD
+//      434   | BND
+//      435   | BOB
+//      436   | BOV
+//      437   | BRL
+//      438   | BSD
+//      439   | BTN
+//      440   | BWP
+//      441   | BYR
+//      442   | BZD
+//      443   | CAD
+//      444   | CDF
+//      445   | CHE
+//      446   | CHF
+//      447   | CHW
+//      448   | CLF
+//      449   | CLP
+//      450   | CNY
+//      451   | COP
+//      452   | COU
+//      453   | CRC
+//      454   | CSD
+//      455   | CUC
+//      456   | CVE
+//      457   | CYP
+//      458   | CZK
+//      459   | DEM
+//      460   | DJF
+//      461   | DKK
+//      462   | DOP
+//      463   | DZD
+//      464   | ECS
+//      465   | ECV
+//      466   | EEK
+//      467   | EGP
+//      468   | ERN
+//      469   | ESP
+//      470   | ETB
+//      471   | EUR
+//      472   | FIM
+//      473   | FJD
+//      474   | FKP
+//      475   | FRF
+//      476   | GBP
+//      477   | GEL
+//      478   | GHC
+//      479   | GHS
+//      480   | GIP
+//      481   | GMD
+//      482   | GNF
+//      483   | GRD
+//      484   | GTQ
+//      485   | GYD
+//      486   | HKD
+//      487   | HNL
+//      488   | HRK
+//      489   | HTG
+//      490   | HUF
+//      491   | IDR
+//      492   | IEP
+//      493   | ILS
+//      494   | INR
+//      495   | IQD
+//      496   | IRR
+//      497   | ISK
+//      498   | ITL
+//      499   | JMD
+//      500   | JOD
+//      501   | JPY
+//      502   | KAF
+//      503   | KES
+//      504   | KGS
+//      505   | KHR
+//      506   | KMF
+//      507   | KPW
+//      508   | KRW
+//      509   | KWD
+//      510   | KYD
+//      511   | KZT
+//      512   | LAK
+//      513   | LBP
+//      514   | LKR
+//      515   | LRD
+//      516   | LSL
+//      517   | LTL
+//      518   | LUF
+//      519   | LVL
+//      520   | LYD
+//      521   | MAD
+//      522   | MDL
+//      523   | MGA
+//      524   | MGF
+//      525   | MKD
+//      526   | MMK
+//      527   | MNT
+//      528   | MOP
+//      529   | MRO
+//      530   | MTL
+//      531   | MUR
+//      532   | MVR
+//      533   | MWK
+//      534   | MXN
+//      535   | MXV
+//      536   | MYR
+//      537   | MZM
+//      538   | MZN
+//      539   | NAD
+//      540   | NGN
+//      541   | NIO
+//      542   | NLG
+//      543   | NOK
+//      544   | NPR
+//      545   | NTD
+//      546   | NZD
+//      547   | OMR
+//      548   | PAB
+//      549   | PEN
+//      550   | PGK
+//      551   | PHP
+//      552   | PKR
+//      553   | PLN
+//      554   | PTE
+//      555   | PYG
+//      556   | QAR
+//      557   | ROL
+//      558   | RON
+//      559   | RSD
+//      560   | RUB
+//      561   | RUR
+//      562   | RWF
+//      563   | SAR
+//      564   | SBD
+//      565   | SCR
+//      566   | SDD
+//      567   | SDG
+//      568   | SDP
+//      569   | SEK
+//      570   | SGD
+//      571   | SHP
+//      572   | SIT
+//      573   | SKK
+//      574   | SLL
+//      575   | SOS
+//      576   | SPL
+//      577   | SRD
+//      578   | SRG
+//      579   | STD
+//      580   | SVC
+//      581   | SYP
+//      582   | SZL
+//      583   | THB
+//      584   | TJR
+//      585   | TJS
+//      586   | TMM
+//      587   | TMT
+//      588   | TND
+//      589   | TOP
+//      590   | TRL
+//      591   | TRY
+//      592   | TTD
+//      593   | TWD
+//      594   | TZS
+//      595   | UAH
+//      596   | UGX
+//      597   | USD
+//      598   | USN
+//      599   | USS
+//      600   | UYI
+//      601   | UYU
+//      602   | UZS
+//      603   | VEB
+//      604   | VEF
+//      605   | VND
+//      606   | VUV
+//      607   | WST
+//      608   | XAF
+//      609   | XAG
+//      610   | XAU
+//      611   | XB5
+//      612   | XBA
+//      613   | XBB
+//      614   | XBC
+//      615   | XBD
+//      616   | XCD
+//      617   | XDR
+//      618   | XFO
+//      619   | XFU
+//      620   | XOF
+//      621   | XPD
+//      622   | XPF
+//      623   | XPT
+//      624   | XTS
+//      625   | XXX
+//      626   | YER
+//      627   | YUM
+//      628   | ZAR
+//      629   | ZMK
+//      630   | ZMW
+//      631   | ZWD
+//      632   | ZWL
+//      633   | ZWN
+//      634   | ZWR
 //
 // Excelize support set custom number format for cell. For example, set number
 // as date type in Uruguay (Spanish) format for Sheet1!A6:
 //
-//    f := excelize.NewFile()
-//    f.SetCellValue("Sheet1", "A6", 42920.5)
-//    exp := "[$-380A]dddd\\,\\ dd\" de \"mmmm\" de \"yyyy;@"
-//    style, err := f.NewStyle(&excelize.Style{CustomNumFmt: &exp})
-//    err = f.SetCellStyle("Sheet1", "A6", "A6", style)
+//     f := excelize.NewFile()
+//     f.SetCellValue("Sheet1", "A6", 42920.5)
+//     exp := "[$-380A]dddd\\,\\ dd\" de \"mmmm\" de \"yyyy;@"
+//     style, err := f.NewStyle(&excelize.Style{CustomNumFmt: &exp})
+//     err = f.SetCellStyle("Sheet1", "A6", "A6", style)
 //
 // Cell Sheet1!A6 in the Excel Application: martes, 04 de Julio de 2017
-//
 func (f *File) NewStyle(style interface{}) (int, error) {
        var fs *Style
        var err error
@@ -2476,102 +2475,101 @@ func (f *File) GetCellStyle(sheet, axis string) (int, error) {
 //
 // For example create a borders of cell H9 on Sheet1:
 //
-//    style, err := f.NewStyle(&excelize.Style{
-//        Border: []excelize.Border{
-//            {Type: "left", Color: "0000FF", Style: 3},
-//            {Type: "top", Color: "00FF00", Style: 4},
-//            {Type: "bottom", Color: "FFFF00", Style: 5},
-//            {Type: "right", Color: "FF0000", Style: 6},
-//            {Type: "diagonalDown", Color: "A020F0", Style: 7},
-//            {Type: "diagonalUp", Color: "A020F0", Style: 8},
-//        },
-//    })
-//    if err != nil {
-//        fmt.Println(err)
-//    }
-//    err = f.SetCellStyle("Sheet1", "H9", "H9", style)
+//     style, err := f.NewStyle(&excelize.Style{
+//         Border: []excelize.Border{
+//             {Type: "left", Color: "0000FF", Style: 3},
+//             {Type: "top", Color: "00FF00", Style: 4},
+//             {Type: "bottom", Color: "FFFF00", Style: 5},
+//             {Type: "right", Color: "FF0000", Style: 6},
+//             {Type: "diagonalDown", Color: "A020F0", Style: 7},
+//             {Type: "diagonalUp", Color: "A020F0", Style: 8},
+//         },
+//     })
+//     if err != nil {
+//         fmt.Println(err)
+//     }
+//     err = f.SetCellStyle("Sheet1", "H9", "H9", style)
 //
 // Set gradient fill with vertical variants shading styles for cell H9 on
 // Sheet1:
 //
-//    style, err := f.NewStyle(&excelize.Style{
-//        Fill: excelize.Fill{Type: "gradient", Color: []string{"#FFFFFF", "#E0EBF5"}, Shading: 1},
-//    })
-//    if err != nil {
-//        fmt.Println(err)
-//    }
-//    err = f.SetCellStyle("Sheet1", "H9", "H9", style)
+//     style, err := f.NewStyle(&excelize.Style{
+//         Fill: excelize.Fill{Type: "gradient", Color: []string{"#FFFFFF", "#E0EBF5"}, Shading: 1},
+//     })
+//     if err != nil {
+//         fmt.Println(err)
+//     }
+//     err = f.SetCellStyle("Sheet1", "H9", "H9", style)
 //
 // Set solid style pattern fill for cell H9 on Sheet1:
 //
-//    style, err := f.NewStyle(&excelize.Style{
-//        Fill: excelize.Fill{Type: "pattern", Color: []string{"#E0EBF5"}, Pattern: 1},
-//    })
-//    if err != nil {
-//        fmt.Println(err)
-//    }
-//    err = f.SetCellStyle("Sheet1", "H9", "H9", style)
+//     style, err := f.NewStyle(&excelize.Style{
+//         Fill: excelize.Fill{Type: "pattern", Color: []string{"#E0EBF5"}, Pattern: 1},
+//     })
+//     if err != nil {
+//         fmt.Println(err)
+//     }
+//     err = f.SetCellStyle("Sheet1", "H9", "H9", style)
 //
 // Set alignment style for cell H9 on Sheet1:
 //
-//    style, err := f.NewStyle(&excelize.Style{
-//        Alignment: &excelize.Alignment{
-//            Horizontal:      "center",
-//            Indent:          1,
-//            JustifyLastLine: true,
-//            ReadingOrder:    0,
-//            RelativeIndent:  1,
-//            ShrinkToFit:     true,
-//            TextRotation:    45,
-//            Vertical:        "",
-//            WrapText:        true,
-//        },
-//    })
-//    if err != nil {
-//        fmt.Println(err)
-//    }
-//    err = f.SetCellStyle("Sheet1", "H9", "H9", style)
+//     style, err := f.NewStyle(&excelize.Style{
+//         Alignment: &excelize.Alignment{
+//             Horizontal:      "center",
+//             Indent:          1,
+//             JustifyLastLine: true,
+//             ReadingOrder:    0,
+//             RelativeIndent:  1,
+//             ShrinkToFit:     true,
+//             TextRotation:    45,
+//             Vertical:        "",
+//             WrapText:        true,
+//         },
+//     })
+//     if err != nil {
+//         fmt.Println(err)
+//     }
+//     err = f.SetCellStyle("Sheet1", "H9", "H9", style)
 //
 // Dates and times in Excel are represented by real numbers, for example "Apr 7
 // 2017 12:00 PM" is represented by the number 42920.5. Set date and time format
 // for cell H9 on Sheet1:
 //
-//    f.SetCellValue("Sheet1", "H9", 42920.5)
-//    style, err := f.NewStyle(&excelize.Style{NumFmt: 22})
-//    if err != nil {
-//        fmt.Println(err)
-//    }
-//    err = f.SetCellStyle("Sheet1", "H9", "H9", style)
+//     f.SetCellValue("Sheet1", "H9", 42920.5)
+//     style, err := f.NewStyle(&excelize.Style{NumFmt: 22})
+//     if err != nil {
+//         fmt.Println(err)
+//     }
+//     err = f.SetCellStyle("Sheet1", "H9", "H9", style)
 //
 // Set font style for cell H9 on Sheet1:
 //
-//    style, err := f.NewStyle(&excelize.Style{
-//        Font: &excelize.Font{
-//            Bold:   true,
-//            Italic: true,
-//            Family: "Times New Roman",
-//            Size:   36,
-//            Color:  "#777777",
-//        },
-//    })
-//    if err != nil {
-//        fmt.Println(err)
-//    }
-//    err = f.SetCellStyle("Sheet1", "H9", "H9", style)
+//     style, err := f.NewStyle(&excelize.Style{
+//         Font: &excelize.Font{
+//             Bold:   true,
+//             Italic: true,
+//             Family: "Times New Roman",
+//             Size:   36,
+//             Color:  "#777777",
+//         },
+//     })
+//     if err != nil {
+//         fmt.Println(err)
+//     }
+//     err = f.SetCellStyle("Sheet1", "H9", "H9", style)
 //
 // Hide and lock for cell H9 on Sheet1:
 //
-//    style, err := f.NewStyle(&excelize.Style{
-//        Protection: &excelize.Protection{
-//            Hidden: true,
-//            Locked: true,
-//        },
-//    })
-//    if err != nil {
-//        fmt.Println(err)
-//    }
-//    err = f.SetCellStyle("Sheet1", "H9", "H9", style)
-//
+//     style, err := f.NewStyle(&excelize.Style{
+//         Protection: &excelize.Protection{
+//             Hidden: true,
+//             Locked: true,
+//         },
+//     })
+//     if err != nil {
+//         fmt.Println(err)
+//     }
+//     err = f.SetCellStyle("Sheet1", "H9", "H9", style)
 func (f *File) SetCellStyle(sheet, hCell, vCell string, styleID int) error {
        hCol, hRow, err := CellNameToCoordinates(hCell)
        if err != nil {
@@ -2622,64 +2620,64 @@ func (f *File) SetCellStyle(sheet, hCell, vCell string, styleID int) error {
 // The type option is a required parameter and it has no default value.
 // Allowable type values and their associated parameters are:
 //
-//     Type          | Parameters
-//    ---------------+------------------------------------
-//     cell          | criteria
-//                   | value
-//                   | minimum
-//                   | maximum
-//     date          | criteria
-//                   | value
-//                   | minimum
-//                   | maximum
-//     time_period   | criteria
-//     text          | criteria
-//                   | value
-//     average       | criteria
-//     duplicate     | (none)
-//     unique        | (none)
-//     top           | criteria
-//                   | value
-//     bottom        | criteria
-//                   | value
-//     blanks        | (none)
-//     no_blanks     | (none)
-//     errors        | (none)
-//     no_errors     | (none)
-//     2_color_scale | min_type
-//                   | max_type
-//                   | min_value
-//                   | max_value
-//                   | min_color
-//                   | max_color
-//     3_color_scale | min_type
-//                   | mid_type
-//                   | max_type
-//                   | min_value
-//                   | mid_value
-//                   | max_value
-//                   | min_color
-//                   | mid_color
-//                   | max_color
-//     data_bar      | min_type
-//                   | max_type
-//                   | min_value
-//                   | max_value
-//                   | bar_color
-//     formula       | criteria
+//      Type          | Parameters
+//     ---------------+------------------------------------
+//      cell          | criteria
+//                    | value
+//                    | minimum
+//                    | maximum
+//      date          | criteria
+//                    | value
+//                    | minimum
+//                    | maximum
+//      time_period   | criteria
+//      text          | criteria
+//                    | value
+//      average       | criteria
+//      duplicate     | (none)
+//      unique        | (none)
+//      top           | criteria
+//                    | value
+//      bottom        | criteria
+//                    | value
+//      blanks        | (none)
+//      no_blanks     | (none)
+//      errors        | (none)
+//      no_errors     | (none)
+//      2_color_scale | min_type
+//                    | max_type
+//                    | min_value
+//                    | max_value
+//                    | min_color
+//                    | max_color
+//      3_color_scale | min_type
+//                    | mid_type
+//                    | max_type
+//                    | min_value
+//                    | mid_value
+//                    | max_value
+//                    | min_color
+//                    | mid_color
+//                    | max_color
+//      data_bar      | min_type
+//                    | max_type
+//                    | min_value
+//                    | max_value
+//                    | bar_color
+//      formula       | criteria
 //
 // The criteria parameter is used to set the criteria by which the cell data
 // will be evaluated. It has no default value. The most common criteria as
 // applied to {"type":"cell"} are:
 //
-//    between                  |
-//    not between              |
-//    equal to                 | ==
-//    not equal to             | !=
-//    greater than             | >
-//    less than                | <
-//    greater than or equal to | >=
-//    less than or equal to    | <=
+//     between                  |
+//     not between              |
+//     equal to                 | ==
+//     not equal to             | !=
+//     greater than             | >
+//     less than                | <
+//     greater than or equal to | >=
+//     less than or equal to    | <=
 //
 // You can either use Excel's textual description strings, in the first column
 // above, or the more common symbolic alternatives.
@@ -2690,22 +2688,22 @@ func (f *File) SetCellStyle(sheet, hCell, vCell string, styleID int) error {
 // value: The value is generally used along with the criteria parameter to set
 // the rule by which the cell data will be evaluated:
 //
-//    f.SetConditionalFormat("Sheet1", "D1:D10", fmt.Sprintf(`[{"type":"cell","criteria":">","format":%d,"value":"6"}]`, format))
+//     f.SetConditionalFormat("Sheet1", "D1:D10", fmt.Sprintf(`[{"type":"cell","criteria":">","format":%d,"value":"6"}]`, format))
 //
 // The value property can also be an cell reference:
 //
-//    f.SetConditionalFormat("Sheet1", "D1:D10", fmt.Sprintf(`[{"type":"cell","criteria":">","format":%d,"value":"$C$1"}]`, format))
+//     f.SetConditionalFormat("Sheet1", "D1:D10", fmt.Sprintf(`[{"type":"cell","criteria":">","format":%d,"value":"$C$1"}]`, format))
 //
 // type: format - The format parameter is used to specify the format that will
 // be applied to the cell when the conditional formatting criterion is met. The
 // format is created using the NewConditionalStyle() method in the same way as
 // cell formats:
 //
-//    format, err = f.NewConditionalStyle(`{"font":{"color":"#9A0511"},"fill":{"type":"pattern","color":["#FEC7CE"],"pattern":1}}`)
-//    if err != nil {
-//        fmt.Println(err)
-//    }
-//    f.SetConditionalFormat("Sheet1", "A1:A10", fmt.Sprintf(`[{"type":"cell","criteria":">","format":%d,"value":"6"}]`, format))
+//     format, err = f.NewConditionalStyle(`{"font":{"color":"#9A0511"},"fill":{"type":"pattern","color":["#FEC7CE"],"pattern":1}}`)
+//     if err != nil {
+//         fmt.Println(err)
+//     }
+//     f.SetConditionalFormat("Sheet1", "A1:A10", fmt.Sprintf(`[{"type":"cell","criteria":">","format":%d,"value":"6"}]`, format))
 //
 // Note: In Excel, a conditional format is superimposed over the existing cell
 // format and not all cell format properties can be modified. Properties that
@@ -2716,20 +2714,20 @@ func (f *File) SetCellStyle(sheet, hCell, vCell string, styleID int) error {
 // Excel specifies some default formats to be used with conditional formatting.
 // These can be replicated using the following excelize formats:
 //
-//    // Rose format for bad conditional.
-//    format1, err = f.NewConditionalStyle(`{"font":{"color":"#9A0511"},"fill":{"type":"pattern","color":["#FEC7CE"],"pattern":1}}`)
+//     // Rose format for bad conditional.
+//     format1, err = f.NewConditionalStyle(`{"font":{"color":"#9A0511"},"fill":{"type":"pattern","color":["#FEC7CE"],"pattern":1}}`)
 //
-//    // Light yellow format for neutral conditional.
-//    format2, err = f.NewConditionalStyle(`{"font":{"color":"#9B5713"},"fill":{"type":"pattern","color":["#FEEAA0"],"pattern":1}}`)
+//     // Light yellow format for neutral conditional.
+//     format2, err = f.NewConditionalStyle(`{"font":{"color":"#9B5713"},"fill":{"type":"pattern","color":["#FEEAA0"],"pattern":1}}`)
 //
-//    // Light green format for good conditional.
-//    format3, err = f.NewConditionalStyle(`{"font":{"color":"#09600B"},"fill":{"type":"pattern","color":["#C7EECF"],"pattern":1}}`)
+//     // Light green format for good conditional.
+//     format3, err = f.NewConditionalStyle(`{"font":{"color":"#09600B"},"fill":{"type":"pattern","color":["#C7EECF"],"pattern":1}}`)
 //
 // type: minimum - The minimum parameter is used to set the lower limiting value
 // when the criteria is either "between" or "not between".
 //
-//    // Hightlight cells rules: between...
-//    f.SetConditionalFormat("Sheet1", "A1:A10", fmt.Sprintf(`[{"type":"cell","criteria":"between","format":%d,"minimum":"6","maximum":"8"}]`, format))
+//     // Hightlight cells rules: between...
+//     f.SetConditionalFormat("Sheet1", "A1:A10", fmt.Sprintf(`[{"type":"cell","criteria":"between","format":%d,"minimum":"6","maximum":"8"}]`, format))
 //
 // type: maximum - The maximum parameter is used to set the upper limiting value
 // when the criteria is either "between" or "not between". See the previous
@@ -2738,36 +2736,36 @@ func (f *File) SetCellStyle(sheet, hCell, vCell string, styleID int) error {
 // type: average - The average type is used to specify Excel's "Average" style
 // conditional format:
 //
-//    // Top/Bottom rules: Above Average...
-//    f.SetConditionalFormat("Sheet1", "A1:A10", fmt.Sprintf(`[{"type":"average","criteria":"=","format":%d, "above_average": true}]`, format1))
+//     // Top/Bottom rules: Above Average...
+//     f.SetConditionalFormat("Sheet1", "A1:A10", fmt.Sprintf(`[{"type":"average","criteria":"=","format":%d, "above_average": true}]`, format1))
 //
-//    // Top/Bottom rules: Below Average...
-//    f.SetConditionalFormat("Sheet1", "B1:B10", fmt.Sprintf(`[{"type":"average","criteria":"=","format":%d, "above_average": false}]`, format2))
+//     // Top/Bottom rules: Below Average...
+//     f.SetConditionalFormat("Sheet1", "B1:B10", fmt.Sprintf(`[{"type":"average","criteria":"=","format":%d, "above_average": false}]`, format2))
 //
 // type: duplicate - The duplicate type is used to highlight duplicate cells in a range:
 //
-//    // Hightlight cells rules: Duplicate Values...
-//    f.SetConditionalFormat("Sheet1", "A1:A10", fmt.Sprintf(`[{"type":"duplicate","criteria":"=","format":%d}]`, format))
+//     // Hightlight cells rules: Duplicate Values...
+//     f.SetConditionalFormat("Sheet1", "A1:A10", fmt.Sprintf(`[{"type":"duplicate","criteria":"=","format":%d}]`, format))
 //
 // type: unique - The unique type is used to highlight unique cells in a range:
 //
-//    // Hightlight cells rules: Not Equal To...
-//    f.SetConditionalFormat("Sheet1", "A1:A10", fmt.Sprintf(`[{"type":"unique","criteria":"=","format":%d}]`, format))
+//     // Hightlight cells rules: Not Equal To...
+//     f.SetConditionalFormat("Sheet1", "A1:A10", fmt.Sprintf(`[{"type":"unique","criteria":"=","format":%d}]`, format))
 //
 // type: top - The top type is used to specify the top n values by number or percentage in a range:
 //
-//    // Top/Bottom rules: Top 10.
-//    f.SetConditionalFormat("Sheet1", "H1:H10", fmt.Sprintf(`[{"type":"top","criteria":"=","format":%d,"value":"6"}]`, format))
+//     // Top/Bottom rules: Top 10.
+//     f.SetConditionalFormat("Sheet1", "H1:H10", fmt.Sprintf(`[{"type":"top","criteria":"=","format":%d,"value":"6"}]`, format))
 //
 // The criteria can be used to indicate that a percentage condition is required:
 //
-//    f.SetConditionalFormat("Sheet1", "A1:A10", fmt.Sprintf(`[{"type":"top","criteria":"=","format":%d,"value":"6","percent":true}]`, format))
+//     f.SetConditionalFormat("Sheet1", "A1:A10", fmt.Sprintf(`[{"type":"top","criteria":"=","format":%d,"value":"6","percent":true}]`, format))
 //
 // type: 2_color_scale - The 2_color_scale type is used to specify Excel's "2
 // Color Scale" style conditional format:
 //
-//    // Color scales: 2 color.
-//    f.SetConditionalFormat("Sheet1", "A1:A10", `[{"type":"2_color_scale","criteria":"=","min_type":"min","max_type":"max","min_color":"#F8696B","max_color":"#63BE7B"}]`)
+//     // Color scales: 2 color.
+//     f.SetConditionalFormat("Sheet1", "A1:A10", `[{"type":"2_color_scale","criteria":"=","min_type":"min","max_type":"max","min_color":"#F8696B","max_color":"#63BE7B"}]`)
 //
 // This conditional type can be modified with min_type, max_type, min_value,
 // max_value, min_color and max_color, see below.
@@ -2775,8 +2773,8 @@ func (f *File) SetCellStyle(sheet, hCell, vCell string, styleID int) error {
 // type: 3_color_scale - The 3_color_scale type is used to specify Excel's "3
 // Color Scale" style conditional format:
 //
-//    // Color scales: 3 color.
-//    f.SetConditionalFormat("Sheet1", "A1:A10", `[{"type":"3_color_scale","criteria":"=","min_type":"min","mid_type":"percentile","max_type":"max","min_color":"#F8696B","mid_color":"#FFEB84","max_color":"#63BE7B"}]`)
+//     // Color scales: 3 color.
+//     f.SetConditionalFormat("Sheet1", "A1:A10", `[{"type":"3_color_scale","criteria":"=","min_type":"min","mid_type":"percentile","max_type":"max","min_color":"#F8696B","mid_color":"#FFEB84","max_color":"#63BE7B"}]`)
 //
 // This conditional type can be modified with min_type, mid_type, max_type,
 // min_value, mid_value, max_value, min_color, mid_color and max_color, see
@@ -2787,17 +2785,17 @@ func (f *File) SetCellStyle(sheet, hCell, vCell string, styleID int) error {
 //
 // min_type - The min_type and max_type properties are available when the conditional formatting type is 2_color_scale, 3_color_scale or data_bar. The mid_type is available for 3_color_scale. The properties are used as follows:
 //
-//    // Data Bars: Gradient Fill.
-//    f.SetConditionalFormat("Sheet1", "K1:K10", `[{"type":"data_bar", "criteria":"=", "min_type":"min","max_type":"max","bar_color":"#638EC6"}]`)
+//     // Data Bars: Gradient Fill.
+//     f.SetConditionalFormat("Sheet1", "K1:K10", `[{"type":"data_bar", "criteria":"=", "min_type":"min","max_type":"max","bar_color":"#638EC6"}]`)
 //
 // The available min/mid/max types are:
 //
-//    min        (for min_type only)
-//    num
-//    percent
-//    percentile
-//    formula
-//    max        (for max_type only)
+//     min        (for min_type only)
+//     num
+//     percent
+//     percentile
+//     formula
+//     max        (for max_type only)
 //
 // mid_type - Used for 3_color_scale. Same as min_type, see above.
 //
@@ -2816,15 +2814,14 @@ func (f *File) SetCellStyle(sheet, hCell, vCell string, styleID int) error {
 // The mid_color is available for 3_color_scale. The properties are used as
 // follows:
 //
-//    // Color scales: 3 color.
-//    f.SetConditionalFormat("Sheet1", "B1:B10", `[{"type":"3_color_scale","criteria":"=","min_type":"min","mid_type":"percentile","max_type":"max","min_color":"#F8696B","mid_color":"#FFEB84","max_color":"#63BE7B"}]`)
+//     // Color scales: 3 color.
+//     f.SetConditionalFormat("Sheet1", "B1:B10", `[{"type":"3_color_scale","criteria":"=","min_type":"min","mid_type":"percentile","max_type":"max","min_color":"#F8696B","mid_color":"#FFEB84","max_color":"#63BE7B"}]`)
 //
 // mid_color - Used for 3_color_scale. Same as min_color, see above.
 //
 // max_color - Same as min_color, see above.
 //
 // bar_color - Used for data_bar. Same as min_color, see above.
-//
 func (f *File) SetConditionalFormat(sheet, area, formatSet string) error {
        var format []*formatConditional
        err := json.Unmarshal([]byte(formatSet), &format)
index cf9c22a..dc5f441 100644 (file)
--- a/table.go
+++ b/table.go
@@ -32,18 +32,18 @@ func parseFormatTableSet(formatSet string) (*formatTable, error) {
 // name, coordinate area and format set. For example, create a table of A1:D5
 // on Sheet1:
 //
-//    err := f.AddTable("Sheet1", "A1", "D5", "")
+//     err := f.AddTable("Sheet1", "A1", "D5", "")
 //
 // Create a table of F2:H6 on Sheet2 with format set:
 //
-//    err := f.AddTable("Sheet2", "F2", "H6", `{
-//        "table_name": "table",
-//        "table_style": "TableStyleMedium2",
-//        "show_first_column": true,
-//        "show_last_column": true,
-//        "show_row_stripes": false,
-//        "show_column_stripes": true
-//    }`)
+//     err := f.AddTable("Sheet2", "F2", "H6", `{
+//         "table_name": "table",
+//         "table_style": "TableStyleMedium2",
+//         "show_first_column": true,
+//         "show_last_column": true,
+//         "show_row_stripes": false,
+//         "show_column_stripes": true
+//     }`)
 //
 // Note that the table must be at least two lines including the header. The
 // header cells must contain strings and must be unique, and must set the
@@ -54,10 +54,9 @@ func parseFormatTableSet(formatSet string) (*formatTable, error) {
 //
 // table_style: The built-in table style names
 //
-//    TableStyleLight1 - TableStyleLight21
-//    TableStyleMedium1 - TableStyleMedium28
-//    TableStyleDark1 - TableStyleDark11
-//
+//     TableStyleLight1 - TableStyleLight21
+//     TableStyleMedium1 - TableStyleMedium28
+//     TableStyleDark1 - TableStyleDark11
 func (f *File) AddTable(sheet, hCell, vCell, format string) error {
        formatSet, err := parseFormatTableSet(format)
        if err != nil {
@@ -216,11 +215,11 @@ func parseAutoFilterSet(formatSet string) (*formatAutoFilter, error) {
 // way of filtering a 2D range of data based on some simple criteria. For
 // example applying an autofilter to a cell range A1:D4 in the Sheet1:
 //
-//    err := f.AutoFilter("Sheet1", "A1", "D4", "")
+//     err := f.AutoFilter("Sheet1", "A1", "D4", "")
 //
 // Filter data in an autofilter:
 //
-//    err := f.AutoFilter("Sheet1", "A1", "D4", `{"column":"B","expression":"x != blanks"}`)
+//     err := f.AutoFilter("Sheet1", "A1", "D4", `{"column":"B","expression":"x != blanks"}`)
 //
 // column defines the filter columns in a autofilter range based on simple
 // criteria
@@ -235,38 +234,38 @@ func parseAutoFilterSet(formatSet string) (*formatAutoFilter, error) {
 // expression defines the conditions, the following operators are available
 // for setting the filter criteria:
 //
-//    ==
-//    !=
-//    >
-//    <
-//    >=
-//    <=
-//    and
-//    or
+//     ==
+//     !=
+//     >
+//     <
+//     >=
+//     <=
+//     and
+//     or
 //
 // An expression can comprise a single statement or two statements separated
 // by the 'and' and 'or' operators. For example:
 //
-//    x <  2000
-//    x >  2000
-//    x == 2000
-//    x >  2000 and x <  5000
-//    x == 2000 or  x == 5000
+//     x <  2000
+//     x >  2000
+//     x == 2000
+//     x >  2000 and x <  5000
+//     x == 2000 or  x == 5000
 //
 // Filtering of blank or non-blank data can be achieved by using a value of
 // Blanks or NonBlanks in the expression:
 //
-//    x == Blanks
-//    x == NonBlanks
+//     x == Blanks
+//     x == NonBlanks
 //
 // Excel also allows some simple string matching operations:
 //
-//    x == b*      // begins with b
-//    x != b*      // doesn't begin with b
-//    x == *b      // ends with b
-//    x != *b      // doesn't end with b
-//    x == *b*     // contains b
-//    x != *b*     // doesn't contains b
+//     x == b*      // begins with b
+//     x != b*      // doesn't begin with b
+//     x == *b      // ends with b
+//     x != *b      // doesn't end with b
+//     x == *b*     // contains b
+//     x != *b*     // doesn't contains b
 //
 // You can also use '*' to match any character or number and '?' to match any
 // single character or number. No other regular expression quantifier is
@@ -277,10 +276,9 @@ func parseAutoFilterSet(formatSet string) (*formatAutoFilter, error) {
 // simple string. The actual placeholder name is ignored internally so the
 // following are all equivalent:
 //
-//    x     < 2000
-//    col   < 2000
-//    Price < 2000
-//
+//     x     < 2000
+//     col   < 2000
+//     Price < 2000
 func (f *File) AutoFilter(sheet, hCell, vCell, format string) error {
        hCol, hRow, err := CellNameToCoordinates(hCell)
        if err != nil {
@@ -436,9 +434,8 @@ func (f *File) writeCustomFilter(filter *xlsxAutoFilter, operator int, val strin
 //
 // Examples:
 //
-//    ('x', '==', 2000) -> exp1
-//    ('x', '>',  2000, 'and', 'x', '<', 5000) -> exp1 and exp2
-//
+//     ('x', '==', 2000) -> exp1
+//     ('x', '>',  2000, 'and', 'x', '<', 5000) -> exp1 and exp2
 func (f *File) parseFilterExpression(expression string, tokens []string) ([]int, []string, error) {
        var expressions []int
        var t []string
index 417524b..dbe212a 100644 (file)
@@ -120,9 +120,10 @@ func (f *File) workBookWriter() {
 // SetWorkbookPrOptions provides a function to sets workbook properties.
 //
 // Available options:
-//   Date1904(bool)
-//   FilterPrivacy(bool)
-//   CodeName(string)
+//
+//     Date1904(bool)
+//     FilterPrivacy(bool)
+//     CodeName(string)
 func (f *File) SetWorkbookPrOptions(opts ...WorkbookPrOption) error {
        wb := f.workbookReader()
        pr := wb.WorkbookPr
@@ -154,9 +155,10 @@ func (o CodeName) setWorkbookPrOption(pr *xlsxWorkbookPr) {
 // GetWorkbookPrOptions provides a function to gets workbook properties.
 //
 // Available options:
-//   Date1904(bool)
-//   FilterPrivacy(bool)
-//   CodeName(string)
+//
+//     Date1904(bool)
+//     FilterPrivacy(bool)
+//     CodeName(string)
 func (f *File) GetWorkbookPrOptions(opts ...WorkbookPrOptionPtr) error {
        wb := f.workbookReader()
        pr := wb.WorkbookPr
index f578033..9e25d50 100644 (file)
@@ -21,60 +21,59 @@ type xlsxCalcChain struct {
 
 // xlsxCalcChainC directly maps the c element.
 //
-//     Attributes               | Attributes
-//    --------------------------+----------------------------------------------------------
-//     a (Array)                | A Boolean flag indicating whether the cell's formula
-//                              | is an array formula. True if this cell's formula is
-//                              | an array formula, false otherwise. If there is a
-//                              | conflict between this attribute and the t attribute
-//                              | of the f element (§18.3.1.40), the t attribute takes
-//                              | precedence. The possible values for this attribute
-//                              | are defined by the W3C XML Schema boolean datatype.
-//                              |
-//     i (Sheet Id)             | A sheet Id of a sheet the cell belongs to. If this is
-//                              | omitted, it is assumed to be the same as the i value
-//                              | of the previous cell.The possible values for this
-//                              | attribute are defined by the W3C XML Schema int datatype.
-//                              |
-//     l (New Dependency Level) | A Boolean flag indicating that the cell's formula
-//                              | starts a new dependency level. True if the formula
-//                              | starts a new dependency level, false otherwise.
-//                              | Starting a new dependency level means that all
-//                              | concurrent calculations, and child calculations, shall
-//                              | be completed - and the cells have new values - before
-//                              | the calc chain can continue. In other words, this
-//                              | dependency level might depend on levels that came before
-//                              | it, and any later dependency levels might depend on
-//                              | this level; but not later dependency levels can have
-//                              | any calculations started until this dependency level
-//                              | completes.The possible values for this attribute are
-//                              | defined by the W3C XML Schema boolean datatype.
-//                              |
-//     r (Cell Reference)       | An A-1 style reference to a cell.The possible values
-//                              | for this attribute are defined by the ST_CellRef
-//                              | simple type (§18.18.7).
-//                              |
-//     s (Child Chain)          | A Boolean flag indicating whether the cell's formula
-//                              | is on a child chain. True if this cell is part of a
-//                              | child chain, false otherwise. If this is omitted, it
-//                              | is assumed to be the same as the s value of the
-//                              | previous cell .A child chain is a list of calculations
-//                              | that occur which depend on the parent to the chain.
-//                              | There shall not be cross dependencies between child
-//                              | chains. Child chains are not the same as dependency
-//                              | levels - a child chain and its parent are all on the
-//                              | same dependency level. Child chains are series of
-//                              | calculations that can be independently farmed out to
-//                              | other threads or processors.The possible values for
-//                              | this attribute is defined by the W3C XML Schema
-//                              | boolean datatype.
-//                              |
-//     t (New Thread)           | A Boolean flag indicating whether the cell's formula
-//                              | starts a new thread. True if the cell's formula starts
-//                              | a new thread, false otherwise.The possible values for
-//                              | this attribute is defined by the W3C XML Schema
-//                              | boolean datatype.
-//
+//      Attributes               | Attributes
+//     --------------------------+----------------------------------------------------------
+//      a (Array)                | A Boolean flag indicating whether the cell's formula
+//                               | is an array formula. True if this cell's formula is
+//                               | an array formula, false otherwise. If there is a
+//                               | conflict between this attribute and the t attribute
+//                               | of the f element (§18.3.1.40), the t attribute takes
+//                               | precedence. The possible values for this attribute
+//                               | are defined by the W3C XML Schema boolean datatype.
+//                               |
+//      i (Sheet Id)             | A sheet Id of a sheet the cell belongs to. If this is
+//                               | omitted, it is assumed to be the same as the i value
+//                               | of the previous cell.The possible values for this
+//                               | attribute are defined by the W3C XML Schema int datatype.
+//                               |
+//      l (New Dependency Level) | A Boolean flag indicating that the cell's formula
+//                               | starts a new dependency level. True if the formula
+//                               | starts a new dependency level, false otherwise.
+//                               | Starting a new dependency level means that all
+//                               | concurrent calculations, and child calculations, shall
+//                               | be completed - and the cells have new values - before
+//                               | the calc chain can continue. In other words, this
+//                               | dependency level might depend on levels that came before
+//                               | it, and any later dependency levels might depend on
+//                               | this level; but not later dependency levels can have
+//                               | any calculations started until this dependency level
+//                               | completes.The possible values for this attribute are
+//                               | defined by the W3C XML Schema boolean datatype.
+//                               |
+//      r (Cell Reference)       | An A-1 style reference to a cell.The possible values
+//                               | for this attribute are defined by the ST_CellRef
+//                               | simple type (§18.18.7).
+//                               |
+//      s (Child Chain)          | A Boolean flag indicating whether the cell's formula
+//                               | is on a child chain. True if this cell is part of a
+//                               | child chain, false otherwise. If this is omitted, it
+//                               | is assumed to be the same as the s value of the
+//                               | previous cell .A child chain is a list of calculations
+//                               | that occur which depend on the parent to the chain.
+//                               | There shall not be cross dependencies between child
+//                               | chains. Child chains are not the same as dependency
+//                               | levels - a child chain and its parent are all on the
+//                               | same dependency level. Child chains are series of
+//                               | calculations that can be independently farmed out to
+//                               | other threads or processors.The possible values for
+//                               | this attribute is defined by the W3C XML Schema
+//                               | boolean datatype.
+//                               |
+//      t (New Thread)           | A Boolean flag indicating whether the cell's formula
+//                               | starts a new thread. True if the cell's formula starts
+//                               | a new thread, false otherwise.The possible values for
+//                               | this attribute is defined by the W3C XML Schema
+//                               | boolean datatype.
 type xlsxCalcChainC struct {
        R string `xml:"r,attr"`
        I int    `xml:"i,attr"`
index 81e9ff9..3b9caac 100644 (file)
@@ -449,16 +449,15 @@ type DataValidation struct {
 //
 // This simple type is restricted to the values listed in the following table:
 //
-//      Enumeration Value         | Description
-//     ---------------------------+---------------------------------
-//      b (Boolean)               | Cell containing a boolean.
-//      d (Date)                  | Cell contains a date in the ISO 8601 format.
-//      e (Error)                 | Cell containing an error.
-//      inlineStr (Inline String) | Cell containing an (inline) rich string, i.e., one not in the shared string table. If this cell type is used, then the cell value is in the is element rather than the v element in the cell (c element).
-//      n (Number)                | Cell containing a number.
-//      s (Shared String)         | Cell containing a shared string.
-//      str (String)              | Cell containing a formula string.
-//
+//      Enumeration Value         | Description
+//     ---------------------------+---------------------------------
+//      b (Boolean)               | Cell containing a boolean.
+//      d (Date)                  | Cell contains a date in the ISO 8601 format.
+//      e (Error)                 | Cell containing an error.
+//      inlineStr (Inline String) | Cell containing an (inline) rich string, i.e., one not in the shared string table. If this cell type is used, then the cell value is in the is element rather than the v element in the cell (c element).
+//      n (Number)                | Cell containing a number.
+//      s (Shared String)         | Cell containing a shared string.
+//      str (String)              | Cell containing a formula string.
 type xlsxC struct {
        XMLName  xml.Name `xml:"c"`
        XMLSpace xml.Attr `xml:"space,attr,omitempty"`
@@ -644,13 +643,12 @@ type xlsxHyperlink struct {
 // size of the sample. To reference the table, just add the tableParts element,
 // of course after having created and stored the table part. For example:
 //
-//    <worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
-//        ...
-//        <tableParts count="1">
-//                   <tablePart r:id="rId1" />
-//        </tableParts>
-//    </worksheet>
-//
+//        <worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
+//            ...
+//            <tableParts count="1">
+//                           <tablePart r:id="rId1" />
+//            </tableParts>
+//        </worksheet>
 type xlsxTableParts struct {
        XMLName    xml.Name         `xml:"tableParts"`
        Count      int              `xml:"count,attr,omitempty"`
@@ -667,8 +665,7 @@ type xlsxTablePart struct {
 // http://schemas.openxmlformats.org/spreadsheetml/2006/main - Background sheet
 // image. For example:
 //
-//    <picture r:id="rId1"/>
-//
+//     <picture r:id="rId1"/>
 type xlsxPicture struct {
        XMLName xml.Name `xml:"picture"`
        RID     string   `xml:"http://schemas.openxmlformats.org/officeDocument/2006/relationships id,attr,omitempty"`