Java实现导入导出Excel文件的方法(poi,jxl)
作者:少年锦阳 发布时间:2021-09-13 21:12:35
标签:java,导入,导出,excel,文件
目前,比较常用的实现Java导入、导出Excel的技术有两种Jakarta POI和Java Excel直接上代码:
一,POI
POI是apache的项目,可对微软的Word,Excel,Ppt进行操作,包括office2003和2007,Excl2003和2007。poi现在一直有更新。所以现在主流使用POI。
xls:
pom:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.2</version>
</dependency>
导出:
public class PoiCreateExcel {
public static void main(String[] args) {
// 创建表头
String[] title = {"id","name","sex"};
//创建Excel工作薄
HSSFWorkbook workbook = new HSSFWorkbook();
//创建一个工作表sheet
HSSFSheet sheet = workbook.createSheet();
//创建第一行
HSSFRow row = sheet.createRow(0);
HSSFCell cell = null;
// 插入第一行
for (int i = 0; i < title.length; i++) {
cell = row.createCell(i);
cell.setCellValue(title[i]);
}
// 追加数据
for (int i = 1; i < 10; i++) {// 这里的int 起始是1 也就是第二行开始
HSSFRow nexTrow = sheet.createRow(i);
HSSFCell cell2 = nexTrow.createCell(0);
cell2.setCellValue("a"+i);
cell2 = nexTrow.createCell(1);
cell2.setCellValue("user");
cell2 = nexTrow.createCell(2);
cell2.setCellValue("男");
}
// 创建一个文件
File file = new File("d:/poi.xls");
try {
file.createNewFile();
// 将内容存盘
FileOutputStream stream = FileUtils.openOutputStream(file);
workbook.write(stream);
stream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
导入:
public class PoiReadExcel {
public static void main(String[] args) {
// 引入需要解析的文件
File file = new File("d:/poi.xls");
try {
// 创建Excel 读取文件内容
HSSFWorkbook workbook = new HSSFWorkbook(FileUtils.openInputStream(file));
/**
* 第一种方式读取Sheet页
*/
// HSSFSheet sheet = workbook.getSheet("Sheet0");
/**
* 第二种方式读取Sheet页
*/
HSSFSheet sheet = workbook.getSheetAt(0);
int firstRowNum = 0;// 起始行第0行
int lasrRowNum = sheet.getLastRowNum();// 一直读到最后一行
for (int i = 0; i < lasrRowNum; i++) {
HSSFRow row = sheet.getRow(i);
// 获取当前最后单元格列号
int lastCellNum = row.getLastCellNum();
for (int j = 0; j < lastCellNum; j++) {
HSSFCell cell = row.getCell(j);
String value = cell.getStringCellValue();// 注意! 如果Excel 里面的值是String 那么getStringCellValue 如果是其他类型 则需要修改
System.out.print(value + " ");
}
System.out.println();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
xlsx:
pom:
<!-- poi高版本额外包 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-examples</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-excelant</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>3.9</version>
</dependency>
导出:
public class PoiCreateExcel {
public static void main(String[] args) {
// 创建表头
String[] title = {"id","name","sex"};
//创建Excel工作薄
XSSFWorkbook workbook = new XSSFWorkbook();
//创建一个工作表shheet
Sheet sheet = workbook.createSheet();
//创建第一行
Row row = sheet.createRow(0);
Cell cell = null;
// 插入第一行
for (int i = 0; i < title.length; i++) {
cell = row.createCell(i);
cell.setCellValue(title[i]);
}
// 追加数据
for (int i = 1; i < 10; i++) {// 这里的int 起始是1 也就是第二行开始
Row nexTrow = sheet.createRow(i);
Cell cell2 = nexTrow.createCell(0);
cell2.setCellValue("a"+i);
cell2 = nexTrow.createCell(1);
cell2.setCellValue("user");
cell2 = nexTrow.createCell(2);
cell2.setCellValue("男");
}
// 创建一个文件
File file = new File("d:/poi.xlsx");// 这里可以修改成高版本的
try {
file.createNewFile();
// 将内容存盘
FileOutputStream stream = FileUtils.openOutputStream(file);
workbook.write(stream);
stream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
导入:
public class PoiReadExcel {
public List<Double> readExcels(InputStream is)throws Exception{
List<Double> xlsxList = new ArrayList<Double>();
try {
if(is ==null){
throw new IOException("文件不正确!");
}
Workbook workbook = WorkbookFactory.create(is);
FormulaEvaluator fe = workbook.getCreationHelper().createFormulaEvaluator();
//获取第一张表
Sheet sheet = workbook.getSheetAt(0);
if(sheet == null){
throw new IOException("传入的excel的第一张表为空!");
}
for(int rowNum = 0;rowNum <= sheet.getLastRowNum(); rowNum++){
Row row = sheet.getRow(rowNum);
if(row != null){
//获得当前行的开始列
int firstCellNum = row.getFirstCellNum();
//获得当前行的列数
int lastCellNum = row.getPhysicalNumberOfCells();
String result = "";
//循环当前行
for(int cellNum = firstCellNum; cellNum < lastCellNum;cellNum++){
Cell cell = row.getCell(cellNum);
double value = 0;
String valueString = cell.getStringCellValue();
if(null!=fe.evaluate(cell)){
value = fe.evaluate(cell).getNumberValue();
}
//result = result + cellNum + ":"+value + "----";
result = result + cellNum + ":"+valueString + "----";
}
System.out.println(result + " ");
}
}
is.close();
} catch (FileNotFoundException e) {
throw new Exception("文件不正确!");
}
return xlsxList;
}
public static void main(String[] args) throws Exception {
InputStream is = new FileInputStream("d:/poi.xlsx");
PoiReadExcel re = new PoiReadExcel();
re.readExcels(is);
}
}
二,JXL
JXL只能对Excel进行操作,属于比较老的框架,它只支持到Excel 95-2000的版本。现在已经停止更新和维护。
pom:
<!-- jxl -->
<dependency>
<groupId>net.sourceforge.jexcelapi</groupId>
<artifactId>jxl</artifactId>
<version>2.6.10</version>
</dependency>
导出:
public class JxlCreateExcel {
public static void main(String[] args) {
// 首先设置表格第一行 表格头名称 也就是列名
String [] title = {"id","name","sex"};
// 创建Excel文件 存入路径
File file = new File("d:/jxl.xls");
try {
file.createNewFile();
// 创建工作薄
WritableWorkbook workbook = Workbook.createWorkbook(file);
// 创建sheet
WritableSheet sheet = workbook.createSheet("sheet1",0);
// 添加数据
Label label = null;
// 第一行设置列名
for (int i = 0; i < title.length; i++) {
label = new Label(i,0,title[i]);
sheet.addCell(label);
}
// 追加数据 从第二行开始 i从1开始
for (int i = 1; i < 9; i++) {
label = new Label(0,i,"id:"+i);
sheet.addCell(label);
label = new Label(1,i,"user");
sheet.addCell(label);
label = new Label(2,i,"男");
sheet.addCell(label);
}
// 写入 并在最后关闭流
workbook.write();
workbook.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
导入:
public class JxlReadExcel {
public static void main(String[] args) {
try {
// 创建 Workbook
Workbook workbook = Workbook.getWorkbook(new File("d:/jxl.xls"));
// 获取工作表sheet
Sheet sheet = workbook.getSheet(0);
// 获取数据
for (int i = 0; i < sheet.getRows(); i++) {// 获取行
for (int j = 0; j < sheet.getColumns(); j++) {// 获取列
Cell cell = sheet.getCell(j,i);
System.out.print(cell.getContents() + " ");// 得到单元格的内容
}
System.out.println();
}
workbook.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
到此,代码可直接部署运行,希望可以帮助到你~
来源:https://blog.csdn.net/qq_45150222/article/details/105012569
0
投稿
猜你喜欢
- java 中clone()的使用方法前言:clone就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象。所谓的复制对象
- C#是一门面向对象的语言,具有面向对象的基本特征,抽象、封装、继承、多态等性质。学习C#除了一些基本的语法,还得学习一些新的特性,比如说:泛
- 代码:package com.lwj.test.proxy;import java.lang.reflect.InvocationHandl
- 前台form 表单:设置method=post,enctype=multipart/form-data。struts2在原有的上传解析器继承
- 前言IOC和AOP是Spring 中最重要的两个模块。这里练习一下如何使用Spring Boot AOP处理方法的入参和返回值。Spring
- 一、什么是建造者模式建造者模式也称生成器模式 定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示(依赖倒转)产品
- 详解Java虚拟机管理的内存运行时数据区域概述 Java虚拟机在执行Java程序的过程中会把它所管理的内
- spring boot 请求后缀匹配spring boot 项目中添加这个类可以实现url不同后缀区分了public class UrlMa
- 本文实例讲述了本文章介绍了在c#,vb.net,sql中来判断指定日期是否为闰年的方法。分享给大家供大家参考。具体实现方法如下:C#代码如下
- 在工作中要求将图片上传至本地,如下代码将介绍如何将图片上传至本地准备工作:环境:eclipse4.5-x64,jdk1.7-x64,mave
- 算法文章,总是带给我们无穷的思考和兴趣,一个问题,多种解决方法,看你如何去思考它,对于标题所引出的问题,我觉得,使用递归是比较有效的方法,当
- 本文实例为大家分享了SpringBoot实现动态多线程并发定时任务的具体代码,供大家参考,具体内容如下实现定时任务有多种方式,使用sprin
- 本文实例为大家分享了java使用Cookie判断用户登录情况的方法,供大家参考,具体内容如下1.判断是否登录public boolean i
- C# 获取某个时间的0点0分和23点59分59秒,具体代码如下所示:C#获取当月第一天和最后一天当月第一天0时0分0秒:DateTime.N
- 首先介绍一下Java解释器的概念,Java解释器:解释器是Java虚拟机非常重要的一部分,它的工作就是把字节码转化为机器码并在特定的平台进行
- 最近在开发一个项目,需要写一个后管系统,Bootstrap是美国Twitter公司的设计师Mark Otto和Jacob Thornton合
- 1. 问题所示编译ssm的项目的时候出现了这个错误导致一直运行不起来SLF4J: Failed to load class "or
- Java 内存划分: 在Java内存分配中,java将内存分为:方法区,堆,虚拟机栈,本地方法栈,程序计
- 本文实例为大家分享了Java执行SQL脚本文件到数据库的具体方式,供大家参考,具体内容如下方式一:直接读取SQL脚本文件的内容,然后传递到S
- 整理文档,java 动态增加定时任务示例,直接上代码。import org.apache.tools.ant.util.DateUtils;