diff options
author | Avik Sengupta <avik@apache.org> | 2002-08-03 18:16:54 +0000 |
---|---|---|
committer | Avik Sengupta <avik@apache.org> | 2002-08-03 18:16:54 +0000 |
commit | 85e1c985ce0fbf62a608813606d164c981c3bcca (patch) | |
tree | c82980a326626714b028dae4800efbbc40f04f6f | |
parent | 957d18e95b8a4e30f8e39ee39c9a2993f5f2feaa (diff) | |
download | poi-85e1c985ce0fbf62a608813606d164c981c3bcca.tar.gz poi-85e1c985ce0fbf62a608813606d164c981c3bcca.zip |
writing string formulas now work
git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@352822 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | src/java/org/apache/poi/hssf/model/FormulaParser.java | 17 | ||||
-rw-r--r-- | src/java/org/apache/poi/hssf/record/formula/StringPtg.java | 2 | ||||
-rw-r--r-- | src/testcases/org/apache/poi/hssf/data/StringFormulas.xls | bin | 0 -> 13824 bytes | |||
-rw-r--r-- | src/testcases/org/apache/poi/hssf/usermodel/TestFormulas.java | 34 |
4 files changed, 50 insertions, 3 deletions
diff --git a/src/java/org/apache/poi/hssf/model/FormulaParser.java b/src/java/org/apache/poi/hssf/model/FormulaParser.java index e56a4c61ca..a021803b6c 100644 --- a/src/java/org/apache/poi/hssf/model/FormulaParser.java +++ b/src/java/org/apache/poi/hssf/model/FormulaParser.java @@ -210,7 +210,6 @@ public class FormulaParser { } } - /** Get an Identifier */ private String GetName() { StringBuffer Token = new StringBuffer(); @@ -225,6 +224,20 @@ public class FormulaParser { return Token.toString(); } + /**Get an Identifier AS IS, without stripping white spaces or + converting to uppercase; used for literals */ + private String GetNameAsIs() { + StringBuffer Token = new StringBuffer(); + if (!IsAlpha(Look)) { + Expected("Name"); + } + while (IsAlNum(Look) || IsWhite(Look)) { + Token = Token.append(Look); + GetChar(); + } + return Token.toString(); + } + /** Get a Number */ private String GetNum() { @@ -355,7 +368,7 @@ public class FormulaParser { private void StringLiteral() { Match('"'); - String name= GetName(); + String name= GetNameAsIs(); Match('"'); tokens.add(new StringPtg(name)); } diff --git a/src/java/org/apache/poi/hssf/record/formula/StringPtg.java b/src/java/org/apache/poi/hssf/record/formula/StringPtg.java index 30833c605a..2a5e5b764a 100644 --- a/src/java/org/apache/poi/hssf/record/formula/StringPtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/StringPtg.java @@ -114,7 +114,7 @@ public class StringPtg public String toFormulaString(SheetReferences refs) { - return getValue(); + return "\""+getValue()+"\""; } public byte getDefaultOperandClass() { return Ptg.CLASS_VALUE; diff --git a/src/testcases/org/apache/poi/hssf/data/StringFormulas.xls b/src/testcases/org/apache/poi/hssf/data/StringFormulas.xls Binary files differnew file mode 100644 index 0000000000..ebf28b0793 --- /dev/null +++ b/src/testcases/org/apache/poi/hssf/data/StringFormulas.xls diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestFormulas.java b/src/testcases/org/apache/poi/hssf/usermodel/TestFormulas.java index 447191b305..6ca51ddb5f 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestFormulas.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestFormulas.java @@ -824,6 +824,40 @@ extends TestCase { out.close(); assertTrue("file exists",file.exists()); } + + public void testStringFormulas() + throws java.io.IOException + { + String readFilename = System.getProperty("HSSF.testdata.path"); + + File file = File.createTempFile("testStringFormula",".xls"); + FileOutputStream out = new FileOutputStream(file); + HSSFWorkbook wb = new HSSFWorkbook(); + HSSFSheet s = wb.createSheet("A"); + HSSFRow r = null; + HSSFCell c = null; + r = s.createRow((short)0); + c=r.createCell((short)1); c.setCellFormula("UPPER(\"abc\")"); + c=r.createCell((short)2); c.setCellFormula("LOWER(\"ABC\")"); + c=r.createCell((short)3); c.setCellFormula("CONCATENATE(\" my \",\" name \")"); + + wb.write(out); + out.close(); + + assertTrue("file exists",file.exists()); + + FileInputStream in = new FileInputStream(readFilename+File.separator+"StringFormulas.xls"); + wb = new HSSFWorkbook(in); + s = wb.getSheetAt(0); + r = s.getRow(0); + c = r.getCell((short)0); + assertTrue("expected: UPPER(\"xyz\") got "+c.getCellFormula(), ("UPPER(\"xyz\")").equals(c.getCellFormula())); + //c = r.getCell((short)1); + //assertTrue("expected: A!A1+A!B1 got: "+c.getCellFormula(), ("A!A1+A!B1").equals(c.getCellFormula())); + in.close(); + } + + public static void main(String [] args) { System.out .println("Testing org.apache.poi.hssf.usermodel.TestFormulas"); |