大家好  我是一个刚出道的java程序员  水平不是很好 因为今天遇到了一个问题  搜索了很久  实在是找不到答案了 只好壮着胆子在这里注册了个帐号  把问题提上来  希望有过相关经验的前辈们能给一个答复  
问题是这样的  有一个fundvalue-1.xls文件用记事本打开显示如下:  
<?xml  version="1.0"?>  
<Workbook  xmlns="urn:schemas-microsoft-com:office:spreadsheet"  
xmlns:o="urn:schemas-microsoft-com:office:office"  
xmlns:x="urn:schemas-microsoft-com:office:excel"  
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"  
xmlns:html="http://www.w3.org/TR/REC-html40">  
<Worksheet  ss:Name="博时价值(050001)">  
<Table>  
<Row>  
<Cell><Data  ss:Type="String">日期</Data></Cell>  
<Cell><Data  ss:Type="String">单位净值</Data></Cell>  
<Cell><Data  ss:Type="String">累计净值</Data></Cell>  
<Cell><Data  ss:Type="String">日增长率</Data></Cell>  
<Cell><Data  ss:Type="String">日增长值</Data></Cell>  
</Row>  
<Row>  
<Cell><Data  ss:Type="String">2007-03-30</Data></Cell>  
<Cell><Data  ss:Type="Number">1.0500</Data></Cell>  
<Cell><Data  ss:Type="Number">2.7700</Data></Cell>  
<Cell><Data  ss:Type="Number">-0.47</Data></Cell>  
<Cell><Data  ss:Type="Number">-0.0050</Data></Cell>  
</Row>  
</Table>  
</Worksheet>  
<Worksheet  ss:Name="博时精选(050004)">  
<Table>  
<Row>  
<Cell><Data  ss:Type="String">日期</Data></Cell>  
<Cell><Data  ss:Type="String">单位净值</Data></Cell>  
<Cell><Data  ss:Type="String">累计净值</Data></Cell>  
<Cell><Data  ss:Type="String">日增长率</Data></Cell>  
<Cell><Data  ss:Type="String">日增长值</Data></Cell>  
</Row>  
<Row>  
<Cell><Data  ss:Type="String">2007-03-30</Data></Cell>  
<Cell><Data  ss:Type="Number">1.0573</Data></Cell>  
<Cell><Data  ss:Type="Number">2.4473</Data></Cell>  
<Cell><Data  ss:Type="Number">-0.16</Data></Cell>  
<Cell><Data  ss:Type="Number">-0.0017</Data></Cell>  
</Row>  
</Table>  
</Worksheet>  
</Workbook>  
相信大家已经看出来了这是一个xml格式的文件  但它的文件扩展名是.xls也就是Excel文件  如果用Excel打开该文件就只会显示标签里的内容  如果用记事本或EditPlus打开就是上面的样子  现在想要实现的是获取这个文件里的数据  本来我已经通过dom4j读xml的方法得到了该文件里的内容  程序如下:  
import  java.io.File;  
import  java.util.HashMap;  
import  java.util.Iterator;  
import  java.util.List;  
import  org.dom4j.Document;  
import  org.dom4j.Element;  
import  org.dom4j.XPath;  
import  org.dom4j.io.SAXReader;  
 
public  class  ReadXML  {  
           private  File  xmlFile;  
             
           public  void  readFile(String  path){  
                       try{  
                             xmlFile=new  File(path);            
                             SAXReader  reader=new  SAXReader();  
                             Document  xmlDoc=reader.read(xmlFile);      
                             HashMap  xmlMap  =  new  HashMap();    
                             xmlMap.put("ss","urn:schemas-microsoft-com:office:spreadsheet");    
                               
                             XPath  at  =  xmlDoc.createXPath("//ss:Worksheet");  
                             at.setNamespaceURIs(xmlMap);  
                             List  atresult  =  at.selectNodes(xmlDoc);  
                             for(Iterator  atiter=atresult.iterator();atiter.hasNext();){  
                                         Element  atelement=(Element)atiter.next();  
                                         System.out.println(atelement.attribute(0).getValue());  
                             }  
                               
                             XPath  el  =  xmlDoc.createXPath("//ss:Data");  
                             el.setNamespaceURIs(xmlMap);    
                             List  result  =  el.selectNodes(xmlDoc);  
                             for(Iterator  iter=result.iterator();iter.hasNext();){  
                                         Element  element=(Element)iter.next();  
                                         if(!(element.getText().equals("数据提供:基金互动网(http://www.fundxy.com)"))){  
                                                     System.out.println(element.getText());  
                                         }  
                             }  
                       }catch(Exception  e){  
                             System.out.print(e.getMessage());  
                       }  
           }  
             
