Java:apache.poi读写Excel文件
2023-09-14 09:07:18 时间
依赖
<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);
}
}
相关文章
- 大数据必学Java基础(五十四):List接口深入了解
- java集合类面试题_Java集合类相关面试题
- java启动器_JAVA基础:Java 启动器如何查找类
- java开发常用四大框架_Java 后台开发框架[通俗易懂]
- java冒泡排序经典代码_Java 8大经典排序算法(含源代码),必须收藏!
- java数组去重_JAVA数组去重常用方法
- java 汉字乱码_Java中文乱码问题
- java中random方法取值范围_Java Random.nextInt()方法,随机产生某个范围内的整数
- Java 零拷贝_java高性能编程
- java——数组定义 遍历输出
- java事务的使用_Java跨库事务
- Java 近期新闻:GlassFish 7.0、Payara 平台、Apache NetBeans 16
- 【Java AWT 图形界面编程】菜单组件 ③ ( PopupMenu 菜单组件实现步骤 | 使用 MouseAdapter 设置事件监听器 | 代码示例 )
- java处理Excel文件—excel文件的创建,删除,写入,读取详解编程语言
- jpg图像文件缩放Java类(按指定比例缩放,按指定宽高缩放)详解编程语言
- Java程序运行时其中的数据是怎么存储的详解编程语言
- 解决java网络编程IPv6问题详解编程语言
- 【Java】集合-LinkedList详解编程语言
- Linux 下 Apache 服务器安装指南(linux安装apache)
- 使用Java实现Redis:简单易上手(redisjava实现)
- _home让Linux下Java更有效:更新Java_Home(linux更改java)
- 让Java开发能力在Linux下得到更大发挥(java linux编程)
- 提升Java工程师技术Oracle搭配Java的绝佳美妙(java搭配oracle)
- 合Java与Oracle联手打造崭新未来(java和oracle联)