25 poi操作excel

本节介绍一下使用poi读写excel。

1、操作步骤

  • 创建一个maven项目 poi-test
  • 加入依赖
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-schemas</artifactId>
            <version>4.0.1</version>
        </dependency>
  • 在src文件夹下创建Student.java
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

public class Student implements Serializable {
    private int id;
    private String name;
    private int age;
    private String gender;

    public Student(int id, String name, int age, String gender) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    public Student() {
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    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 getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", gender='" + gender + '\'' +
                '}';
    }

    public List<String> convertObj2List() {
        List<String> ret = new ArrayList<>();
        ret.add(this.id + "");
        ret.add(this.name);
        ret.add(this.age + "");
        ret.add(this.gender);
        return ret;
    }
}
  • 在src文件夹下创建PoiTest.java

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.*;

import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class PoiTest {

    public static boolean createWorkBook(String excelType, String sheetName, List<String> headList, List<List<String>> dataList, String path) {
        Workbook wb = new HSSFWorkbook();

        //创建表单
        Sheet sheet = wb.createSheet(sheetName != null ? sheetName : "new sheet");
        //设置字体
        Font headFont = wb.createFont();
        headFont.setFontHeightInPoints((short) 14);
        headFont.setFontName("Courier New");
        headFont.setItalic(false);
        headFont.setStrikeout(false);
        //设置头部单元格样式
        CellStyle headStyle = wb.createCellStyle();
        //设置单元格下线条及颜色
        headStyle.setBorderBottom(BorderStyle.THIN);
        headStyle.setBottomBorderColor(IndexedColors.BLUE.getIndex());
        //设置单元格左线条及颜色
        headStyle.setBorderLeft(BorderStyle.THIN);
        headStyle.setLeftBorderColor(IndexedColors.BLUE.getIndex());
        //设置单元格又线条及颜色
        headStyle.setBorderRight(BorderStyle.THIN);
        headStyle.setRightBorderColor(IndexedColors.BLUE.getIndex());
        //设置单元格线条及颜色
        headStyle.setBorderTop(BorderStyle.THIN);
        headStyle.setTopBorderColor(IndexedColors.BLUE.getIndex());
        //设置水平对齐方式
        headStyle.setAlignment(HorizontalAlignment.CENTER);
        //设置垂直对齐方式
        headStyle.setVerticalAlignment(VerticalAlignment.CENTER);
        headStyle.setFont(headFont);  //设置字体

        Row headRow = sheet.createRow(0);
        CreationHelper createHelper = wb.getCreationHelper();
        for (int i = 0; i < headList.size(); i++) {  //遍历表头数据
            Cell cell = headRow.createCell(i);  //创建单元格
            cell.setCellValue(createHelper.createRichTextString(headList.get(i)));  //设置值
            cell.setCellStyle(headStyle);  //设置样式
        }

        int rowIndex = 1;  //当前行索引
        //创建Rows
        //设置数据单元格格式
        CellStyle dataStyle = wb.createCellStyle();
        dataStyle.setBorderBottom(BorderStyle.THIN);  //设置单元格线条
        dataStyle.setBottomBorderColor(IndexedColors.BLACK.getIndex());   //设置单元格颜色
        dataStyle.setBorderLeft(BorderStyle.THIN);
        dataStyle.setLeftBorderColor(IndexedColors.BLACK.getIndex());
        dataStyle.setBorderRight(BorderStyle.THIN);
        dataStyle.setRightBorderColor(IndexedColors.BLACK.getIndex());
        dataStyle.setBorderTop(BorderStyle.THIN);
        dataStyle.setTopBorderColor(IndexedColors.BLACK.getIndex());
        dataStyle.setAlignment(HorizontalAlignment.LEFT);    //设置水平对齐方式
        dataStyle.setVerticalAlignment(VerticalAlignment.CENTER);  //设置垂直对齐方式

        for (List<String> rowdata : dataList) { //遍历所有数据
            Row row = sheet.createRow(rowIndex++); //第一行为头
            for (int j = 0; j < rowdata.size(); j++) {  //编译每一行
                Cell cell = row.createCell(j);
                cell.setCellStyle(dataStyle);
                cell.setCellValue(createHelper.createRichTextString(rowdata.get(j)));
            }
        }
        /*设置列自动对齐*/
        for (int i = 0; i < headList.size(); i++) {
            sheet.autoSizeColumn(i);
        }
        try (OutputStream fileOut = new FileOutputStream(path)) {    //获取文件流
            wb.write(fileOut);   //将workbook写入文件流
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return false;
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

    public static void readExcel(String path, String sheetName) throws IOException {
        //创建输入流
        FileInputStream fileInputStream = new FileInputStream(path);
        //获得poi输入流
        POIFSFileSystem poifsFileSystem = new POIFSFileSystem(fileInputStream);
        //获得文档
        HSSFWorkbook Workbook = new HSSFWorkbook(poifsFileSystem);
        //根据name获取sheet表
        HSSFSheet sheet = Workbook.getSheet(sheetName);

        //获得行数,下标从0开始
        int lastRow = sheet.getLastRowNum();
        System.out.println("行数:" + (lastRow + 1));
        //获取第二行(第一行一般是标题)
        HSSFRow row = sheet.getRow(1);
        //获得列数,下标从1开始
        int lastCell = row.getLastCellNum();
        System.out.println("列数:" + lastCell);

        for (int i = 0; i <= lastRow; i++) {
            //遍历每一行
            row = sheet.getRow(i);
            if (row != null) {
                for (int j = 0; j < lastCell; j++) {
                    //遍历每一列的cell
                    HSSFCell cell = row.getCell(j);
                    if (cell != null) System.out.print(cell.getStringCellValue() + " ");
                }
                System.out.println();
            }

        }
    }

    public static void main(String[] args) throws Exception {
        //创建一个Excel
        List<Student> list = new ArrayList<>();
        list.add(new Student(1, "ali123", 34, "男"));
        list.add(new Student(2, "xiaoli123", 3, "男"));
        list.add(new Student(3, "zhangli123", 34, "男"));
        List<List<String>> ret = new ArrayList<>();
        for (int i = 0; i < list.size(); i++) {
            List<String> obj2List = list.get(i).convertObj2List();
            ret.add(obj2List);
        }
       createWorkBook("2003","test", Arrays.asList(new String[]{"id","name","age","性别"}),ret,"D:/1.xls");
      //读取excel
        readExcel("D:/1.xls", "test");
    }
}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容