POI读写EXCEL文件

一、Apache POI简介

Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。

基本功能

结构:

HSSF - 提供读写Microsoft Excel格式档案的功能。

XSSF - 提供读写Microsoft Excel OOXML格式档案的功能。

HWPF - 提供读写Microsoft Word格式档案的功能。

HSLF - 提供读写Microsoft PowerPoint格式档案的功能。

HDGF - 提供读写Microsoft Visio格式档案的功能。

二、创建工程所需jar包

commons-io-2.4.jar
poi-3.15.jar

扫描二维码关注公众号,回复: 3819582 查看本文章

三、环境准备

1.User.java

package com.hello.world.pojo;

public class User {

	private int id;
	
	private String name;
	
	private String sex;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", sex=" + sex + "]";
	}
}

2、Excel文件原始数据

3、读取Excel文件内容

Excel文件保存路径:D:\excel

文件名:poi_test.xls

4、PoiReader.java

package com.hello.world.poi;

import java.io.File;
import java.io.FileInputStream;
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;

import com.hello.world.pojo.User;
/**
 *POI读取Excel文件
 */
public class PoiReader {

	public static void main(String[] args) {

		// 将读取出来的数据封装到User对象,将User对象添加到集合中
		List<User> list = new ArrayList<>();
		try {
			File file = new File("D:\\excel\\poi_test.xls");
			FileInputStream input = new FileInputStream(file);

			// HSSFWorkbook用于操作后缀为.xls的excel表格,XSSFWorkbook用于操作.xlsx的excel表格
			HSSFWorkbook workbook = new HSSFWorkbook(input);

			// 获取工作簿的方法有两种,一种是根据索引获取,第一个sheet的索引为0,还有一种是根据sheet名称获取
			// HSSFSheet sheet = workbook.getSheet("poi");
			HSSFSheet sheet = workbook.getSheetAt(0);

			// 获得最后一行的行号
			// 最后一行行号等于sheet的数据行数
			int lastNum = sheet.getLastRowNum();
			// 遍历获得每一行,第一行是表头,从第二行开始
			for (int i = 1; i < lastNum + 1; i++) {
				User u = new User();
				// 得到每一行
				HSSFRow row = sheet.getRow(i);
				// 获得最后一列的值,等于每一行的总列数
				int lastCellNum = row.getLastCellNum();
				// 遍历每一列,得到每一个单元格
				for (int j = 0; j < lastCellNum; j++) {
					if (j == 0) {
						// 第i行第j列单元格,第一列为数字格式
						HSSFCell cell = row.getCell(j);
						int id = (int) cell.getNumericCellValue();
						u.setId(id);
					}
					if (j == 1) {
						HSSFCell cell = row.getCell(j);
						String name = cell.getStringCellValue();
						u.setName(name);
					}
					if (j == 2) {
						HSSFCell cell = row.getCell(j);
						String sex = cell.getStringCellValue();
						u.setSex(sex);
					}
				}
				list.add(u);
				// 关闭资源
				workbook.close();
			}
			System.out.println(list);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

5、结果展示

[User [id=1, name=name 1, sex=男], User [id=2, name=name 2, sex=男], User [id=3, name=name 3, sex=男], User [id=4, name=name 4, sex=男], User [id=5, name=name 5, sex=男], User [id=6, name=name 6, sex=男], User [id=7, name=name 7, sex=男], User [id=8, name=name 8, sex=男], User [id=9, name=name 9, sex=男], User [id=10, name=name 10, sex=男]]

与原始数据一致,这里之所以将读取结果封装到User对象,然后将User对象添加到集合中,是考虑到实际业务处理,所以没有将单元格内容直接打印输出。

6、利用POI写入数据到excel表格中

package com.hello.world.poi;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.commons.io.FileUtils;
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;

/*
 * 利用POI创建excel文件,并写入数据
 */
public class PoiWrite {

	public static void main(String[] args) {

		// 表头信息
		String[] titles = { "id", "name", "sex" };

		// 创建workbook
		HSSFWorkbook workbook = new HSSFWorkbook();
		// 创建sheet
		HSSFSheet sheet = workbook.createSheet("poi");
		// 创建第一行
		HSSFRow row = sheet.createRow(0);
		for (int i = 0; i < titles.length; i++) {
			// 将标题添加到第一行里
			HSSFCell cell = row.createCell(i);
			cell.setCellValue(titles[i]);
		}

		// 从第二行开始添加数据,一共十行
		for (int i = 1; i < 11; i++) {
			// 得到每一行的对象
			HSSFRow row2 = sheet.createRow(i);
			// 为第一个单元格赋值
			HSSFCell cell2 = row2.createCell(0);
			cell2.setCellValue(i + "");
			// 为第二个单元格赋值
			cell2 = row2.createCell(1);
			cell2.setCellValue("name " + i);
			// 为第三个单元格赋值
			cell2 = row2.createCell(2);
			cell2.setCellValue("男");
		}

		try {
			File file = new File("D:\\excel\\poi_test2.xls");
			FileOutputStream out = FileUtils.openOutputStream(file);
			workbook.write(out);
			workbook.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

结果展示:

表格的样式也可以进行设置,这里就不详细介绍了,有兴趣的同学可以查看POI官方文档

猜你喜欢

转载自blog.csdn.net/weixin_39999535/article/details/81675596