           public  static  void  main(String[]  args)  {  
                         
                       String  path="c:/fundvalue-1.xls";  
                       ReadXML  OB  =  new  ReadXML();  
                       OB.readFile(path);  
           }  
 
}  
但因为该文件是以.xls结尾的  也就是说可以通过Excel访问  那这样的话我想通过java的扩展类jxl也应该可以访问  所以就查阅相关资料写了个程序试了一下  代码如下:  
import  java.io.File;  
import  java.io.IOException;  
import  jxl.Cell;  
import  jxl.CellType;  
import  jxl.DateCell;  
import  jxl.NumberCell;  
import  jxl.Sheet;  
import  jxl.Workbook;  
import  jxl.read.biff.BiffException;  
 
public  class  JXL  {  
           public  void  readFile(String  path){  
                       Workbook  workbook  =  null;  
                         
                       try  {  
                               workbook  =  Workbook.getWorkbook(new  File(path));  
                       }catch(BiffException  e){        
                               e.printStackTrace();        
                       }catch(IOException  e){        
                                   e.printStackTrace();        
                       }        
                       Sheet[]  sheet  =  workbook.getSheets();        
                       Cell  cell  =  null;  
                       for(int  k=0;k<sheet.length;k++){  
                                   for  (int  i  =  0;  i  <sheet[k].getRows();  i++)  {  
                                           for  (int  j  =  0;  j  <sheet[k].getColumns();  j++)  {  
                                                   cell=sheet[k].getCell(j,  i);  
                                                   if(cell.getType()==CellType.NUMBER){  
                                                           System.out.print(((NumberCell)cell).getValue());  
                                                   }  
                                                   else  if(cell.getType()==CellType.DATE){  
                                                           System.out.print(((DateCell)cell).getDate());  
                                                   }  
                                                   else{  
                                                           System.out.print(cell.getContents());  
                                                   }  
                                                   System.out.print("\t");  
                                           }  
                                           System.out.print("\n");  
                                   }  
                       }  
                       workbook.close();  
           }  
             
           public  static  void  main(String[]  args){  
                       String  path="c:/fundvalue-1.xls";  
                       JXL  OB=new  JXL();  
                       OB.readFile(path);  
           }  
}  
执行的时候workbook  =  Workbook.getWorkbook(new  File(path));这句报错:  jxl.read.biff.BiffException:  Unable  to  recognize  OLE  stream  估计是找不到或无法读取fundvalue-1.xls这个文件  
后来我尝试的换了一个普通的xls文件(不是像上面的那种xml形式的xls文件)发现一切运行正常可以输出结果  所以我猜可能是jxl对上面那种xml形式的xls文件无法读取  不知道我的判断是否正确  难道jxl真的就对上面那种xml形式的xls文件没办法了么?请各位有相关经验的高手指教  在这里先谢谢大家了  ^_^

解决方案 »

  1.   

    我用的也不是很多,我觉得应该不可以,它毕竟不能是像excel那样完美,而且可能是因为你的
    xml有一定的规则,因为office是支持xml的,但是java的第三方类可能就没办法了
      

  2.   

    感谢楼上前辈的回复 我也感觉jxl可能对这种形式的xls文件无能为力 但是还是有点不死心 -_-还有没有高人有这方面的经验啊?真的就一点办法也没有了???......
      

  3.   

    要不你就用java操作xml,按照他的规则给他弄成csv.
      

  4.   

    ........我帖子里已经说过了 其实我已经通过dom4j访问xml的方法取得到了想要的值 只是想试试用jxl能不能取 因为毕竟它的后缀名是xls嘛 我刚做J2EE不久 所以对什么都很感兴趣 都想尝试 感谢楼上前辈的热心 我还以为再也不会有人理这个帖子了呢 HOHO~ ^_^
      

  5.   

    有没有大虾来看看啊 jxl真的没有办法是么?