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

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值