package org.apache.poi.ss.formula.functions;
+import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
+import org.apache.poi.ss.usermodel.CellValue;
+import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.FormulaEvaluator;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.XSSFTestDataSamples;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.junit.Test;
-import junit.framework.TestCase;
+import java.io.IOException;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
/**
* Test the VLOOKUP function
*/
-public class TestVlookup extends TestCase {
+public class TestVlookup {
+
+ @Test
+ public void testFullColumnAreaRef61841() throws IOException {
+ try (Workbook wb = XSSFTestDataSamples.openSampleWorkbook("VLookupFullColumn.xlsx")) {
+ FormulaEvaluator feval = wb.getCreationHelper().createFormulaEvaluator();
+ feval.evaluateAll();
+ assertEquals("Wrong lookup value", "Value1",
+ feval.evaluate(wb.getSheetAt(0).getRow(3).getCell(1)).getStringValue());
+ assertEquals("Lookup should return #N/A",
+ CellType.ERROR, feval.evaluate(wb.getSheetAt(0).getRow(4).getCell(1)).getCellType());
+ }
+ }
+
+ @Test
+ public void bug62275_true() throws IOException {
+ try (Workbook wb = new XSSFWorkbook()) {
+ Sheet sheet = wb.createSheet();
+ Row row = sheet.createRow(0);
+
+ Cell cell = row.createCell(0);
+ cell.setCellFormula("vlookup(A2,B1:B5,2,true)");
+
+ CreationHelper createHelper = wb.getCreationHelper();
+ FormulaEvaluator eval = createHelper.createFormulaEvaluator();
+ CellValue value = eval.evaluate(cell);
+
+ assertFalse(value.getBooleanValue());
+ }
+ }
+
+ @Test
+ public void bug62275_false() throws IOException {
+ try (Workbook wb = new XSSFWorkbook()) {
+ Sheet sheet = wb.createSheet();
+ Row row = sheet.createRow(0);
+
+ Cell cell = row.createCell(0);
+ cell.setCellFormula("vlookup(A2,B1:B5,2,false)");
+
+ CreationHelper crateHelper = wb.getCreationHelper();
+ FormulaEvaluator eval = crateHelper.createFormulaEvaluator();
+ CellValue value = eval.evaluate(cell);
+
+ assertFalse(value.getBooleanValue());
+ }
+ }
@Test
- public void testFullColumnAreaRef61841() {
- final Workbook wb = XSSFTestDataSamples.openSampleWorkbook("VLookupFullColumn.xlsx");
- FormulaEvaluator feval = wb.getCreationHelper().createFormulaEvaluator();
- feval.evaluateAll();
- assertEquals("Wrong lookup value", "Value1", feval.evaluate(wb.getSheetAt(0).getRow(3).getCell(1)).getStringValue());
- assertEquals("Lookup should return #N/A", CellType.ERROR, feval.evaluate(wb.getSheetAt(0).getRow(4).getCell(1)).getCellType());
+ public void bug62275_empty_3args() throws IOException {
+ try (Workbook wb = new XSSFWorkbook()) {
+ Sheet sheet = wb.createSheet();
+ Row row = sheet.createRow(0);
+
+ Cell cell = row.createCell(0);
+ cell.setCellFormula("vlookup(A2,B1:B5,2,)");
+
+ CreationHelper crateHelper = wb.getCreationHelper();
+ FormulaEvaluator eval = crateHelper.createFormulaEvaluator();
+ CellValue value = eval.evaluate(cell);
+
+ assertFalse(value.getBooleanValue());
+ }
}
+ @Test
+ public void bug62275_empty_2args() throws IOException {
+ try (Workbook wb = new XSSFWorkbook()) {
+ Sheet sheet = wb.createSheet();
+ Row row = sheet.createRow(0);
+
+ Cell cell = row.createCell(0);
+ cell.setCellFormula("vlookup(A2,B1:B5,,)");
+
+ CreationHelper crateHelper = wb.getCreationHelper();
+ FormulaEvaluator eval = crateHelper.createFormulaEvaluator();
+ CellValue value = eval.evaluate(cell);
+
+ assertFalse(value.getBooleanValue());
+ }
+ }
+
+ @Test
+ public void bug62275_empty_1arg() throws IOException {
+ try (Workbook wb = new XSSFWorkbook()) {
+ Sheet sheet = wb.createSheet();
+ Row row = sheet.createRow(0);
+
+ Cell cell = row.createCell(0);
+ cell.setCellFormula("vlookup(A2,,,)");
+
+ CreationHelper crateHelper = wb.getCreationHelper();
+ FormulaEvaluator eval = crateHelper.createFormulaEvaluator();
+ CellValue value = eval.evaluate(cell);
+
+ assertFalse(value.getBooleanValue());
+ }
+ }
}
import org.apache.poi.ss.usermodel.BaseTestFormulaEvaluator;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellValue;
-import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.FormulaEvaluator;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
*/
@Test
@Ignore
- public void testCachedReferencesToOtherWorkbooks() throws Exception {
+ public void testCachedReferencesToOtherWorkbooks() {
// TODO
fail("unit test not written yet");
}
verifyAllFormulasInWorkbookCanBeEvaluated("StructuredRefs-lots-with-lookups.xlsx");
}
- // FIXME: use junit4 parameterization
+ // FIXME: use junit4 parametrization
private static void verifyAllFormulasInWorkbookCanBeEvaluated(String sampleWorkbook) throws IOException {
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook(sampleWorkbook);
XSSFFormulaEvaluator.evaluateAllFormulaCells(wb);
// assertEquals("D 67.10", cell.getStringCellValue());
CellValue value = evaluator.evaluate(cell);
- assertEquals("D 67.10", value.getStringValue());
+ assertEquals("D 67.10",
+ value.getStringValue());
- assertEquals("D 0,068", evaluator.evaluate(wb.getSheetAt(0).getRow(1).getCell(1)));
+ assertEquals("D 0,068",
+ evaluator.evaluate(wb.getSheetAt(0).getRow(1).getCell(1)).getStringValue());
}
- /**
- * see bug 62275
- * @throws IOException
- */
- @Test
- public void testBug62275() throws IOException {
- try (Workbook wb = new XSSFWorkbook()) {
- Sheet sheet = wb.createSheet();
- Row row = sheet.createRow(0);
-
- Cell cell = row.createCell(0);
- cell.setCellFormula("vlookup(A2,B1:B5,2,true)");
-
- CreationHelper createHelper = wb.getCreationHelper();
- FormulaEvaluator eval = createHelper.createFormulaEvaluator();
- eval.evaluate(cell);
- }
- }
/**
* see bug 62834, handle when a shared formula range doesn't contain only formula cells
- * @throws IOException
*/
@Test
public void testBug62834() throws IOException {