JXL实现Excel数据的导入导出(简单易学)
JXL实现Excel数据的导入导出(简单易学)
1、认识
在项目开发过程中,经常需要实现一个Excel数据报表功能,就是对Excel表格数据的导入与导出。对于对Excel数据的操作主要有两种方式:JXL技术和POI技术,现在比较火热的是POI技术,JXL慢慢的退出历史的舞台,不过有些地方还在使用。
首先,对JXL和POI技术,先做一个简单的介绍:两个技术都可以操作Excel,不同的是JXL只能操作Excel,它是一个比较老的框架,适用于旧版本的Excel,现在大家电脑上的Excel都是新版本的,但是也可以使用,并且JXL现在已经不再更新和维护;而POI不仅可以操作Excel还可以实现对Word、PPT的操作,并且它是Apache下的一个开源的项目,到现在一直更新,所以POI才更受大家的欢迎。
2、Excel版本
Excel主要有两个版本:Excel2003、Excel2007

3、需要的资源
实现JXL对数据的导入导出,需要有一个jar包 -------> jxl.jar
百度网盘:链接:https://pan.baidu.com/s/11WvFfX6LL8l7BBsNSH-u0g 提取码:tw15
4、具体实现(这里直说JXL,而POI后面会更新)
废话不说,直接上需求。
4.1、需求一:实现导入功能,数据如下图所示:

在ide中导入jar包,我使用的是idea,具体的导包步骤若是不会,我会在后面附注上。

上代码:
import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import jxl.read.biff.BiffException; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; /** * JXL操作,将数据导入到内存中,进行显示 */ public class JXL_Study_Input { public static void main(String[] args) throws IOException, BiffException { /** * Workbook是操作的核心类 */ InputStream inputStream = new FileInputStream("D:/testExcel.xls"); Workbook workbook = Workbook.getWorkbook(inputStream); /** * 这里的getWorkbook()方法的参数需要一个流,导入就是InputStream 导出就是OutputStream */ Sheet sheet = workbook.getSheet(0); /** * 这里的getSheet()参数需要一个int或String 分别代表:工作表的索引(从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() + "\t");//通过getContents()得到里面的内容 } System.out.println(); } workbook.close(); } }
其实很简单,就是通过输入流获取到文件对象,在使用Workbook.getWorkbook(inputstream);得到工作簿,再通过getSheet(0)得到工作表sheet,使用sheet对象对工作表进行for循环获取数据信息,最后记得关闭流,释放资源。
结果图:

4.2、需求二:实现导出功能,数据如下图所示:

上代码:
创建一个实体类,作为对象信息,本来应该是从数据库中获取信息然后进行输出到Excel中,这里就直接使用实例化实体类进行举例:
/** * 序号、学号、姓名、性别、专业 */ public class Student { private int id; private String xuehao; private String name; private String sex; private String profession; public Student() { } public Student(int id, String xuehao, String name, String sex, String profession) { this.id = id; this.xuehao = xuehao; this.name = name; this.sex = sex; this.profession = profession; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getXuehao() { return xuehao; } public void setXuehao(String xuehao) { this.xuehao = xuehao; } 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; } public String getProfession() { return profession; } public void setProfession(String profession) { this.profession = profession; } @Override public String toString() { return "Student{" + "id=" + id + ", xuehao='" + xuehao + '\'' + ", name='" + name + '\'' + ", sex='" + sex + '\'' + ", profession='" + profession + '\'' + '}'; } }
数据导出代码:
import com.hui.JXL_POI.pojo.Student; import jxl.Workbook; import jxl.write.Label; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import jxl.write.WriteException; import java.io.*; import java.util.ArrayList; import java.util.List; public class JXL_Study_Output { public static void main(String[] args) throws IOException, WriteException { // 创建输出流 OutputStream outputStream = new FileOutputStream("D:/test.xls"); // 创建工作簿 WritableWorkbook workbook= Workbook.createWorkbook(outputStream); // 创建工作表 WritableSheet sheet = workbook.createSheet("测试表", 0); // 两个参数:第一个表示表的名称,第二个表示表的索引 // 设置数据表栏 序号、学号、姓名、性别、专业 创建一个数组进行封装,后期循环数组,将里面的信息作为参数插入表中 String[] arrayTitle = new String[]{"序号","学号","姓名","性别","专业"}; Label label = null; for (int i = 0; i < arrayTitle.length; i++) { // 三个参数:列、行、字符串数据 Lable可以理解为就是创建每一个单元格对象信息,每创建一个,根据里面的行列信息,使用addCell函数将对象信息插入到指定的位置。 label = new Label(i, 0, arrayTitle[i]); sheet.addCell(label); } // 设置导出内容部分 List<Student> list = new ArrayList<>(); list.add(new Student(1,"1212","张三1号","男1","家里蹲大学1号")); list.add(new Student(2,"1213","张三2号","男2","家里蹲大学2号")); list.add(new Student(3,"1214","张三3号","男3","家里蹲大学3号")); list.add(new Student(4,"1215","张三4号","男4","家里蹲大学4号")); list.add(new Student(5,"1216","张三5号","男5","家里蹲大学5号")); // 设置每一行的索引 int rowIndex = 1; for (Student student : list) { label = new Label(0,rowIndex,String.valueOf(student.getId())); sheet.addCell(label); label = new Label(1,rowIndex,student.getXuehao()); sheet.addCell(label); label = new Label(2,rowIndex,student.getName()); sheet.addCell(label); label = new Label(3,rowIndex,student.getSex()); sheet.addCell(label); label = new Label(4,rowIndex,student.getProfession()); sheet.addCell(label); // 行自加1 rowIndex++; } // 这个write()函数就是将内存中的数据写入到excel中。 workbook.write(); workbook.close(); } }
思路:
我想将List集合中的实体类信息,输出到Excel中,使用输出流OutputStream获取文件,使用createWorkbook(outputStream)创建工作簿,再创建工作表,然后使用Lable指定表的标题栏信息,再循环添加每一个单元格信息。
5、附注:添加jar包步骤(idea)
5.1、点击项目结构:

或

5.2、添加



若有问题,还请大家斧正,谢谢!

浙公网安备 33010602011771号