使用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