1 POI读取excel
Apache的POI组件是Java操作Microsoft Office办公套件的强大API,其中对Word,Excel和PowperPoint都有支持,当然使用较多的还是Excel,因为Word和PowerPoint用程序动态操作的应用较少。那么本文就结合POI来介绍一下操作Excel的方法。
Office 2007的文件结构完全不同于2003,所以对于两个版本的Office组件,POI有不同的处理API,分开使用即可。首先来说几个Excel的基本概念。对于一个Excel文件,这称为一个工作簿(Workbook),打开Excel之后,在下方会有sheet1/2/3这样的选项卡,点击可以切换到不同的sheet中,这个sheet称作工作表。每个工作表就是我们编辑的区域,这是一张二维表,阿拉伯数字控制行数,从1开始,而程序中还是0,类似数组和集合。字母控制列数,从A开始,Z以后是两个字母控制。对于每一行,我们称为Row,列就是Column,行列可以确定唯一的一个元素,那么就是单元格,称为Cell。
下面从读取Excel开始,首先建立一个Excel 2003以下版本的xls文件。设定几列来看。来存储学生信息的Excel表如下:
姓名 | 性别 | 年龄 |
张三 | 男 | 20 |
李四 | 女 | 23 |
王五 | 男 | 22 |
这里的姓名,性别和班级是文本值,而年龄和成绩是数字值,这在设计对象和处理时要注意区分。那么可以如下设计这个对象:
创建student类
package poi_test;
/**
* 学生类
* @author Administrator
*
*/
publicclass student {
private String name;//姓名
private String sex;//性别
privateintage;//年龄
public student(){
}
public student(String name, String sex, int age){
this.name=name;
this.sex=sex;
this.age=age;
}
public String getName() {
returnname;
}
publicvoid setName(String name) {
this.name = name;
}
public String getSex() {
returnsex;
}
publicvoid setSex(String sex) {
this.sex = sex;
}
publicint getAge() {
returnage;
}
publicvoid setAge(int age) {
this.age = age;
}
public String getInfo(){
return"student info:"+name+" "+sex+" "+age;
}
}
以下读取excel
package poi_test;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
/**
* 读取excel
* @author Administrator
*
*/
publicclass readExcel {
privatestatic String xls2003="C:\\student.xls";
privatestatic String xls2007="C:\\student.xlsx";
privatestatic List<student> readfromexcel2003(String filePath){
File excelFile = null;//excel文件对象
InputStream is = null;//输入流
String cellStr = null;//单元格的值
List<student> studentlist = new ArrayList<student>();
student student = null;
try{
excelFile = new File(filePath);
is = new FileInputStream(excelFile);
HSSFWorkbook workbook2003 = new HSSFWorkbook(is);//创建excel文件对象
HSSFSheet sheet = workbook2003.getSheetAt(0);//取出第一个工作表
int rows = sheet.getLastRowNum();//一共有多少行
for (int i = 1; i <= rows; i++) {
//不处理表头所以从1开始
student = new student();
HSSFRow row = sheet.getRow(i);// 获取行信息
if(row==null){
continue;
}
int cellnums = row.getLastCellNum();//没一行有多少列即多少单元格
for (int j = 0; j < cellnums; j++) {
HSSFCell cell = row.getCell(j);
if(cell==null){
cellStr = "";
}elseif (cell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN) {// 对布尔值的处理
cellStr = String.valueOf(cell.getBooleanCellValue());
} elseif (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {// 对数字值的处理
cellStr = cell.getNumericCellValue() + "";
} else {
cellStr = cell.getStringCellValue();
}
if(j==0){
student.setName(cellStr);
}elseif(j==1){
student.setSex(cellStr);
}else{
student.setAge(new Double(cellStr).intValue());
}
}
studentlist.add(student);
}
}catch (IOException e) {
// TODO: handle exception
e.printStackTrace();
}finally{
if(is!=null){
try{
is.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
return studentlist;
}
publicstaticvoid main(String[] args) {
long start = System.currentTimeMillis();
List<student> list = readfromexcel2003(xls2003);
for (student stu : list) {
System.out.println(stu.getInfo());
}
long end = System.currentTimeMillis();
System.out.println((end - start) + " ms done!");
}
}
2 POI写入excel数据
下面来做简单的文件写入,也就是准备输入写入Excel文件,为了演示,直接创建对象,而实际应用中数据可以是来自数据库的。写入文件就是文件解析的逆过程。但POI的组件不是从单元格开始创建文件的,还是从工作簿开始创建,进而创建工作表,行和单元格,最终将整个工作簿写入文件,完成操作。
package poi_test;
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
publicclass writeExcel {
privatestatic String xls2003="d:\\student.xls";
privatestatic String xls2007="d:\\student.xlsx";
privatestatic List<student> studentList = null;
privatestatic student[] students = new student[4];
/**
* 静态块初始化数据
*/
static {
studentList = new ArrayList<student>();
students[0] = new student("张三", "男", 23);
students[1] = new student("李四", "女", 20);
students[2] = new student("王五", "男", 21);
students[3] = new student("赵六", "女", 22);
studentList.addAll(Arrays.asList(students));
}
/**
* 写入excel数据
* @param filePath
*/
publicstaticvoid writeExcel2003(String filePath) {
// 先创建工作簿对象
HSSFWorkbook workbook2003 = new HSSFWorkbook();
// 创建工作表对象并命名
HSSFSheet sheet = workbook2003.createSheet("学生信息统计表");
sheet.setDefaultColumnWidth(30);//设置单元格宽度
sheet.setDefaultRowHeightInPoints(40);//设置单元格默认高度
HSSFRow row1 = sheet.createRow(0);
row1.setHeight((short)300);
HSSFCell nameCellone = row1.createCell(0);
nameCellone.setCellValue("姓名");
HSSFCell sexCellone = row1.createCell(1);
sexCellone.setCellValue("性别");
HSSFCell ageCellone = row1.createCell(2);
ageCellone.setCellValue("年龄");
for (int i = 1; i <=studentList.size(); i++) {
// 取出Student对象
student student = studentList.get(i-1);
// 创建行
HSSFRow row = sheet.createRow(i);
// 开始创建单元格并赋值
HSSFCell nameCell = row.createCell(0);
nameCell.setCellValue(student.getName());
HSSFCell sexCell = row.createCell(1);
sexCell.setCellValue(student.getSex());
HSSFCell ageCell = row.createCell(2);
ageCell.setCellValue(student.getAge());
}
// 生成文件
File file = new File(filePath);
FileOutputStream fos = null;
try {
fos = new FileOutputStream(file);
workbook2003.write(fos);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (fos != null) {
try {
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
/**
* @param args
*/
publicstaticvoid main(String[] args) {
// TODO Auto-generated method stub
long start = System.currentTimeMillis();
writeExcel2003(xls2003);
long end = System.currentTimeMillis();
System.out.println((end - start) + " ms done!");
}
}
相关推荐
利用POI读取excel写入到word 利用POI读取excel写入到word 利用POI读取excel写入到word,压缩包里包含了jar包
这个项目实现的功能是读取excel文件中的数据,解析并写入数据库。 读取的excel文件位于项目目录下的 excel\0805.xlsx 使用IntelliJ IDEA开发此项目 使用MYSQL查看数据库 在MYSQL中运行项目db目录下的sql文件,创建...
使用poi读取写入复杂excel内容包括样式,工具类
阐述如何用POI来读取/写入完整的Excel文件。
java+poi+excel读取写入等操作所有jar(最新支持excel2013)Java实用源码整理learns
1、POI_EXCEL包下分别有两个类,一个是读取excel内容,一个是想excel写入内容 2、cn.itcast包下的所有包,是为了实现从excel写入到数据库中,和从数据库写入到excel中 注意事项: 1、需要导入maven工程 2、使用...
通过Jxl与poi读取和写入excel文件,并且区分2007和2003版的excel格式
利用 Apache POI 对 excel 操作并存入MySQL数据库的一个小demo。
POI处理excel文件,主要包括Excel的读取、写入,各种数据格式处理、单元格合并、注释、下拉列表及单元格的边框、背景色、宽度调整等。
只有读取,没有写入
java+poi+excel读取写入等操作所有jar(最新支持excel2013)+poi-bin-3.10-beta2-20130904源代码学习
java+poi+excel读取写入等操作所有jar(最新支持excel2013)+poi-bin-3.10-beta2-20130904javalearnsa资料分享
对Excel的读取,POI有两种模式,一是用户模式,这种方式同Jxl的使用很类似,使用简单,都是将文件一次性读到内存,文件小的时候,没有什么问题,当文件大的时候,就会出现OutOfMemory的内存溢出问题。第二种是事件...
注意:该资源属于写数据到Excel,而非读取Excel数据保存到数据库,保存到数据库的例子资源:http://download.csdn.net/download/a13432421434/9620001
poi读取大量数据会造成gc内存溢出的报错,由于垃圾回收机制无法将大量的对象及时的回收,而这些对象又会保存在内存中,会导致内存不够用的情况,这时候我们就需要使用新的方法,读取为cvs即可.此解决方案可支持千万数据的...
1.3 POI简单读取Excel数据 5 1.4 POI简单写出Excel 9 2.复杂读取 16 2.1 单元格各类型数据读取 16 2.1.1 基本类型 16 2.1.2 日期类型 18 2.2 自定义类型 21 3.复杂写入 22 3.1 复杂写入 22 3.2 多层公式 27 4.常用...
Excel POI读取封装(文件+示范代码) package org.excel.service; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; import java....
java_poi是一款开源的操作excel的类库,使用它可以方便的读取、写入、操作excel,这个是它的中文使用教程
NULL 博文链接:https://gojava1.iteye.com/blog/750718
对于poi有很详细的描述和解释,以及如何导出数据到表格和如何导入数据到数据库都有详细的讲解,如果需要工程源码,或者导出优化请联系我