writing string formulas now work

git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@352822 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Avik Sengupta 2002-08-03 18:16:54 +00:00
parent 50609a09c9
commit 3b6f854e14
4 changed files with 50 additions and 3 deletions

View File

@ -210,7 +210,6 @@ public class FormulaParser {
} }
} }
/** Get an Identifier */ /** Get an Identifier */
private String GetName() { private String GetName() {
StringBuffer Token = new StringBuffer(); StringBuffer Token = new StringBuffer();
@ -225,6 +224,20 @@ public class FormulaParser {
return Token.toString(); 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 */ /** Get a Number */
private String GetNum() { private String GetNum() {
@ -355,7 +368,7 @@ public class FormulaParser {
private void StringLiteral() { private void StringLiteral() {
Match('"'); Match('"');
String name= GetName(); String name= GetNameAsIs();
Match('"'); Match('"');
tokens.add(new StringPtg(name)); tokens.add(new StringPtg(name));
} }

View File

@ -114,7 +114,7 @@ public class StringPtg
public String toFormulaString(SheetReferences refs) public String toFormulaString(SheetReferences refs)
{ {
return getValue(); return "\""+getValue()+"\"";
} }
public byte getDefaultOperandClass() { public byte getDefaultOperandClass() {
return Ptg.CLASS_VALUE; return Ptg.CLASS_VALUE;

View File

@ -824,6 +824,40 @@ extends TestCase {
out.close(); out.close();
assertTrue("file exists",file.exists()); 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) { public static void main(String [] args) {
System.out System.out
.println("Testing org.apache.poi.hssf.usermodel.TestFormulas"); .println("Testing org.apache.poi.hssf.usermodel.TestFormulas");