?? poi+-
字號:
使用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>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -