diff --git a/src/java/org/apache/poi/ss/formula/ptg/Area3DPxg.java b/src/java/org/apache/poi/ss/formula/ptg/Area3DPxg.java index b02f3e184..9fce295ac 100644 --- a/src/java/org/apache/poi/ss/formula/ptg/Area3DPxg.java +++ b/src/java/org/apache/poi/ss/formula/ptg/Area3DPxg.java @@ -17,6 +17,7 @@ package org.apache.poi.ss.formula.ptg; +import org.apache.poi.ss.formula.SheetNameFormatter; import org.apache.poi.ss.util.AreaReference; import org.apache.poi.util.LittleEndianOutput; @@ -87,7 +88,7 @@ public final class Area3DPxg extends AreaPtgBase implements Pxg { sb.append(externalWorkbookNumber); sb.append(']'); } - sb.append(sheetName); + SheetNameFormatter.appendFormat(sb, sheetName); sb.append('!'); sb.append(formatReferenceAsString()); return sb.toString(); diff --git a/src/java/org/apache/poi/ss/formula/ptg/Deleted3DPxg.java b/src/java/org/apache/poi/ss/formula/ptg/Deleted3DPxg.java index 147b329b7..c8cdd3ec3 100644 --- a/src/java/org/apache/poi/ss/formula/ptg/Deleted3DPxg.java +++ b/src/java/org/apache/poi/ss/formula/ptg/Deleted3DPxg.java @@ -17,6 +17,7 @@ package org.apache.poi.ss.formula.ptg; +import org.apache.poi.ss.formula.SheetNameFormatter; import org.apache.poi.ss.usermodel.ErrorConstants; import org.apache.poi.util.LittleEndianOutput; @@ -71,7 +72,7 @@ public final class Deleted3DPxg extends OperandPtg implements Pxg { sb.append(']'); } if (sheetName != null) { - sb.append(sheetName); + SheetNameFormatter.appendFormat(sb, sheetName); } sb.append('!'); sb.append(ErrorConstants.getText(ErrorConstants.ERROR_REF)); diff --git a/src/java/org/apache/poi/ss/formula/ptg/NameXPxg.java b/src/java/org/apache/poi/ss/formula/ptg/NameXPxg.java index bac4fbee2..165579032 100644 --- a/src/java/org/apache/poi/ss/formula/ptg/NameXPxg.java +++ b/src/java/org/apache/poi/ss/formula/ptg/NameXPxg.java @@ -17,6 +17,7 @@ package org.apache.poi.ss.formula.ptg; +import org.apache.poi.ss.formula.SheetNameFormatter; import org.apache.poi.util.LittleEndianOutput; /** @@ -79,7 +80,7 @@ public final class NameXPxg extends OperandPtg implements Pxg { sb.append(']'); } if (sheetName != null) { - sb.append(sheetName); + SheetNameFormatter.appendFormat(sb, sheetName); } sb.append('!'); sb.append(nameName); diff --git a/src/java/org/apache/poi/ss/formula/ptg/Ref3DPxg.java b/src/java/org/apache/poi/ss/formula/ptg/Ref3DPxg.java index 9a2dc606f..d851b4474 100644 --- a/src/java/org/apache/poi/ss/formula/ptg/Ref3DPxg.java +++ b/src/java/org/apache/poi/ss/formula/ptg/Ref3DPxg.java @@ -17,6 +17,7 @@ package org.apache.poi.ss.formula.ptg; +import org.apache.poi.ss.formula.SheetNameFormatter; import org.apache.poi.ss.util.CellReference; import org.apache.poi.util.LittleEndianOutput; @@ -86,7 +87,9 @@ public final class Ref3DPxg extends RefPtgBase implements Pxg { sb.append(externalWorkbookNumber); sb.append(']'); } - sb.append(sheetName); + if (sheetName != null) { + SheetNameFormatter.appendFormat(sb, sheetName); + } sb.append('!'); sb.append(formatReferenceAsString()); return sb.toString(); diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFFormulaParser.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFFormulaParser.java index 1da7b27ec..d18705eb2 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFFormulaParser.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFFormulaParser.java @@ -130,6 +130,15 @@ public final class TestXSSFFormulaParser { assertEquals("A1", ((Ref3DPxg)ptgs[0]).format2DRefAsString()); assertEquals("Uses!A1", ((Ref3DPxg)ptgs[0]).toFormulaString()); + // Reference to a single cell in a different sheet, which needs quoting + ptgs = parse(fpb, "'Testing 47100'!A1"); + assertEquals(1, ptgs.length); + assertEquals(Ref3DPxg.class, ptgs[0].getClass()); + assertEquals(-1, ((Ref3DPxg)ptgs[0]).getExternalWorkbookNumber()); + assertEquals("Testing 47100", ((Ref3DPxg)ptgs[0]).getSheetName()); + assertEquals("A1", ((Ref3DPxg)ptgs[0]).format2DRefAsString()); + assertEquals("'Testing 47100'!A1", ((Ref3DPxg)ptgs[0]).toFormulaString()); + // Reference to a sheet scoped named range from another sheet ptgs = parse(fpb, "Defines!NR_To_A1"); assertEquals(1, ptgs.length);