aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAvik Sengupta <avik@apache.org>2002-08-03 18:16:54 +0000
committerAvik Sengupta <avik@apache.org>2002-08-03 18:16:54 +0000
commit85e1c985ce0fbf62a608813606d164c981c3bcca (patch)
treec82980a326626714b028dae4800efbbc40f04f6f
parent957d18e95b8a4e30f8e39ee39c9a2993f5f2feaa (diff)
downloadpoi-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.java17
-rw-r--r--src/java/org/apache/poi/hssf/record/formula/StringPtg.java2
-rw-r--r--src/testcases/org/apache/poi/hssf/data/StringFormulas.xlsbin0 -> 13824 bytes
-rw-r--r--src/testcases/org/apache/poi/hssf/usermodel/TestFormulas.java34
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
new file mode 100644
index 0000000000..ebf28b0793
--- /dev/null
+++ b/src/testcases/org/apache/poi/hssf/data/StringFormulas.xls
Binary files differ
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");