基本函数

SpreadJS包括一个全面的计算引擎,该引擎支持500个内置函数,自定义函数,数组函数,动态数组,公式文本框,本地化语言函数名称,大多数Excel函数等。

双击“AVG”单元格或最低得分值,以查看所使用的公式。 您还可以通过输入函数名称和单元格范围或使用Excel等鼠标选择范围来添加任何公式。

SpreadJS 内置提供了丰富的函数: 包括一些经常会用到的基本函数,比如 SUM ; 以及一些更高级一些的函数,比如 MAX。 请参照以下的示例代码: 你可以在单元格中直接输入公式 =SUM(A1:C5) 。 也可以通过代码调用 setFormula 方法将公式应用到表单中。 注意: SpreadJS提供了下面这些Excel基础函数: ABS ACOS ASIN ATAN ATAN2 COS CEILING ODD EVEN FLOOR LN SQRT SIN TAN SIGN GCD LCM PRODUCT POWER MOD QUOTIENT SUBTOTAL INT MROUND ROUND ROUNDDOWN ROUNDUP TRUNC EXP LOG LOG10 SUM SUMIF SUMIFS SUMPRODUCT SUMSQ SUMX2MY2 SUMX2PY2 SUMXMY2 SERIESSUM PI SQRTPI DEGREES RADIANS COSH ACOSH SINH ASINH TANH ATANH MDETERM MINVERSE MMULT FACT FACTDOUBLE MULTINOMIAL RAND RANDBETWEEN COMBIN ROMAN CEILING.PRECISE ISO.CEILING FLOOR.PRECISE MUNIT AND OR NOT IF IFERROR TRUE FALSE DATE TIME DATEVALUE TIMEVALUE NOW TODAY HOUR MINUTE SECOND DAY MONTH YEAR WEEKNUM WEEKDAY EDATE EOMONTH WORKDAY WORKDAY.INTL DAYS360 NETWORKDAYS NETWORKDAYS.INTL YEARFRAC DATEDIF CLEAN TRIM DOLLAR FIXED TEXT VALUE LOWER UPPER PROPER CHAR CODE REPLACE SUBSTITUTE CONCATENATE LEFT MID RIGHT REPT LEN FIND SEARCH EXACT T ISERROR ISERR ISNA ERROR.TYPE ISNUMBER ISEVEN ISODD N ISBLANK ISLOGICAL ISTEXT ISNONTEXT ISREF TYPE NA REFRESH DAVERAGE DCOUNT DCOUNTA DGET DMAX DMIN DPRODUCT DSTDEV DSTDEVP DSUM DVAR DVARP BESSELI BESSELJ BESSELK BESSELY BIN2DEC BIN2HEX BIN2OCT DEC2BIN DEC2HEX DEC2OCT HEX2BIN HEX2DEC HEX2OCT OCT2BIN OCT2DEC OCT2HEX ERF ERF.PRECISE ERFC ERFC.PRECISE DELTA GESTEP COMPLEX IMABS IMAGINARY IMARGUMENT IMCONJUGATE IMCOS IMDIV IMEXP IMLN IMLOG10 IMLOG2 IMREAL IMSIN IMSQRT IMSUB IMPOWER IMPRODUCT IMSUM RANK.AVG FV FVSCHEDULE NPV PV RECEIVED XNPV CUMIPMT CUMPRINC IPMT ISPMT PMT PPMT COUPDAYBS COUPDAYS COUPDAYSNC COUPNCD COUPNUM COUPPCD DURATION MDURATION NPER YIELD YIELDDISC YIELDMAT AMORDEGRC AMORLINC ODDFYIELD ODDLYIELD ODDLPRICE TBILLEQ TBILLYIELD IRR XIRR RATE VDB ACCRINT ACCRINTM DISC EFFECT INTRATE NOMINAL DB DDB SLN SYD DOLLARDE DOLLARFR PRICE PRICEDISC PRICEMAT ODDFPRICE TBILLPRICE EURO EUROCONVERT RRI ADDRESS INDEX OFFSET ROW COLUMN ROWS COLUMNS TRANSPOSE LOOKUP HLOOKUP VLOOKUP CHOOSE MATCH INDIRECT TREND GROWTH FORECAST AVERAGE STDEV STDEV.S PERCENTILE PERCENTILE.INC MAX MAXA MIN MINA LARGE SMALL AVERAGEA AVERAGEIF AVERAGEIFS MEDIAN MODE MODE.SNGL GEOMEAN HARMEAN TRIMMEAN FREQUENCY RANK RANK.EQ KURT PERCENTRANK PERCENTRANK.INC PERCENTRANK.EXC QUARTILE QUARTILE.INC COUNT COUNTA COUNTBLANK COUNTIF COUNTIFS AVEDEV STDEVA STDEVP STDEV.P STDEVPA VAR VAR.S VARA VARP VAR.P VARPA COVAR COVARIANCE.P DEVSQ CONFIDENCE CONFIDENCE.NORM CONFIDENCE.T INTERCEPT LINEST SLOPE LOGEST STEYX BETADIST BETA.DIST BETAINV BETA.INV BINOMDIST BINOM.DIST NEGBINOMDIST NEGBINOM.DIST CRITBINOM BINOM.INV CHIDIST CHISQ.DIST.RT CHISQ.DIST CHIINV CHISQ.INV.RT CHISQ.INV CHITEST CHISQ.TEST CORREL EXPONDIST EXPON.DIST FDIST F.DIST F.DIST.RT FINV F.INV.RT F.INV FISHER FISHERINV FTEST F.TEST GAMMADIST GAMMA.DIST GAMMAINV GAMMA.INV GAMMALN GAMMALN.PRECISE HYPGEOMDIST HYPGEOM.DIST LOGNORMDIST LOGNORM.DIST LOGINV LOGNORM.INV NORMDIST NORM.DIST NORMINV NORM.INV NORMSDIST NORMSINV NORM.S.INV NORM.S.DIST PEARSON RSQ POISSON POISSON.DIST PROB SKEW STANDARDIZE TDIST T.DIST T.DIST.RT T.DIST.2T TINV T.INV.2T T.INV TTEST T.TEST WEIBULL WEIBULL.DIST ZTEST Z.TEST PERMUT ACOT ACOTH ARABIC BASE COMBINA COT COTH CSC CSCH DECIMAL FLOOR.MATH SEC SECH BINOM.DIST.RANGE GAMMA MAXIFS GAUSS MINIFS PERMUTATIONA PHI SKEW.P BAHTTEXT CONCAT FINDB LEFTB LENB MIDB REPLACEB RIGHTB SEARCHB TEXTJOIN UNICHAR UNICODE BITAND BITLSHIFT BITOR BITRSHIFT BITXOR IMCOSH IMCOT IMCSC IMCSCH IMSEC IMSECH IMSINH IMTAN DAYS ISOWEEKNUM IFNA IFS SWITCH XOR PDURATION RRI ISFORMULA AREAS FORMULATEXT HYPERLINK ENCODEURL CEILING.MATH CONVERT XMATCH XLOOKUP LET OBJECT PROPERTY WEBSERVICE FILTERJSON TIMEAGO SPELLNUMS
window.onload = function () { var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"), { sheetCount: 2 }); initSpread(spread); }; function initSpread(spread) { var spreadNS = GC.Spread.Sheets; var sheet = spread.getActiveSheet(); spread.suspendPaint(); var data = [ ['五年级数学'], ['作业'], ['学生', 1, 2, 3, 4, 5, , '平均分'], ['Anna Mull', 76, 52, 91, 87, 98], ['Anna Sthesia', 95, 95, 94, 98, 95], ['Barb Ackue', 86, 83, 84, 89, 90], ['Barb Dwyer', 59, 40, 60, 20, 66], ['Barry Wine', 75, 55, 64, 76, 89], ['Bob Frapples', 91, 80, 72, 98, 95], ['Brock Lee', 86, 77, 89, 76, 70], ['Buck Kinnear', 100, 95, 94, 92, 91], ['Cliff Hanger', 97, 98, 99, 81, 89], ['Cory Ander', 53, 69, 93, 60, 95], [''], ['平均分:'], ['最高分:'], ['最低分:'], ['中位数分数:'], ]; var formulas_r = [ ['=AVERAGE(C4:G4)'], ['=AVERAGE(C5:G5)'], ['=AVERAGE(C6:G6)'], ['=AVERAGE(C7:G7)'], ['=AVERAGE(C8:G8)'], ['=AVERAGE(C9:G9)'], ['=AVERAGE(C10:G10)'], ['=AVERAGE(C11:G11)'], ['=AVERAGE(C12:G12)'], ['=AVERAGE(C13:G13)'] ]; var formulas_b = [ ['=AVERAGE(C4:C13)', '=AVERAGE(D4:D13)', '=AVERAGE(E4:E13)', '=AVERAGE(F4:F13)', '=AVERAGE(G4:G13)'], ['=MAX(C4:C13)', '=MAX(D4:D13)', '=MAX(E4:E13)', '=MAX(F4:F13)', '=MAX(G4:G13)'], ['=MIN(C4:C13)', '=MIN(D4:D13)', '=MIN(E4:E13)', '=MIN(F4:F13)', '=MIN(G4:G13)'], ['=MEDIAN(C4:C13)', '=MEDIAN(D4:D13)', '=MEDIAN(E4:E13)', '=MEDIAN(F4:F13)', '=MEDIAN(G4:G13)'], ]; sheet.setArray(0, 1, data); sheet.setArray(3, 8, formulas_r, true); sheet.setArray(14, 2, formulas_b, true); sheet.setRowHeight(0, 40); sheet.getCell(0, 1).font('Bold 19px Arial').vAlign(spreadNS.VerticalAlign.center); sheet.addSpan(1, 1, 1, 8); sheet.getCell(1, 1).font('Bold 13px Arial') .hAlign(spreadNS.HorizontalAlign.center) .backColor('rgb(130, 188, 0)') .foreColor('white') .vAlign(spreadNS.VerticalAlign.center); sheet.getRange(2, 1, 1, 8).font('Bold 13px Arial') .backColor('rgb(244, 248, 235)') .vAlign(spreadNS.VerticalAlign.center) .borderBottom(new spreadNS.LineBorder('black', spreadNS.LineStyle.thin)); sheet.getCell(2, 8).hAlign(spreadNS.HorizontalAlign.right); sheet.getRange(3, 1, 10, 8).font('12px Arial'); sheet.getRange(14, 1, 4, 8).backColor('rgb(230,230,230)'); sheet.getRange(14, 1, 4, 1).font('Bold 12px Arial').hAlign(spreadNS.HorizontalAlign.right); [110, 70, 70, 70, 70, 70, 10, 80].forEach(function (val, index) { sheet.setColumnWidth(index + 1, val); }); sheet.conditionalFormats.add3ScaleRule( spreadNS.ConditionalFormatting.ScaleValueType.lowestValue, null, 'rgb(231,114,111)', spreadNS.ConditionalFormatting.ScaleValueType.percentile, 50, 'rgb(252,252,255)', spreadNS.ConditionalFormatting.ScaleValueType.highestValue, null, 'rgb(122,188,129)', [new GC.Spread.Sheets.Range(3, 8, 10, 1)]); spread.resumePaint(); initExcel2010(spread); }; function initExcel2010(spread) { var spreadNS = GC.Spread.Sheets; var sheet = spread.getSheet(1); sheet.name("Excel 2010 函数"); sheet.setColumnWidth(0, 200); sheet.setColumnWidth(1, 400); sheet.setColumnWidth(2, 80); sheet.getRange(-1, 0, -1, 1).wordWrap(true); sheet.getRange(-1, 1, -1, 1).wordWrap(true); let data = [ ["公式", "描述", "结果"], ["=BETA.DIST(2,8,10,TRUE,1,3)", "累积贝塔概率密度函数"], ["=BETA.DIST(2,8,10,FALSE,1,3)", "贝塔概率密度函数"], ["=CEILING.PRECISE(4.3)", "将 4.3 向上舍入到最接近的 1 的倍数。"], ["=CEILING.PRECISE(-4.3)", "将 -4.3 向上舍入到最接近的 1 的倍数。由于数字为负,因此向 0 舍入。"], ["=CEILING.PRECISE(4.3, 2)", "将 4.3 向上舍入到最接近的 2 的倍数。"], ["=CHISQ.DIST(0.5,1,TRUE)", "0.5 的卡方分布,返回为累积分布函数,使用 1 个自由度。"], ["=CHISQ.DIST(2,3,FALSE)", "2 的卡方分布,返回为概率密度函数,使用 3 个自由度。"], ["=CHISQ.INV(0.93,1)", "0.93 的卡方分布左尾概率的反函数,使用 1 个自由度。"], ["=CHISQ.INV(0.6,2)", "0.6 的卡方分布左尾概率的反函数,使用 2 个自由度。"], ["=CONFIDENCE.T(0.05,1,50)", "基于样本大小为 50、显著性水平为 5% 且标准差为 1 的总体均值的置信区间。这基于学生 t 分布。"], ["=COVARIANCE.S({2,4,8},{5,8,11})", "以数组形式输入到函数中的数据点的样本协方差。"], ["=ERF.PRECISE(0.74500)", "误差函数在 0 和 0.74500 之间的积分 (0.707929)"], ["=ERFC.PRECISE(0.74500)", "0.74500 的互补误差函数。"], ["=F.DIST(15.2069,6,4,TRUE)", "使用累积分布函数的 F 概率(累积参数为 TRUE)。"], ["=F.DIST(15.2069,6,4,FALSE)", "使用概率密度函数的 F 概率(累积参数为 FALSE)。"], ["=F.INV(0.01,6,4)", "F 概率分布的反函数。"], ["=FLOOR.PRECISE(-3.2)", "将 -3.2 向下舍入到最接近的 -1 的倍数"], ["=FLOOR.PRECISE(3.2)", "将 3.2 向下舍入到最接近的 1 的倍数"], ["=FLOOR.PRECISE(3.2, 2)", "将 3.2 向下舍入到最接近的 2 的倍数"], ["=GAMMALN.PRECISE(4)", "4 处的伽马函数的自然对数"], ["=HYPGEOM.DIST(1,4,8,20,TRUE)", "累积超几何分布函数。"], ["=HYPGEOM.DIST(1,4,8,20,FALSE)", "概率超几何分布函数。"], ["=ISO.CEILING(4.3)", "将 4.3 向上舍入到最接近的 1 的倍数"], ["=ISO.CEILING(-4.3)", "将 -4.3 向上舍入到最接近的 1 的倍数"], ["=ISO.CEILING(4.3, 2)", "将 4.3 向上舍入到最接近的 2 的倍数"], ["=LOGNORM.DIST(4,3.5,1.2,TRUE)", "4 处的累积对数正态分布。"], ["=LOGNORM.DIST(4,3.5,1.2,FALSE)", "4 处的概率对数正态分布。"], ["=NEGBINOM.DIST(10,5,0.25,TRUE)", "累积负二项分布。"], ["=NEGBINOM.DIST(10,5,0.25,FALSE)", "概率负二项分布。"], ["=NETWORKDAYS.INTL(DATE(2006,1,1),DATE(2006,1,31))", "结果为 22 个未来工作日。从两个日期之间的 31 天总数中减去 9 个非工作日(5 个星期六和 4 个星期日)。默认情况下,星期六和星期日被视为非工作日。"], ["=NETWORKDAYS.INTL(DATE(2006,2,28),DATE(2006,1,31))", "结果为 -21,即过去的 21 个工作日。"], ["=NETWORKDAYS.INTL(DATE(2006,1,1),DATE(2006,2,1),7,{\"2006/1/2\",\"2006/1/16\"})", "通过从 2006 年 1 月 1 日到 2006 年 2 月 1 日的 32 天中减去 10 个非工作日(4 个星期五、4 个星期六、2 个节假日),结果为 22 个未来工作日。使用参数 7 表示周末,即星期五和星期六。此时间段内还有两个节假日。"], ["=NETWORKDAYS.INTL(DATE(2006,1,1),DATE(2006,2,1),\"0010001\",{\"2006/1/2\",\"2006/1/16\"})", "结果为 20 个未来工作日。与上面的时间段相同,但星期日和星期三为周末。"], ["=NORM.S.DIST(1.333333,TRUE)", "1.333333 处的正态累积分布函数。"], ["=NORM.S.DIST(1.333333,FALSE)", "1.333333 处的正态概率分布函数。"], ["=PERCENTRANK.EXC({1,2,3,4,6,6,7,8,9}, 7)", "返回数组中值 7 的排名。"], ["=PERCENTRANK.EXC({1,2,3,4,6,6,7,8,9}, 5.43)", "返回数组中值 5.43 的排名。"], ["=PERCENTRANK.EXC({1,2,3,4,6,6,7,8,9}, 5.43, 1)", "返回数组中值 5.43 的排名,结果中仅显示 1 位有效数字(默认值为 3)。"], ["=PERCENTILE.EXC({1,2,3,4,5,6}, 0.25)", "当指定百分位数的值位于数组中的两个值之间时进行插值。"], ["=QUARTILE.EXC({1,2,3,4,5,6,7,8,9,10,11},1)", "定位第一个四分位数的位置 (3)。"], ["=QUARTILE.EXC({1,2,3,4,5,6,7,8,9,10,11},3)", "定位第三个四分位数的位置 (9)。"], ["=RANK.AVG(95, {89, 88, 92, 101, 94, 97, 95})", "查找数组中值 95 的排名(位置)(降序)。在这种情况下,95 在降序中排名第 3。"], ["=RANK.AVG(95, {89, 88, 92, 101, 94, 97, 95}, 1)", "查找数组中值 95 的排名(位置)(升序)。在这种情况下,95 在升序中排名第 5。"], ["=T.DIST(60,1,TRUE)", "60 的学生左尾 t 分布,返回为累积分布函数,使用 1 个自由度。"], ["=T.DIST(8,3,FALSE)", "8 的学生左尾 t 分布,返回为概率密度函数,使用 3 个自由度。"], ["=T.INV(0.05464,60)", "基于指定参数的学生 t 分布的 t 值。"], ["=WORKDAY.INTL(DATE(2012,1,1),30,0)", "周末参数使用 0 会导致 #NUM! 错误。"], ["=WORKDAY.INTL(DATE(2012,1,1),90,11)", "从 2012 年 1 月 1 日起找到 90 个工作日后的日期,仅将星期日视为周末(周末参数为 11)。"], ["=TEXT(WORKDAY.INTL(DATE(2012,1,1),30,17), \"m/dd/yyyy\")", "使用 TEXT 函数将结果序列号 (40944) 格式化为 \"m/dd/yyyy\" 格式。从 2012 年 1 月 1 日起找到 30 个工作日后的日期,仅将星期六视为周末(周末参数为 17)。"] ]; sheet.setArray(0, 0, data, false); var r, len, i; for (r = 1, len = data.length; r < len; r++) { sheet.setFormula(r, 2, data[r][0]); } var arrayFormulaData = [ ["=MODE.MULT({1,2,3,4,3,2,1,2,1,3})", "该公式必须作为数组公式输入。它返回 1、2 和 3 作为众数,因为它们各出现 3 次。如果该公式不作为数组公式输入,则单个结果为 1。", 3] ]; for (i = 0, len = arrayFormulaData.length; i < len; i++) { var cur = arrayFormulaData[i], rows = cur[2], cols = cur[3] || 1; sheet.addSpan(r, 0, rows, 1); sheet.setValue(r, 0, cur[0]); sheet.addSpan(r, 1, rows, 1); sheet.setValue(r, 1, cur[1]); sheet.setArrayFormula(r, 2, rows, cols, cur[0]); r += rows; } for (i = 1; i < r; i++) { sheet.autoFitRow(i); } sheet.getRange(-1, 2, -1, 1).formatter(".######"); sheet.setFormatter(48, 2, "M/d/yyyy"); var table = sheet.tables.add("FunctionTable", 0, 0, 50, 3, spreadNS.Tables.TableThemes.medium9); table.rowFilter().filterButtonVisible(false); // Array formula with merge cells, set style like above table rows var rowStyle = sheet.getActualStyle(48, 0); sheet.getRange(50, 0, 3, 3).backColor(rowStyle.backColor); sheet.getRange(49, 0, 4, 3).setBorder(rowStyle.borderBottom, { all: true }); }
<!doctype html> <html style="height:100%;font-size:14px;"> <head> <meta name="spreadjs culture" content="zh-cn" /> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <link rel="stylesheet" type="text/css" href="$DEMOROOT$/zh/purejs/node_modules/@grapecity-software/spread-sheets/styles/gc.spread.sheets.excel2013white.css"> <script src="$DEMOROOT$/zh/purejs/node_modules/@grapecity-software/spread-sheets/dist/gc.spread.sheets.all.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/zh/purejs/node_modules/@grapecity-software/spread-sheets-resources-zh/dist/gc.spread.sheets.resources.zh.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/spread/source/js/license.js" type="text/javascript"></script> <script src="app.js" type="text/javascript"></script> <link rel="stylesheet" type="text/css" href="styles.css"> </head> <body> <div class="sample-tutorial"> <div id="ss" class="sample-spreadsheets"></div> </div> </body> </html>
.sample-tutorial { position: relative; height: 100%; overflow: hidden; } .sample-spreadsheets { width: 100%; height: 100%; overflow: hidden; float: left; border: 1px solid gray; } body { position: absolute; top: 0; bottom: 0; left: 0; right: 0; }