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>