java對Excel的操作

來源:互聯網
上載者:User

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目錄下就行了 

 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>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.