文章目录
Maven依赖设置导入相应jar包
读取.xlsx表格文件数据
写入数据到.xlsx表格文件
读写后缀名为.xls类型的表格文件(旧版表格文件)
详细视频教程
Maven依赖设置导入相应jar包
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>ReadExcel</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>ReadExcel Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
</dependencies>
<build>
<finalName>ReadExcel</finalName>
</build>
</project>
读取.xlsx表格文件数据
示例:
package Excel;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileInputStream;
import java.util.Scanner;
public class ReadExcel {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入Excel表格文件的磁盘路径:");
String str = input.next();
new ReadExcel().readExcel(str);
}
public void readExcel(String path){
try{
//1.建立输入流
FileInputStream fip = new FileInputStream(path);
//2.在输入流中获取Excel工作簿
XSSFWorkbook book = new XSSFWorkbook(fip);
//3.获取工作簿中要读取的工作表,可以通过工作表的下标(从0开始的)或者工作表的名称来获取
XSSFSheet sheet = book.getSheetAt(0);
//XSSFSheet sheet = book.getSheet("Sheet1");
//读取表头字符串
XSSFRow rows = sheet.getRow(0);
String ss1 = rows.getCell(0).getStringCellValue();
String ss2 = rows.getCell(1).getStringCellValue();
String ss3 = rows.getCell(2).getStringCellValue();
System.out.println(ss1+"\t\t"+ss2+"\t\t"+ss3);
//4.获取工作表中数据的总行数
int n = sheet.getPhysicalNumberOfRows();
//5.循环逐行读取,打印输出
for (int i = 1; i <n ; i++) {
//读取第i行
XSSFRow row = sheet.getRow(i);
//读取第0,1,2列,
String s1 = row.getCell(0).getStringCellValue();
String s2 = row.getCell(1).getStringCellValue();
double s3 = row.getCell(2).getNumericCellValue();
//打印
System.out.println(s1+"\t"+s2+"\t\t"+(int)s3);
}
//关闭输入流
fip.close();
}catch (Exception e){
System.out.println(e);
}
}
}
运行截图:
注意:
- 读取时设置接收数据的变量数据类型要和表格中数据的类型要一致,否则类型不匹配会报错
- 涉及文件流的操作必须要抛出异常,可以写在try代码块内部,或者在方法头处抛出响应异常
- 当Excel文件单元格内数据为空时,要加以判断,否则会报空指针异常
//第0行
XSSFRow row = sheet.getRow(0);
XSSFCell cell=row.getCell(0);
//判断读取对象是否为空
if(cell==null||row==null){
cell=row.createCell(0);
}
写入数据到.xlsx表格文件
示例:
package Excel;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.util.Scanner;
public class WriteExcel {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入数据存放的磁盘路径:");
String str = input.next();
new WriteExcel().writeExcel(str);
}
public void writeExcel(String path){
try{
//1.建立输出流
FileOutputStream fop = new FileOutputStream(path);
//2.创建工作簿
XSSFWorkbook book = new XSSFWorkbook();
//3.创建工作表
XSSFSheet sheet = book.createSheet();
//4.创建一行
XSSFRow row = sheet.createRow(0);//第0行,即首行
//5.创建单元格即相应的列
row.createCell(0).setCellValue("许红豆");//第0行的第0列
row.createCell(1).setCellValue("谢之遥");//第0行的第1列
//6.将工作簿写入到输出流,使得其写入到磁盘文件中去
book.write(fop);
//7.关闭输出流
fop.close();
System.out.println("写入成功!");
}catch (Exception e){
System.out.println("写入失败:"+e);
}
}
}
运行截图:
读写后缀名为.xls类型的表格文件(旧版表格文件)
.xlsx是新版的表格文件,而.xls是旧版的表格文件,二者读写的原理是一致的,代码相近,只是一些类名称不同,主要在工作簿、工作表、行的定义上有所区别
新版.xlsx
- 工作簿定义
XSSFWorkbook book = new XSSFWorkbook(fip);
- 工作表定义
XSSFSheet sheet = book.getSheetAt(0);
- 行定义
XSSFRow rows = sheet.getRow(0);
旧版.xls
- 工作簿
HSSFWorkbook book = new HSSFWorkbook (fip);
- 工作表
Sheet sheet = book.getSheetAt(0);
- 行
Row rows = sheet.getRow(0);
详细视频教程
【学习分享】JAVA如何读写Excel文档https://www.bilibili.com/video/BV1aV411z7ey?p=4&vd_source=857668257512c5571840acab6bd48bf5
END.