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、添加

 

 

 

 

 

 

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

posted @ 2021-10-12 00:31  心向未来  Views(528)  Comments(0)    收藏  举报