From 0bf845e0cc905769b29a2d1bdaf8c84058782b0d Mon Sep 17 00:00:00 2001 From: Dominik Stadler Date: Sun, 17 Jul 2016 21:18:27 +0000 Subject: [PATCH] 59106: WorkdayFunction does not read the area with holidays correctly to calculate work days git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1753125 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/ss/formula/atp/ArgumentsEvaluator.java | 4 +++- .../apache/poi/xssf/usermodel/TestXSSFBugs.java | 13 +++++++++++++ test-data/spreadsheet/59106.xlsx | Bin 0 -> 10650 bytes 3 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 test-data/spreadsheet/59106.xlsx diff --git a/src/java/org/apache/poi/ss/formula/atp/ArgumentsEvaluator.java b/src/java/org/apache/poi/ss/formula/atp/ArgumentsEvaluator.java index 012333f0b..fa5d50aee 100644 --- a/src/java/org/apache/poi/ss/formula/atp/ArgumentsEvaluator.java +++ b/src/java/org/apache/poi/ss/formula/atp/ArgumentsEvaluator.java @@ -86,7 +86,9 @@ final class ArgumentsEvaluator { AreaEvalBase area = (AreaEvalBase) arg; for (int i = area.getFirstRow(); i <= area.getLastRow(); i++) { for (int j = area.getFirstColumn(); j <= area.getLastColumn(); j++) { - valuesList.add(evaluateDateArg(area.getValue(i, j), i, j)); + // getValue() is replaced with getAbsoluteValue() because loop variables i, j are + // absolute indexes values, but getValue() works with relative indexes values + valuesList.add(evaluateDateArg(area.getAbsoluteValue(i, j), i, j)); } } double[] values = new double[valuesList.size()]; diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java index ee07c4ef0..3280a9121 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java @@ -3078,4 +3078,17 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues { assertEquals(70, sheet.getLastRowNum()); assertEquals(70, sheet.getRow(sheet.getLastRowNum()).getRowNum()); } + + @Test + public void testWorkdayFunction() throws IOException { + XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook("59106.xlsx"); + XSSFSheet sheet = workbook.getSheet("Test"); + Row row = sheet.getRow(1); + Cell cell = row.getCell(0); + DataFormatter form = new DataFormatter(); + FormulaEvaluator evaluator = cell.getSheet().getWorkbook().getCreationHelper().createFormulaEvaluator(); + String result = form.formatCellValue(cell, evaluator); + + assertEquals("09 Mar 2016", result); + } } diff --git a/test-data/spreadsheet/59106.xlsx b/test-data/spreadsheet/59106.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..e47845ad6f0bcc2fff52c02acb9a3fcd9becfef2 GIT binary patch literal 10650 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 U1Y^^W^8z@4Ll_~`8Gk(eAN=(92mk;8 literal 0 HcmV?d00001