Java-读写xlsx文件模板

1.导依赖包

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.0.1</version>
        </dependency>

2.模板

import com.monitorjbl.xlsx.StreamingReader;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

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

public class ExcelUtil {

    //把xlsx文件数据读到List<List<String>>
    public static List<List<String>> readXlxs(String filePath) throws FileNotFoundException {
        FileInputStream in = new FileInputStream(filePath);//根据路径建一个输入流
        Workbook wk = StreamingReader.builder()
                .rowCacheSize(100)  //缓存到内存中的行数,默认是10
                .bufferSize(4096)  //读取资源时,缓存到内存的字节大小,默认是1024
                .open(in);  //打开资源,必须,可以是InputStream或者是File,注意:只能打开XLSX格式的文件
        //读取excel第一个工作簿
        Sheet sheet = wk.getSheetAt(0);
        //存放所有数据的集合
        List<List<String>> lists = new ArrayList<>();
        int idx = 0;
        String value;
        for (Row row : sheet) {//遍历所有的行
            idx=row.getRowNum();
            if(idx==0)//一般第一行是标题,人性化忽略
                continue;
            List<String> rowList  = new ArrayList<>();//存放每一行数据的集合
            for (Cell cell : row) {//遍历每一行数据的列
                value = cell.getStringCellValue();
                rowList.add(value);//把每个单元格的数据一一放进每一行集合中
            }
            lists.add(rowList);//把每行数据一行一行放进整个集合中
        }
        System.out.println("读取excel表中的记录数量 "+lists.size());
        return lists;
    }

    //把List<List<String>>内容写到xlsx文件
    public static void writeXlxs(List<List<String>> lists){
        try{
            //新建一个workbook对象
            XSSFWorkbook wb = new XSSFWorkbook();
            //创建一个sheet表
            XSSFSheet sheet = wb.createSheet("sheet");
            //创建行
            XSSFRow row = sheet.createRow(0);
            //解析行标签
            for (int i = 0; i < lists.size(); i++) {
                //第几行
                row = sheet.createRow(i);
                for (int j = 0; j < lists.get(i).size(); j++) {
                    //第几列
                    row.createCell((short) j).setCellValue(lists.get(i).get(j));
                }
            }
            File file = new File("F:\\output.xlsx");
            //输出流
            FileOutputStream fout = new FileOutputStream(file);
            //写入
            wb.write(fout);
            //关闭输出流
            fout.close();

        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

 

 

 

posted @ 2020-11-05 15:24  守林鸟  阅读(731)  评论(0编辑  收藏  举报