依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.16</version>
</dependency>
备注:poi-ooxml
已经包含了poi
、poi-ooxml-schemas
、curvesapi
,不需要单独引入
文件格式对应处理类
.xls => HSSFWorkbook
.xlsx => XSSFWorkbook
快速入门
写入文件
package com.demo.excel;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class WriteExcel {
public static void main(String[] args) throws IOException {
// 创建工作表
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("名称");
// 行
Row row = sheet.createRow(0);
// 单元格
Cell cell = row.createCell(0);
cell.setCellValue("姓名");
// 写到文件
OutputStream outputStream = new FileOutputStream("demo.xlsx");
workbook.write(outputStream);
outputStream.close();
//关闭
workbook.close();
}
}
读取文件
package com.demo.excel;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.*;
public class ReadExcel {
public static void main(String[] args) throws IOException {
// 创建工作表
InputStream inputStream = new FileInputStream("demo.xlsx");
Workbook workbook = new XSSFWorkbook(inputStream);
Sheet sheet = workbook.getSheet("名称");
Row row = sheet.getRow(0);
Cell cell = row.getCell(0);
String value = cell.getStringCellValue();
System.out.println(value);
//关闭
inputStream.close();
workbook.close();
}
}
Excel读写工具
package com.demo.excel;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
/**
* Excel读写工具,兼容xls 和 xlsx格式
*/
public class ExcelUtil {
/**
* 获取扩展名
*
* @param filename 文件路径
* @return
*/
public static String getSuffix(String filename) {
return filename.substring(filename.lastIndexOf("."));
}
/**
* 兼容xls xlsx文件格式
*
* @param filename 文件路径
* @return
*/
public static Workbook readWorkBook(String filename) throws IOException {
// 获取文件扩展名
String ext = getSuffix(filename);
InputStream inputStream = new FileInputStream(filename);
Workbook workbook = null;
// xls格式的需要使用HSSFWorkbook类来解析
// xlsx格式的需要使用XSSFWorkbook格式来解析
if (".xls".equals(ext.toLowerCase())) {
workbook = new HSSFWorkbook(inputStream);
} else {
workbook = new XSSFWorkbook(inputStream);
}
return workbook;
}
/**
* 创建一个文件
*
* @param filename
* @return
*/
public static Workbook createWorkBook(String filename) {
// 获取文件扩展名
String ext = getSuffix(filename);
Workbook workbook = null;
// xls格式的需要使用HSSFWorkbook类来解析
// xlsx格式的需要使用XSSFWorkbook格式来解析
if (".xls".equals(ext.toLowerCase())) {
workbook = new HSSFWorkbook();
} else {
workbook = new XSSFWorkbook();
}
return workbook;
}
/**
* 读取Excel 文件
*
* @param filename
* @return 列表数据
* @throws Exception
*/
public static List<List<String>> readExcel(String filename) throws Exception {
// 创建工作簿的对象
Workbook workBook = readWorkBook(filename);
// 定义要返回的数据结构
List<List<String>> list = new ArrayList<>();
// 根据索引获取Sheet对象
Sheet sheet = workBook.getSheetAt(0);
// 定义表头
List<String> rowList;
// 获取所有行内容, 从第0 行开始 base 0
for (int rowIndex = 0; rowIndex <= sheet.getLastRowNum(); rowIndex++) {
rowList = new ArrayList<>();
Row row = sheet.getRow(rowIndex);
// 获取所有列值 base 1
for (int columnIndex = 0; columnIndex < row.getLastCellNum(); columnIndex++) {
Cell cell = row.getCell(columnIndex);
//首先强制设置成string类型
cell.setCellType(CellType.STRING);
String value = cell.getStringCellValue();
// System.out.println(value);
rowList.add(value);
}
// System.out.println(map);
list.add(rowList);
}
// 关闭工作簿
workBook.close();
return list;
}
/**
* 写入到excel
*
* @param filename
* @param list
* @throws Exception
*/
public static void writeExcel(String filename, List<List<Object>> list) throws Exception {
Workbook workbook = createWorkBook(filename);
Sheet sheet = workbook.createSheet();
Row row;
Cell cell;
List<Object> rowList;
for (int i = 0; i < list.size(); i++) {
row = sheet.createRow(i);
rowList = list.get(i);
for (int j = 0; j < rowList.size(); j++) {
cell = row.createCell(j);
String value = String.valueOf(rowList.get(j));
cell.setCellValue(value);
}
}
// 写到文件
OutputStream outputStream = new FileOutputStream(filename);
workbook.write(outputStream);
outputStream.close();
workbook.close();
}
}
测试
package com.demo.excel;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
public class ExcelUtilTest {
@Test
public void testReadExcel() throws Exception {
String filename = "demo.xlsx";
List<List<String>> list = ExcelUtil.readExcel(filename);
System.out.println(list);
// [[姓名, 年龄], [刘备, 42]]
}
@Test
public void testWriteExcel() throws Exception {
String filename = "demo.xlsx";
List<List<Object>> list = new ArrayList<>();
List<Object> list1 = new ArrayList<>();
list1.add("姓名");
list1.add("年龄");
List<Object> list2 = new ArrayList<>();
list2.add("刘备");
list2.add(42);
list.add(list1);
list.add(list2);
System.out.println(list);
// [[姓名, 年龄], [刘备, 42]]
ExcelUtil.writeExcel(filename, list);
}
}