jxl 读取Excel的公式

jxl自带的包里有个公式的demo的,你试试看  
  --------------------------------------  
  /*********************************************************************  
  *  
  *             Copyright   (C)   2002   Andrew   Khan  
  *  
  *   This   library   is   free   software;   you   can   redistribute   it   and/or  
  *   modify   it   under   the   terms   of   the   GNU   Lesser   General   Public  
  *   License   as   published   by   the   Free   Software   Foundation;   either  
  *   version   2.1   of   the   License,   or   (at   your   option)   any   later   version.  
  *  
  *   This   library   is   distributed   in   the   hope   that   it   will   be   useful,  
  *   but   WITHOUT   ANY   WARRANTY;   without   even   the   implied   warranty   of  
  *   MERCHANTABILITY   or   FITNESS   FOR   A   PARTICULAR   PURPOSE.     See   the   GNU  
  *   Lesser   General   Public   License   for   more   details.  
  *  
  *   You   should   have   received   a   copy   of   the   GNU   Lesser   General   Public  
  *   License   along   with   this   library;   if   not,   write   to   the   Free   Software  
  *   Foundation,   Inc.,   59   Temple   Place,   Suite   330,   Boston,   MA   02111-1307   USA  
  ***************************************************************************/  
   
  package   jxl.demo;  
   
  import   java.io.File;  
  import   java.io.OutputStream;  
  import   java.io.OutputStreamWriter;  
  import   java.io.BufferedWriter;  
  import   java.io.IOException;  
  import   java.io.UnsupportedEncodingException;  
   
  import   java.util.ArrayList;  
  import   java.util.Iterator;  
   
  import   jxl.Workbook;  
  import   jxl.Sheet;  
  import   jxl.Cell;  
  import   jxl.CellType;  
  import   jxl.FormulaCell;  
  import   jxl.biff.CellReferenceHelper;  
  import   jxl.biff.formula.FormulaParser;  
  import   jxl.biff.formula.ExternalSheet;  
  import   jxl.biff.formula.FormulaException;  
   
  /**  
    *   Goes   through   each   cell   in   the   workbook,   and   if   the   contents   of   that  
    *   cell   is   a   formula,   it   prints   out   the   last   calculated   value   and  
    *   the   formula   string  
    */  
  public   class   Formulas  
  {  
      /**  
        *   Constructor  
        *  
        *   @param   w   The   workbook   to   interrogate  
        *   @param   out   The   output   stream   to   which   the   CSV   values   are   written  
        *   @param   encoding   The   encoding   used   by   the   output   stream.     Null   or    
        *   unrecognized   values   cause   the   encoding   to   default   to   UTF8  
        *   @exception   java.io.IOException  
        */  
      public   Formulas(Workbook   w,   OutputStream   out,   String   encoding)  
          throws   IOException  
      {  
          if   (encoding   ==   null   ||   !encoding.equals("UnicodeBig"))  
          {  
              encoding   =   "UTF8";  
          }  
   
          try  
          {  
              OutputStreamWriter   osw   =   new   OutputStreamWriter(out,   encoding);  
              BufferedWriter   bw   =   new   BufferedWriter(osw);  
   
              ArrayList   parseErrors   =   new   ArrayList();  
               
              for   (int   sheet   =   0;   sheet   <   w.getNumberOfSheets();   sheet++)  
              {  
                  Sheet   s   =   w.getSheet(sheet);  
   
                  bw.write(s.getName());  
                  bw.newLine();  
               
                  Cell[]   row   =   null;  
                  Cell   c   =   null;  
               
                  for   (int   i   =   0   ;   i   <   s.getRows()   ;   i++)  
                  {  
                      row   =   s.getRow(i);  
   
                      for   (int   j   =   0;   j   <   row.length;   j++)  
                      {  
                          c   =   row[j];  
                          if   (c.getType()   ==   CellType.NUMBER_FORMULA   ||    
                                  c.getType()   ==   CellType.STRING_FORMULA   ||    
                                  c.getType()   ==   CellType.BOOLEAN_FORMULA   ||  
                                  c.getType()   ==   CellType.DATE_FORMULA   ||  
                                  c.getType()   ==   CellType.FORMULA_ERROR)  
                          {  
                              FormulaCell   nfc   =   (FormulaCell)   c;  
                              StringBuffer   sb   =   new   StringBuffer();  
                              CellReferenceHelper.getCellReference  
                                    (c.getColumn(),   c.getRow(),   sb);  
   
                              try  
                              {  
                                  bw.write("Formula   in   "     +   sb.toString()   +    
                                                    "   value:     "   +   c.getContents());  
                                  bw.flush();  
                                  bw.write("   formula:   "   +   nfc.getFormula());  
                                  bw.flush();  
                                  bw.newLine();  
                              }  
                              catch   (FormulaException   e)  
                              {  
                                  bw.newLine();  
                                  parseErrors.add(sb.toString()   +   ":   "   +   e.getMessage());  
                              }  
                          }  
                      }  
                  }  
              }  
              bw.flush();  
              bw.close();  
   
              if   (parseErrors.size()   >   0)  
              {  
                  System.err.println();  
                  System.err.println("There   were   "   +   parseErrors.size()   +   "   errors");  
   
                  Iterator   i   =   parseErrors.iterator();  
                  while   (i.hasNext())  
                  {  
                      System.err.println(i.next());  
                  }  
              }  
          }  
          catch   (UnsupportedEncodingException   e)  
          {  
              System.err.println(e.toString());  
          }  
      }  
   
  }  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值