You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@poi.apache.org by Chris Niermeier <cn...@consumercontact.com> on 2007/10/18 18:08:31 UTC

Problem referencing a cell in a different workbook in a CellFormula

Hello,

I am trying to use POI to make several workbooks, where one book is used 
to average and display the values in the other books. The books should 
all be in the same directory once they are filled in.

My first attempt to do this was to set a cell formula of the form 
"[otherBook.xls]Sheet1!$B$16" to try to access the values in the other 
books. This results in a parse exception:

com.sun.rave.web.ui.appbase.ApplicationException: 
#{SelectEmployees.submitButton_action}: 
javax.faces.el.EvaluationException: java.lang.RuntimeException: Cannot 
Parse, sorry : Integer Expected @ 1 [Formula String was: 
'[otherBook.xls]Sheet1!$B$16;']
    at 
com.sun.rave.web.ui.appbase.faces.ViewHandlerImpl.cleanup(ViewHandlerImpl.java:559)
    at 
com.sun.rave.web.ui.appbase.faces.ViewHandlerImpl.renderView(ViewHandlerImpl.java:276)
    at 
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:107)
    at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:245)
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:137)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:214)
    at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
    at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    at com.sun.rave.web.ui.util.UploadFilter.doFilter(UploadFilter.java:198)
    at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
    at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    at 
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)
    at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
    at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
    at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
    at 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
    at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
    at 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
    at 
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
    at 
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
    at 
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
    at 
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
    at 
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
    at java.lang.Thread.run(Thread.java:595)
Caused by: javax.faces.FacesException: 
#{SelectEmployees.submitButton_action}: 
javax.faces.el.EvaluationException: java.lang.RuntimeException: Cannot 
Parse, sorry : Integer Expected @ 1 [Formula String was: 
'[otherBook.xls]Sheet1!$B$16;']
    at 
com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:98)
    at 
com.sun.rave.web.ui.appbase.faces.ActionListenerImpl.processAction(ActionListenerImpl.java:57)
    at javax.faces.component.UICommand.broadcast(UICommand.java:332)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:287)
    at 
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:401)
    at 
com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:95)
    at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:245)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:110)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:213)
    ... 20 more
Caused by: javax.faces.el.EvaluationException: 
java.lang.RuntimeException: Cannot Parse, sorry : Integer Expected @ 1 
[Formula String was: '[otherBook.xls]Sheet1!$B$16;']
    at com.sun.faces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:150)
    at 
com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:92)
    ... 28 more
Caused by: java.lang.RuntimeException: Cannot Parse, sorry : Integer 
Expected @ 1 [Formula String was: '[otherBook.xls]Sheet1!$B$16;']
    at org.apache.poi.hssf.model.FormulaParser.Abort(FormulaParser.java:114)
    at 
org.apache.poi.hssf.model.FormulaParser.Expected(FormulaParser.java:121)
    at 
org.apache.poi.hssf.model.FormulaParser.GetNum(FormulaParser.java:255)
    at 
org.apache.poi.hssf.model.FormulaParser.Factor(FormulaParser.java:512)
    at org.apache.poi.hssf.model.FormulaParser.Term(FormulaParser.java:606)
    at 
org.apache.poi.hssf.model.FormulaParser.Expression(FormulaParser.java:654)
    at org.apache.poi.hssf.model.FormulaParser.parse(FormulaParser.java:758)
    at 
org.apache.poi.hssf.usermodel.HSSFCell.setCellFormula(HSSFCell.java:609)
    at 
mailreviewforms.ApplicationBean1.mailReviewForm(ApplicationBean1.java:215)
    at 
mailreviewforms.SelectEmployees.submitButton_action(SelectEmployees.java:356)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at com.sun.faces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:146)
    ... 29 more

I then tried adding ' to make a formula like 
"'[otherBook.xls]Sheet1'!$B$16". This formula does not throw an 
exception, but when I log cell.getCellFormula(), it returns that the 
fomula is null. When I open up the spreadsheet, the cell shows a value 
of #REF!, and a formula like "=#REF!$B$16".

A tiny snippet of code of how I did this logging, where fileName is the 
name of the file being pointed to, and rowNumber is a number from a foreach:
    HSSFCell cell = row.getCell((short) columnNumber);
    if (cell == null)
        cell = row.createCell((short) columnNumber);
    cell.setCellFormula("'[" + fileName + "]Sheet1'!$B$" + 
rowNumber.toString());
    log.error("Formula got set to " + cell.getCellComment());


I would greatly appreciate any help finding a way to point to a cell 
from another book.

Thanks,
Chris Niermeier

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@poi.apache.org
For additional commands, e-mail: user-help@poi.apache.org