用poi读取Excel时报错,因为不支持trend函数,各位如何解决?

poi读取excel时 报异常
Exception in thread "main" org.apache.poi.ss.formula.eval.NotImplementedException: Error evaluating cell 模板示例1!B26
原因是poi不支持excel中的部分函数,不知如何解决,各位有何办法?谢谢!

用XLS后缀或用XLSX后缀

不要用其他后缀(如:POI后缀)

如果poj不支持,就只能用jni调用vba接口操作excel了。

我这块是用java的poi读取excel,主要是poi 支持的函数:
[ABS, ACOS, ACOSH, ADDRESS, AND, ASIN, ASINH, ATAN, ATAN2, ATANH, AVEDEV, AVERAGE, CEILING, CHAR, CHOOSE, CLEAN, CODE, COLUMN, COLUMNS, COMBIN, CONCATENATE, COS, COSH, COUNT, COUNTA, COUNTBLANK, COUNTIF, DATE, DAY, DAYS360, DEGREES, DEVSQ, DOLLAR, ERROR.TYPE, EVEN, EXACT, EXP, FACT, FALSE, FIND, FIXED, FLOOR, FV, HLOOKUP, HOUR, HYPERLINK, IF, INDEX, INDIRECT, INT, INTERCEPT, IPMT, IRR, ISBLANK, ISERROR, ISLOGICAL, ISNA, ISNONTEXT, ISNUMBER, ISREF, ISTEXT, LARGE, LEFT, LEN, LN, LOG, LOG10, LOOKUP, LOWER, MATCH, MAX, MAXA, MEDIAN, MID, MIN, MINA, MINUTE, MIRR, MOD, MODE, MONTH, NA, NOT, NOW, NPER, NPV, ODD, OFFSET, OR, PERCENTILE, PI, PMT, POISSON, POWER, PPMT, PRODUCT, PROPER, PV, RADIANS, RAND, RANK, RATE, REPLACE, REPT, RIGHT, ROMAN, ROUND, ROUNDDOWN, ROUNDUP, ROW, ROWS, SEARCH, SECOND, SIGN, SIN, SINH, SLOPE, SMALL, SQRT, STDEV, SUBSTITUTE, SUBTOTAL, SUM, SUMIF, SUMPRODUCT, SUMSQ, SUMX2MY2, SUMX2PY2, SUMXMY2, T, TAN, TANH, TEXT, TIME, TODAY, TRIM, TRUE, TRUNC, UPPER, VALUE, VAR, VARP, VLOOKUP, WEEKDAY, YEAR]

很多其他的它都不支持,比如我这块的TREND,因此不知如何解决,@ caozhy 不过感觉用jni调用vba的话就复杂多了。

自己写个Trend函数吧。

根据X,Y两个数组来计算简单线性回归公式f。

线性回归函数如下:
f(x) = a*x +b

其中a 和 b 是两个常数。

需要根据X和Y来计算a和b的值。

Excel 用的是最小二乘法来计算a 和b。

公式如下:

a = Cov(X,Y) / Var (X)
b= Mean(Y)- a * Mean(X)

Cov 为协方差,
Var 为方差,
Mean 为平均值。

a 和 b 得到后,给定一个x'值,套用公式 a*x' +b 即可。

例子:

X: 1 2 3 4 5 6 7
Y : 10 11 13 16 19 22 28

a = 11.7142857/ 4 = 2.92857143
b = 17 - 2.92857143 * 4 = 5.28571429

x' = 8
f(x') = 2.92857143 * 8 + 5.28571429 = 28.7142857