POI讀取excel
使用POI處理Excel文檔
JAVA DOC :
http://jakarta.apache.org/poi/apidocs/index.html
POI是一個優秀的Java開源項目, 專用於解析和產生與Microsoft OLE 2相關的檔案類型, 如Word, Excel等.
POI包總說:
org.apache.poi.hssf.eventmodel 處理在讀取和寫入Excel文檔中產生的各種動作.
org.apache.poi.hssf.eventusermodel 提供讀取Excel文檔的各個類.
org.apache.poi.hssf.record.formula 包含公式處理類, 這些類使用在Excel文檔中.
org.apache.poi.hssf.usermodel 包含產生Excel文檔的各個類.
org.apache.poi.hssf.util 提供處理Excel文檔各個屬性的工具類.
輸出Excel文檔
首先, 建立一個 HSSFWorkbook 對象.
從 HSSFWorkbook 對象擷取一個 HSSFSheet 對象, 請注意, 這是你從 Workbook 對象擷取 Worksheet 對象的唯一方法.
對於 Worksheet 對象沒有公用的構造方法, 這很自然是因為Excel模型中, Worksheet 也不能獨立於 Workbook 而存在.
類似的, 你可以從 Worksheet 對象中擷取 HSSFRow 對象, 從 HSSFRow 對象中擷取 HSSFCell 對象--每種類型依賴於它
的父類型而存在.
為了建立表頭, 使用 Region 對象建立行和列的合并地區. 注意, 行和列的都是以 0 基數的.
使用 HSSFCell 對象的 setCellValue 方法為儲存格設定資料, 儲存格支援所有 Java 本地的對象如 String, int 等. API 也支援
其他通常使用的資料類型.
HSSF 中的 HSSFStyle 類處理所有與儲存格顯示相關的屬性, 如顏色, 字型, 高度, 寬度等.你可以為特定的儲存格對象建立相對
的屬性.對於複雜的屬性如字型, 顏色等 HSSF 也提供了 HSSFFont 和 HSSFColor 對象.
儲存格支援公式.
最後, 為了在檔案系統上物理的建立一個Excel文檔, 你需要從 HSSFWorkbook 對象調用 write 方法, 並將 OutputStream 對象傳入.
輸入Excel文檔
HSSF 提供一個特別的 POIFSFileSystem 對象特定的讀取 Microsoft OLE 2 對象. 使用 POIFSFileSystem 對象, 你從一個特定的
Excel 文檔中構造 HSSFWorkbook 對象.
Web應用程式中使用 Java 訪問 Excel 對象
使用 MIME 類型字串 "application/vnd.ms-excel"
在 Response 的頭中, Content-disposition 條目怎樣將內容分發到瀏覽器, inline 屬性工作表明瀏覽器應當在開啟這個文檔前提示
"開啟/儲存/取消" 對話方塊.
怎樣使用 poi包
http://jakarta.apache.org/builds/jakarta-poi/
裡面有3個目錄,下realese->bin->poi-2.5.1-final-20040804.jar
檔案解開後,把poi-2.5.1-final-20040804.jar放到
jsk/lib/jre/lib/ext中
一切OK!!注意:原來壓縮包中有三個檔案包,看好你要使用哪類包
有兩個問題:
1 在web應用中,怎麼配置POI
2 有讀取excel檔案的例子嗎,在jsp中
---------------------------------------------------------------
將poi的.jar檔案放在你的應用的WEB-INF/lib目錄下就可以在本應用中用了.
---------------------------------------------------------------
1 把poi的包放到web-inf的lib目錄下就行了
2
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFCell;
import java.io.FileInputStream;
public class ReadXL {
/** Excel檔案的存放位置。注意是正斜線*/
public static String fileToBeRead="D:/JTest/ gongye.xls";
public static void main(String argv[]){
try{
// 建立對Excel活頁簿檔案的引用
HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(fileToBeRead));
// 建立對工作表的引用。
// 本例是按名引用(讓我們假定那張表有著預設名"Sheet1")
HSSFSheet sheet = workbook.getSheet("Sheet1");
// 也可用getSheetAt(int index)按索引引用,
// 在Excel文檔中,第一張工作表的預設索引是0,
// 其語句為:HSSFSheet sheet = workbook.getSheetAt(0);
// 讀取左上端單元
HSSFRow row = sheet.getRow(0);
HSSFCell cell = row.getCell((short)0);
// 輸出單元內容,cell.getStringCellValue()就是取所在單元的值
System.out.println("左上端單元是: " + cell.getStringCellValue());
}catch(Exception e) {
System.out.println("已運行xlRead() : " + e );
}
}
}
==========================================================================================================================
如何使用Java POI產生Excel表檔案 !
發行者:[本站編輯] 來源:[] 瀏覽:[] 評論:[] 字型:大 中小
// 使用Java POI
// 把要兩個JAR檔案放到lib/ext下
// code run against the jakarta-poi-1.5.0-FINAL-20020506.jar.
// and commons-logging-1.0.jar
例子程式:
import org.apache.poi.hssf.usermodel.*;
import java.io.FileOutputStream;
// code run against the jakarta-poi-1.5.0-FINAL-20020506.jar.
// and commons-logging-1.0.jar
public class PoiTest {
static public void main(String[] args) throws Exception {
FileOutputStream fos = new FileOutputStream(d:////foo.xls);
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet s = wb.createSheet();
wb.setSheetName(0, Matrix);
for(short i=0; i<50; i++) {
HSSFRow row = s.createRow(i);
for(short j=0; j<50; j++) {
HSSFCell cell = row.createCell(j);
cell.setCellValue(+i+,+j);
}
}
wb.write(fos);
fos.close();
}
}
應用執行個體:
dao.hibernate中實現
/**
* 匯入Excel表
*/
public List excelToDb(InputStream fl) {
List list = new ArrayList();
Workbook wb=null;
try
{
wb= Workbook.getWorkbook(fl);
}catch(Exception e)
{
System.out.println("AAAAAAAAAA: "+e.getMessage());
}
Sheet rs =wb.getSheet(0);
int lastRowNumber=rs.getRows(); //獲得行數
System.out.println("行數為:"+lastRowNumber);
for(int i=2;i<lastRowNumber;i++)
{
int colnums = rs.getColumns();//列數
String []onerecoder = new String[colnums];
for(int m =0;m<colnums;m++)
{
Cell c00 = rs.getCell(m, i);//m為列 i為行
String strc00 = c00.getContents();
onerecoder[m]=strc00;
}
EmployeGongZiCard egzc = new EmployeGongZiCard();
egzc.setPeoplehao(onerecoder[0]);//員工編號
egzc.setBumen(onerecoder[1]);//部門名稱
egzc.setBumencode(onerecoder[2]);//部門編號
egzc.setPeoplename(onerecoder[3]);//姓名
egzc.setPeopleshenfenzheng(onerecoder[4]);//身份證
egzc.setOkbankcard(onerecoder[5]);//卡號
egzc.setBanklei(onerecoder[6]);//卡類型
egzc.setFlags(0);
Date dt = new Date();
egzc.setDengjitime(dt);
//egzc.setControlpeo("");
if(!isHavenPeoGongZiCard(onerecoder[0],onerecoder[2],onerecoder[6], 2))
{
boolean b = saveEmployeGongZiCard(egzc);
}
else
{
list.add(egzc);//未成功的資訊原因:該員工的這種類型的卡以存在且不 是掛失狀態
}
}
return list;
}
public boolean isHavenPeoGongZiCard(String bianhao, String bumencode, String kaleixing, int flags) {
boolean b = false;
List list = null;
try{
list = this.getHibernateTemplate().find("from EmployeGongZiCard where flags!="+flags+" and bumencode ='"+bumencode+"' and banklei='"+kaleixing+"' and peoplehao='"+bianhao+"'");
if(list!=null&&list.size()>0)
b = true;
}catch(Exception e ){
e.printStackTrace();
}
return b;
}
Struts 中的Action中
public ActionForward excelToDb(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
{
UploadExcelForm uploadexcelForm = (UploadExcelForm) form;
FormFile ff=uploadexcelForm.getFexcel();
System.out.println("載入的檔案對象為:"+ff+"<end");
InputStream in=null;
try {
in = ff.getInputStream();
List list = employegongzicard.excelToDb(in);
request.setAttribute("failedlist", list);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return mapping.findForward("exceltodb");
}
jsp頁面
<%@ page language="java" contentType="text/html; charset=gbk" pageEncoding="gbk"%>
<%@ page import="java.util.*,persistent.EmployeGongZiCard" %>
<%
String path = request.getContextPath();
List list = null;
if(request.getAttribute("failedlist")!=null&&!request.getAttribute("failedlist").toString().equals(""))
{
list = (List)request.getAttribute("failedlist");
}
if(list == null)
{
list = new ArrayList();
}
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk">
<title>工資卡匯入</title>
</head>
<body>
<form action="<%=path %>/gongzikadj.do?message=exceltodb" enctype="multipart/form-data" method="POST">
<table>
<tr><td colspan="2">導回銀行工資卡資料</td></tr>
<tr><td colspan="2">請注意:</td></tr>
<tr><td colspan="2">1、EXCEL檔案格式,必須為"序號|員工編號|員工部門|員工姓名|社會安全號碼|卡號|卡類型"七列,第一行預設為列名,資料被忽略。</td></tr>
<tr><td colspan="2">2、EXCEL檔案資料行,如果第一列值為空白,認為資料到此結束,後面的內容將被忽略。</td></tr>
<tr><td colspan="2">3、對於已經有的工資卡號,將預設更新為新值.
</td></tr>
<tr><td>選擇EXCEL檔案:</td><td><input type="file" /></td></tr>
<tr><td colspan="2"><input type="submit" value="開始匯入資料" /></td></tr>
</table>
</form>
<%
if(list!=null&&list.size()>0){
%>
<table>
<tr><td colspan="7">沒有匯入成功的員工列表</td></tr>
<tr><td colspan="7">每個員工每種卡只能有一張工資卡(非掛失狀)</td></tr>
<tr><td colspan="7">原因:該員工的該卡類型的卡以存在,且卡狀態為非掛失狀態</td></tr>
<tr><td>員工編號</td><td>員工部門</td><td>部門編號</td><td>員工姓名</td><td>社會安全號碼</td><td>卡號</td><td>卡類型</td></tr>
<%
Iterator it = list.iterator();
while(it.hasNext())
{
EmployeGongZiCard egzc = new EmployeGongZiCard();
egzc = (EmployeGongZiCard)it.next();
%>
<tr>
<td><%=egzc.getPeoplehao()==null?"" :egzc.getPeoplehao()%></td>
<td><%=egzc.getBumen()==null ?"":egzc.getBumen()%></td>
<td><%=egzc.getBumencode()==null ?"": egzc.getBumencode()%></td>
<td><%=egzc.getPeoplename()==null ?"": egzc.getPeoplename
<td><%=egzc.getPeoplename()==null ?"": egzc.getPeoplename()%></td>
<td><%=egzc.getPeopleshenfenzheng()==null ?"":egzc.getPeopleshenfenzheng() %></td>
<td><%=egzc.getOkbankcard()==null ?"":egzc.getOkbankcard() %></td>
<td><%=egzc.getBanklei()==null ?"":egzc.getBanklei() %></td>
</tr>
<%} %>
</table>
<%} %>
</body>
</html>