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