From 5bcf3c3d734a0034bc2970838cc80cb9e01ec485 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Sun, 10 Oct 2021 11:21:41 +0000 Subject: [PATCH] [bug-62040] quotient function does not support cell references git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1894103 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/ss/formula/functions/Quotient.java | 6 ++++-- .../ss/formula/functions/TestQuotient.java | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/poi/src/main/java/org/apache/poi/ss/formula/functions/Quotient.java b/poi/src/main/java/org/apache/poi/ss/formula/functions/Quotient.java index 19ae7235ed..7a1ff4a9ba 100644 --- a/poi/src/main/java/org/apache/poi/ss/formula/functions/Quotient.java +++ b/poi/src/main/java/org/apache/poi/ss/formula/functions/Quotient.java @@ -45,14 +45,16 @@ public class Quotient extends Fixed2ArgFunction implements FreeRefFunction { double enumerator; try { - enumerator = OperandResolver.coerceValueToDouble(venumerator); + ValueEval ve = OperandResolver.getSingleValue(venumerator, srcRowIndex, srcColumnIndex); + enumerator = OperandResolver.coerceValueToDouble(ve); } catch (EvaluationException e) { return ErrorEval.VALUE_INVALID; } double denominator; try { - denominator = OperandResolver.coerceValueToDouble(vedenominator); + ValueEval ve = OperandResolver.getSingleValue(vedenominator, srcRowIndex, srcColumnIndex); + denominator = OperandResolver.coerceValueToDouble(ve); } catch (EvaluationException e) { return ErrorEval.VALUE_INVALID; } diff --git a/poi/src/test/java/org/apache/poi/ss/formula/functions/TestQuotient.java b/poi/src/test/java/org/apache/poi/ss/formula/functions/TestQuotient.java index 838beb576a..f742264393 100644 --- a/poi/src/test/java/org/apache/poi/ss/formula/functions/TestQuotient.java +++ b/poi/src/test/java/org/apache/poi/ss/formula/functions/TestQuotient.java @@ -16,14 +16,22 @@ ==================================================================== */ package org.apache.poi.ss.formula.functions; +import static org.apache.poi.ss.util.Utils.addRow; +import static org.apache.poi.ss.util.Utils.assertDouble; import static org.junit.jupiter.api.Assertions.assertEquals; +import org.apache.poi.hssf.usermodel.HSSFCell; +import org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.formula.eval.ErrorEval; import org.apache.poi.ss.formula.eval.NumberEval; import org.apache.poi.ss.formula.eval.StringEval; import org.apache.poi.ss.formula.eval.ValueEval; import org.junit.jupiter.api.Test; +import java.io.IOException; + /** * Tests for {@link Quotient} */ @@ -63,4 +71,15 @@ class TestQuotient { confirmValueError("dividing by zero", "3.14159", "0", ErrorEval.DIV_ZERO); } + + @Test + void testWithCellRefs() throws IOException { + try (HSSFWorkbook wb = new HSSFWorkbook()) { + HSSFSheet sheet = wb.createSheet(); + addRow(sheet, 0, 5, 2); + HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb); + HSSFCell cell = wb.getSheetAt(0).getRow(0).createCell(100); + assertDouble(fe, cell, "QUOTIENT(A1, B1)", 2.0); + } + } } \ No newline at end of file -- 2.39.5