Poi实现Excel表格的导入导出

版权声明:本文为博主原创文章,转载请注明出处,商业转载请联系博主。
1.实现原理介绍
基于Java反射机制的POI实现Excel数据导入_导出。
Java反射的介绍:
这里写图片描述
这里写图片描述
2.实现
已经在代码中加入了完整的注释。

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class ExcelOperate {

public static void main(String[] args) {
    // 创建Excel表格
    createExcel(getStudent());

    // 读取Excel表格
    List<Student> list = readExcel();
    System.out.println(list.toString());
}

/**
 * 初始化数据
 * 
 * @return 数据
 */
private static List<Student> getStudent() {
    List<Student> list = new ArrayList<Student>();
    Student student1 = new Student("小明", 8, "二年级");
    Student student2 = new Student("小光", 9, "三年级");
    Student student3 = new Student("小花", 10, "四年级");
    list.add(student1);
    list.add(student2);
    list.add(student3);
    return list;
}

/**
 * 创建Excel
 * 
 * @param list
 *            数据
 */
private static void createExcel(List<Student> list) {
    // 创建一个Excel文件
    HSSFWorkbook workbook = new HSSFWorkbook();
    // 创建一个工作表
    HSSFSheet sheet = workbook.createSheet("学生表一");
    // 添加表头行
    HSSFRow hssfRow = sheet.createRow(0);
    // 设置单元格格式居中
    HSSFCellStyle cellStyle = workbook.createCellStyle();
    cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);

    // 添加表头内容
    HSSFCell headCell = hssfRow.createCell(0);
    headCell.setCellValue("姓名");
    headCell.setCellStyle(cellStyle);

    headCell = hssfRow.createCell(1);
    headCell.setCellValue("年龄");
    headCell.setCellStyle(cellStyle);

    headCell = hssfRow.createCell(2);
    headCell.setCellValue("年级");
    headCell.setCellStyle(cellStyle);

    // 添加数据内容
    for (int i = 0; i < list.size(); i++) {
        hssfRow = sheet.createRow((int) i + 1);
        Student student = list.get(i);

        // 创建单元格,并设置值
        HSSFCell cell = hssfRow.createCell(0);
        cell.setCellValue(student.getName());
        cell.setCellStyle(cellStyle);

        cell = hssfRow.createCell(1);
        cell.setCellValue(student.getAge());
        cell.setCellStyle(cellStyle);

        cell = hssfRow.createCell(2);
        cell.setCellValue(student.getGrade());
        cell.setCellStyle(cellStyle);
    }

    // 保存Excel文件
    try {
        OutputStream outputStream = new FileOutputStream("D:/students.xls");
        workbook.write(outputStream);
        outputStream.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

/**
 * 读取Excel
 * 
 * @return 数据集合
 */
private static List<Student> readExcel() {
    List<Student> list = new ArrayList<Student>();
    HSSFWorkbook workbook = null;

    try {
        // 读取Excel文件
        InputStream inputStream = new FileInputStream("D:/students.xls");
        workbook = new HSSFWorkbook(inputStream);
        inputStream.close();
    } catch (Exception e) {
        e.printStackTrace();
    }

    // 循环工作表
    for (int numSheet = 0; numSheet < workbook.getNumberOfSheets(); numSheet++) {
        HSSFSheet hssfSheet = workbook.getSheetAt(numSheet);
        if (hssfSheet == null) {
            continue;
        }
        // 循环行
        for (int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {
            HSSFRow hssfRow = hssfSheet.getRow(rowNum);
            if (hssfRow == null) {
                continue;
            }

            // 将单元格中的内容存入集合
            Student student = new Student();

            HSSFCell cell = hssfRow.getCell(0);
            if (cell == null) {
                continue;
            }
            student.setName(cell.getStringCellValue());

            cell = hssfRow.getCell(1);
            if (cell == null) {
                continue;
            }
            student.setAge((int) cell.getNumericCellValue());

            cell = hssfRow.getCell(2);
            if (cell == null) {
                continue;
            }
            student.setGrade(cell.getStringCellValue());

            list.add(student);
        }
    }
    return list;
}

}

附上Student类的代码

public class Student {

private String name;
private int age;
private String grade;

public Student() {
}

public Student(String name, int age, String grade) {
    super();
    this.name = name;
    this.age = age;
    this.grade = grade;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public int getAge() {
    return age;
}

public void setAge(int age) {
    this.age = age;
}

public String getGrade() {
    return grade;
}

public void setGrade(String grade) {
    this.grade = grade;
}

@Override
public String toString() {
    return "Student [name=" + name + ", age=" + age + ", grade=" + grade
            + "]";
}

}

测试结果
导出的Excel表格students
这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_40714770/article/details/82502355