天天看點

利用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中的資料.将這些資料放入到一個三維數組中.

  * @param filePath 檔案路徑.

  * @deprecated:讀取Excel中的資料将它放入到ArrayList數組中(此為三維數組).

 public static ArrayList readExcel(String filePath) ...{

   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);// 輸出

  finally

  ...{

   //删除上傳檔案

   File file = new File(filePath);

   boolean result = false;

   if(file.exists())

   ...{

    result = file.delete();

   else

    System.out.println("檔案沒有找到,無法删除!");

   if(result)

    System.out.println("删除成功!");

    System.out.println("删除失敗!");

  return subdata;

  * 将讀取的Excel的三維數組資料進行對應的資料庫表插入操作.

  * @param data:讀取Excel中的資料的數組.

  * @deprecated:将讀取Excel中的資料插入到對應的資料庫表中.

 private static void InsertData(ArrayList data) ...{

   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);

  * 得到檔案路徑;

  * @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) ...{ 

}

本文來自CSDN部落格,轉載請标明出處:http://blog.csdn.net/apicescn/archive/2006/07/21/951844.aspx

繼續閱讀