From 54113431b5d14643a01cff47dfd9459ecf64dfbc Mon Sep 17 00:00:00 2001 From: Javen O'Neal Date: Mon, 2 Nov 2015 10:47:19 +0000 Subject: [PATCH] bug58348: add test for copying formula with unregistered UDF git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1711939 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/poi/xssf/usermodel/XSSFCell.java | 3 +++ .../apache/poi/xssf/usermodel/TestXSSFCell.java | 15 ++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java index 1de2982dc..68ec6bc6c 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java @@ -121,6 +121,9 @@ public final class XSSFCell implements Cell { /** * Copy cell value, formula, and style, from srcCell per cell copy policy * If srcCell is null, clears the cell value and cell style per cell copy policy + * + * This does not shift references in formulas. Use {@link XSSFRowShifter} to shift references in formulas. + * * @param srcCell * @param policy * @throws IllegalArgumentException if copy cell style and srcCell is from a different workbook diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCell.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCell.java index 09dab7269..8d0d439d0 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCell.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCell.java @@ -529,6 +529,19 @@ public final class TestXSSFCell extends BaseTestXCell { assertEquals(Cell.CELL_TYPE_NUMERIC, destCell.getCellType()); } + @Test + public final void testCopyCellFrom_CellCopyPolicy_formulaWithUnregisteredUDF() { + setUp_testCopyCellFrom_CellCopyPolicy(); + + srcCell.setCellFormula("MYFUNC2(123, $A5, Sheet1!$B7)"); + + // Copy formula verbatim (no shifting). This is okay because copyCellFrom is Internal. + // Users should use higher-level copying functions to row- or column-shift formulas. + final CellCopyPolicy policy = new CellCopyPolicy.Builder().cellFormula(true).build(); + destCell.copyCellFrom(srcCell, policy); + assertEquals("MYFUNC2(123, $A5, Sheet1!$B7)", destCell.getCellFormula()); + } + @Test public final void testCopyCellFrom_CellCopyPolicy_style() { setUp_testCopyCellFrom_CellCopyPolicy(); @@ -637,7 +650,7 @@ public final class TestXSSFCell extends BaseTestXCell { private final void setUp_testCopyCellFrom_CellCopyPolicy() { @SuppressWarnings("resource") final XSSFWorkbook wb = new XSSFWorkbook(); - final XSSFRow row = wb.createSheet().createRow(0); + final XSSFRow row = wb.createSheet("Sheet1").createRow(0); srcCell = row.createCell(0); destCell = row.createCell(1);