use of org.apache.poi.ss.formula.functions.FreeRefFunction in project poi by apache.
the class TestFunctionRegistry method testRegisterInRuntime.
public void testRegisterInRuntime() {
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("Sheet1");
HSSFRow row = sheet.createRow(0);
HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb);
HSSFCell cellA = row.createCell(0);
cellA.setCellFormula("FISHER(A5)");
CellValue cv;
try {
cv = fe.evaluate(cellA);
fail("expectecd exception");
} catch (NotImplementedException e) {
}
FunctionEval.registerFunction("FISHER", new Function() {
@Override
public ValueEval evaluate(ValueEval[] args, int srcRowIndex, int srcColumnIndex) {
return ErrorEval.NA;
}
});
cv = fe.evaluate(cellA);
assertEquals(ErrorEval.NA.getErrorCode(), cv.getErrorValue());
HSSFCell cellB = row.createCell(1);
cellB.setCellFormula("CUBEMEMBERPROPERTY(A5)");
try {
cv = fe.evaluate(cellB);
fail("expectecd exception");
} catch (NotImplementedException e) {
}
AnalysisToolPak.registerFunction("CUBEMEMBERPROPERTY", new FreeRefFunction() {
@Override
public ValueEval evaluate(ValueEval[] args, OperationEvaluationContext ec) {
return ErrorEval.NUM_ERROR;
}
});
cv = fe.evaluate(cellB);
assertEquals(ErrorEval.NUM_ERROR.getErrorCode(), cv.getErrorValue());
}
use of org.apache.poi.ss.formula.functions.FreeRefFunction in project poi by apache.
the class AnalysisToolPak method getNotSupportedFunctionNames.
/**
* Returns a collection of ATP function names NOT implemented by POI.
*
* @return an array of not supported functions
* @since 3.8 beta6
*/
public static Collection<String> getNotSupportedFunctionNames() {
AnalysisToolPak inst = (AnalysisToolPak) instance;
Collection<String> lst = new TreeSet<String>();
for (Map.Entry<String, FreeRefFunction> me : inst._functionsByName.entrySet()) {
FreeRefFunction func = me.getValue();
if (func instanceof NotImplemented) {
lst.add(me.getKey());
}
}
return Collections.unmodifiableCollection(lst);
}
use of org.apache.poi.ss.formula.functions.FreeRefFunction in project poi by apache.
the class AnalysisToolPak method r.
private static void r(Map<String, FreeRefFunction> m, String functionName, FreeRefFunction pFunc) {
FreeRefFunction func = pFunc == null ? new NotImplemented(functionName) : pFunc;
m.put(functionName, func);
}
use of org.apache.poi.ss.formula.functions.FreeRefFunction in project poi by apache.
the class AnalysisToolPak method registerFunction.
/**
* Register a ATP function in runtime.
*
* @param name the function name
* @param func the functoin to register
* @throws IllegalArgumentException if the function is unknown or already registered.
* @since 3.8 beta6
*/
public static void registerFunction(String name, FreeRefFunction func) {
AnalysisToolPak inst = (AnalysisToolPak) instance;
if (!isATPFunction(name)) {
FunctionMetadata metaData = FunctionMetadataRegistry.getFunctionByName(name);
if (metaData != null) {
throw new IllegalArgumentException(name + " is a built-in Excel function. " + "Use FunctoinEval.registerFunction(String name, Function func) instead.");
}
throw new IllegalArgumentException(name + " is not a function from the Excel Analysis Toolpack.");
}
FreeRefFunction f = inst.findFunction(name);
if (f != null && !(f instanceof NotImplemented)) {
throw new IllegalArgumentException("POI already implememts " + name + ". You cannot override POI's implementations of Excel functions");
}
// FIXME: inconsistent case-sensitivity
inst._functionsByName.put(name, func);
}
use of org.apache.poi.ss.formula.functions.FreeRefFunction in project poi by apache.
the class TestFunctionRegistry method testExceptions.
public void testExceptions() {
Function func = new Function() {
@Override
public ValueEval evaluate(ValueEval[] args, int srcRowIndex, int srcColumnIndex) {
return ErrorEval.NA;
}
};
try {
FunctionEval.registerFunction("SUM", func);
fail("expectecd exception");
} catch (IllegalArgumentException e) {
assertEquals("POI already implememts SUM" + ". You cannot override POI's implementations of Excel functions", e.getMessage());
}
try {
FunctionEval.registerFunction("SUMXXX", func);
fail("expectecd exception");
} catch (IllegalArgumentException e) {
assertEquals("Unknown function: SUMXXX", e.getMessage());
}
try {
FunctionEval.registerFunction("ISODD", func);
fail("expectecd exception");
} catch (IllegalArgumentException e) {
assertEquals("ISODD is a function from the Excel Analysis Toolpack. " + "Use AnalysisToolpack.registerFunction(String name, FreeRefFunction func) instead.", e.getMessage());
}
FreeRefFunction atpFunc = new FreeRefFunction() {
@Override
public ValueEval evaluate(ValueEval[] args, OperationEvaluationContext ec) {
return ErrorEval.NUM_ERROR;
}
};
try {
AnalysisToolPak.registerFunction("ISODD", atpFunc);
fail("expectecd exception");
} catch (IllegalArgumentException e) {
assertEquals("POI already implememts ISODD" + ". You cannot override POI's implementations of Excel functions", e.getMessage());
}
try {
AnalysisToolPak.registerFunction("ISODDXXX", atpFunc);
fail("expectecd exception");
} catch (IllegalArgumentException e) {
assertEquals("ISODDXXX is not a function from the Excel Analysis Toolpack.", e.getMessage());
}
try {
AnalysisToolPak.registerFunction("SUM", atpFunc);
fail("expectecd exception");
} catch (IllegalArgumentException e) {
assertEquals("SUM is a built-in Excel function. " + "Use FunctoinEval.registerFunction(String name, Function func) instead.", e.getMessage());
}
}
Aggregations