java读取excel里面的数据

利用java读取Excel中的数据!

使用Windows操作系统的朋友对Excel(电子表格)一定不会陌生,但是要使用Java语言来操纵Excel文件并不是一件容易的事。在Web应用日益盛行的今天,通过Web来操作Excel文件的需求越来越强烈,目前较为流行的操作是在JSP或Servlet 中创建一个CSV (comma separated values)文件,并将这个文件以MIME,text/csv类型返回给浏览器,接着浏览器调用Excel并且显示CSV文件。这样只是说可以访问到Excel文件,但是还不能真正的操纵Excel文件,本文将给大家一个惊喜,向大家介绍一个开放源码项目,Java Excel API,使用它大家就可以方便地操纵Excel文件了。

JAVA EXCEL API简介

 

Java Excel是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。使用该API非Windows操作系统也可以通过纯Java应用来处理Excel数据表。因为是使用Java编写的,所以我们在Web应用中可以通过JSP、Servlet来调用API实现对Excel数据表的访问。

Java Excel API 文档 
http://www.andykhan.com/jexcelapi/

1.应用示例:
如何从Excel读取数据:

package  com.etong.allen;

import  java.io. * ;
import  java.util. * ;

import  com.roger.util.StringUtil;

import  jxl.Cell;
import  jxl.Sheet;
import  jxl.Workbook;

/**
 * <p>Title: </p>
 * <pre>Description: Excel数据导入到oracle数据库类.
 * </pre>
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Company: 易通技术有限公司</p>
 * 
@author Allen
 * 
@version 1.0
 
*/

public   class  ExcelImportOracle  {

 
/**
  * 用于返回三维数组的ArrayList.
  
*/

 
private static ArrayList subdata = new ArrayList();
 
 
/**
  * Excel中的表名.
  
*/

 
private static String tablename;
 
 
/**
  * 文件的路径
  
*/

 
private static String filePath;
 
 
/**
  * 该方法为完成读取Excel中的数据并将数据插入到对应的数据库表中的操作(在调用前需要先调用setFilePath(String)这个方法.).
  * 
@author Administrator
  * 
@param data:读取Excel中的数据的数组.    
  * 
@deprecated:将读取Excel中的数据插入到对应的数据库表中.  * 
  
*/

 
public static void ExcelDataImportOracle(String filePath) throws Exception {
  
try {
   ArrayList al 
= readExcel(filePath);
   InsertData(al);   
  }
 catch (Exception e) {
   e.printStackTrace();
  }

 }


 
/**
  * 读取Excel中的数据.将这些数据放入到一个三维数组中.
  * 
@author Administrator
  * 
@param filePath 文件路径.
  * 
@deprecated:读取Excel中的数据将它放入到ArrayList数组中(此为三维数组).
  
*/

 
public static ArrayList readExcel(String filePath) {
  
try {
   subdata.clear();
//将静态ArrayList数组清空.(如果不清空原数据会不断累加)
   InputStream is = new FileInputStream(filePath);
   Workbook rwb 
= Workbook.getWorkbook(is);
   
// Sheet st = rwb.getSheet(0);//这里有两种方法获取sheet表,1为名字,而为下标,从0开始
   
// Sheet st = rwb.getSheet("Book1");// Excel中第一页的页名称.
   Sheet st[] = rwb.getSheets();// 得到所有Excel中页的列表.
   for (int a = 0; a < st.length; a++{
    ArrayList alList 
= new ArrayList();
    ArrayList tablenames 
= new ArrayList();
    ArrayList tableAndContents 
= new ArrayList();
    tablename 
= st[a].getName().trim();
    
int b = 0;
    
for (int i = 1; i < st[a].getRows(); i++{
     ArrayList al 
= new ArrayList();
     
for (int j = 0; j < st[a].getColumns(); j++{
      Cell c00 
= st[a].getCell(j, i);
      
// 通用的获取cell值的方式,返回字符串
      String strc00 = StringUtil.toISO(c00.getContents().trim());
      
// 获得cell具体类型值的方式得到内容.
      al.add(j, strc00);
     }

     alList.add(b, al);
     b
++;
    }

    tablenames.add(tablename);
    tableAndContents.add(
0, tablenames);
    tableAndContents.add(
1, alList);
    subdata.add(a, tableAndContents);
   }

   rwb.close();
   
// 关闭
   
//System.out.println(subdata);// 输出
  }
 catch (Exception e) {
   e.printStackTrace();
  }

  
finally
  
{
   
//删除上传文件
   File file = new File(filePath);
   
boolean result = false;
   
   
if(file.exists())
   
{
    result 
= file.delete();
   }

   
else
   
{
    System.out.println(
"文件没有找到,无法删除!");
   }

   
   
if(result)
   
{
    System.out.println(
"删除成功!");
   }

   
else
   
{
    System.out.println(
"删除失败!");
   }

  }

  
return subdata;
 }


 
/**
  * 将读取的Excel的三维数组数据进行对应的数据库表插入操作.
  * 
@author Administrator
  * 
@param data:读取Excel中的数据的数组.
  * 
@deprecated:将读取Excel中的数据插入到对应的数据库表中.
  
*/

 
private static void InsertData(ArrayList data) {
  
try {
   String tablename;
   ArrayList Contents 
= new ArrayList();
   
for (int i=0; i<data.size(); i++){
    tablename 
= ((ArrayList)((ArrayList)data.get(i)).get(0)).get(0).toString();
    Contents 
= (ArrayList)((ArrayList)data.get(i)).get(1);
    WfdefineDateOperate.currecorde(tablename,Contents);
   }

  }
 catch (Exception e) {
   e.printStackTrace();
  }

 }


 
/**
  * 得到文件路径;
  * 
@return filePath
  
*/

 
public String getFilePath() {
  
return filePath;
 }

 
/**
  * 设置文件路径的位置;
  * 
@param filePath
  
*/

 
public void setFilePath(String filePath) {
  ExcelImportOracle.filePath 
= filePath;
 }

 
 
/**
  * 将readExcel方法读出来的三维数组数据转换成二维数组数据.
  * 
@param al
  * 
@return 返回二维数组数据.
  
*/

 
public static ArrayList getDisplayData(ArrayList al)
 
{
  ArrayList result 
= new ArrayList();
  
for(int i = 0;i < al.size();i ++)
  
{
   ArrayList tmp 
= (ArrayList)((ArrayList)al.get(i)).get(1);
   
   
for(int j = 0;j < tmp.size();j ++)
   
{
    result.add(tmp.get(j));
   }

  }

  
  
return result;
 }


 
/**
  * 
@param args
  
*/

 
public static void main(String[] args) {  
 }


}

猜你喜欢

转载自suliangyi.iteye.com/blog/1855881