POI向Excel中写入数据及追加数据

Posted wakey

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POI向Excel中写入数据及追加数据相关的知识,希望对你有一定的参考价值。

import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

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

public class WriteExcel 

    /**
     * 向Excel中写入数据
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception 

        List<Student> stuList = new ArrayList<Student>();
        stuList.add(new Student(12,"lili","深圳南山"));
        stuList.add(new Student(13,"liming","深圳宝安"));
        stuList.add(new Student(14,"chengming","深圳罗湖"));

        String filePath = "E:\\\\ExcelData.xlsx";
        boolean flag = fileExist(filePath);
        if (flag)
            writeExcel(stuList,filePath);
        else 
            File file = new File(filePath);
            writeExcel(stuList,filePath);
        
    

    //判断文件是否存在
    public static boolean fileExist(String filePath)
        boolean flag = false;
        File file = new File(filePath);
        flag = file.exists();
        return flag;
    

    //向Excel中写数据
    public static void writeExcel(List<Student> list ,String filePath)
        XSSFWorkbook workbook = new XSSFWorkbook();
        XSSFSheet sheet = workbook.createSheet("student");
        XSSFRow firstRow = sheet.createRow(0);//第一行表头
        XSSFCell cells[] = new XSSFCell[3];

        String[] titles = new String[]"age","name","address";
        //循环设置表头信息
        for (int i=0;i<3;i++)
            cells[0]=firstRow.createCell(i);
            cells[0].setCellValue(titles[i]);
        

        //遍历list,将数据写入Excel中
        for (int i=0;i<list.size();i++)
            XSSFRow row = sheet.createRow(i+1);
            Student student = list.get(i);
            XSSFCell cell = row.createCell(0); //第一列
            cell.setCellValue(student.getAge());
            cell=row.createCell(1); //第二列
            cell.setCellValue(student.getName());
            cell=row.createCell(2); //第三列
            cell.setCellValue(student.getAddress());
        
        OutputStream out = null;
        try 
            out = new FileOutputStream(filePath);
            workbook.write(out);
            out.close();
         catch (Exception e)
            e.printStackTrace();
        
    

效果:

技术图片

 

二、向Excel中追加数据

import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

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

public class AddExcel 

    /**
     * 向Excel中追加内容
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception

        List<Student> stuList2 = new ArrayList<Student>();
        stuList2.add(new Student(15,"小明","深圳南山"));
        stuList2.add(new Student(16,"小王","深圳宝安"));
        stuList2.add(new Student(17,"小张","深圳罗湖"));

        FileInputStream in = new FileInputStream("E:\\\\ExcelData.xlsx");
        XSSFWorkbook workbook = new XSSFWorkbook(in);
        XSSFSheet sheet = workbook.getSheetAt(0);
        XSSFRow row=sheet.getRow(1);

        FileOutputStream out = new FileOutputStream("E:\\\\ExcelData.xlsx");
        //从第二行开始追加列
        /*row=sheet.getRow(1);
        row.createCell(3).setCellValue("AAA");
        row.createCell(4).setCellValue("BBB");*/

        //追加列数据
        for(int i=0;i<stuList2.size();i++)
            Student student = stuList2.get(i);
            row = sheet.getRow(i+1);
            row.createCell(3).setCellValue(student.getAge());
            row.createCell(4).setCellValue(student.getName());
            row.createCell(5).setCellValue(student.getAddress());
        

        /*//追加行数据
        row=sheet.createRow((short)(sheet.getLastRowNum()+1)); //在现有行号后追加数据
        row.createCell(0).setCellValue("测试数据"); //设置第一个(从0开始)单元格的数据
        row.createCell(1).setCellValue("haha"); //设置第二个(从0开始)单元格的数据*/

        try 
            out.flush();
            workbook.write(out);
            out.close();
        catch (Exception e)
            e.printStackTrace();
        
    

 效果:

技术图片

 

以上是关于POI向Excel中写入数据及追加数据的主要内容,如果未能解决你的问题,请参考以下文章

java poi 写入Excel后读取公式值问题

java工厂类 poi导出

java大概1000W数据导出成excel有啥好的建议。(最好是插件,POI、JXL、FastExcel已试过,数据量太大,不

求问 java poi 导出多个sheet页

如何用java向指定的Excel中写入数据

Pandas向本地Excel已存在的工作表追加写入DataFrame