java Excel工具类

Excel工具类

MyExcelUtil.java

package com.asia.common;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
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.ss.usermodel.WorkbookFactory;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

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

public class MyExcelUtil {

	// 简单测试
    public static void main(String[] args) {
		List<List<String>> lists = readExcel("D:\\hao\\工作簿1.xlsx", 0);
        List<List<String>> dataList = new ArrayList<>();
        for (int i = 0; i < lists.size(); i++) {
            dataList.add(lists.get(i));
            System.out.println(lists.get(i));
        }
    }
    
    public static List<List<String>> readExcel(String path, int sheetIndex) {
        List<List<String>> excelDataList = new ArrayList<List<String>>();
        try {
            InputStream inputStream = new FileInputStream(path);
            File file;
            // 通过文件流工厂方式来处理,用来防止NotOLE2FileException
            Workbook workbook = WorkbookFactory.create(inputStream);

            if (inputStream == null || workbook == null) {
                return excelDataList;
            }

            // 读取Sheet
            Sheet sheet = workbook.getSheetAt(sheetIndex);
            if (sheet == null) {
                return excelDataList;
            }

            // 循环处理每一行,会读取到第一行
            int rows = sheet.getPhysicalNumberOfRows();
            int minCells = 0;
            int maxCells = 0;
            // 获取最小列数和最大列数,以第一行为准
            if (rows >= 1) {
                minCells = sheet.getRow(0).getFirstCellNum();
                maxCells = sheet.getRow(0).getLastCellNum();
            }

            for (int i = 0; i < rows; i++) {
                // 得到当前行
                Row row = sheet.getRow(i);
                if(null==row) {
                	break;
                }
                List<String> rowList = new ArrayList<String>();
                for (int j = minCells; j < maxCells; j++) {
                    // 每一个单元格
                    Cell cell = row.getCell(j);
                    if (cell == null) {
                        rowList.add("");
                    } else {
                        rowList.add(cell.toString());
                    }
                }
                excelDataList.add(rowList);
            }
            inputStream.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return excelDataList;
    }

    
    public static boolean writeExcel(List<String> title, List<List<String>> data, String sheetName, String filePath){
        if (filePath == null || !filePath.contains(".")) {
            return false;
        }
        String suffix = filePath.substring(filePath.lastIndexOf(".") + 1);

        Workbook workbook = null;

        switch (suffix) {
            case "xls":
                workbook = new HSSFWorkbook();

                break;
            case "xlsx":
                workbook = new XSSFWorkbook();
                break;
            default:
                return false;
        }

        // 在workbook中创建一个sheet对应excel中的sheet
        Sheet sheet = workbook.createSheet(sheetName);
        // 在sheet表中添加表头第0行,老版本的poi对sheet的行列有限制
        Row row = sheet.createRow(0);


        // 创建单元格,设置表头
        int titleSize = title.size();
        for (int i = 0; i < titleSize; i++) {
            Cell cell = row.createCell(i);
            cell.setCellValue(title.get(i));
        }

        // 写入数据
        int dataSize = data.size();
        for (int i = 0; i < dataSize; i++) {
            Row row1 = sheet.createRow(i + 1);
            List<String> rowData = data.get(i);
            // 创建单元格设值
            for (int i1 = 0; i1 < rowData.size(); i1++) {
                row1.createCell(i1).setCellValue(rowData.get(i1));
            }
        }

        File file = new File(filePath);
        if (file.exists()) {
            file.delete();
        }
        try {
            file.createNewFile();
            workbook.write(new FileOutputStream(file));
            workbook.close();
            return true;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return false;
    }
}

pom.xml

<dependencies>
		<!--poi相关依赖-->
		<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>
		<!--poi相关依赖end-->
	</dependencies>
相关推荐
等一场春雨5 分钟前
Java设计模式 八 适配器模式 (Adapter Pattern)
java·设计模式·适配器模式
肖田变强不变秃23 分钟前
C++实现有限元计算 矩阵装配Assembly类
开发语言·c++·矩阵·有限元·ansys
一弓虽27 分钟前
java基础学习——jdbc基础知识详细介绍
java·学习·jdbc·连接池
王磊鑫27 分钟前
Java入门笔记(1)
java·开发语言·笔记
喜欢猪猪35 分钟前
分布式与微服务:构建现代应用的关键架构
开发语言·php
硬件人某某某1 小时前
Java基于SSM框架的社区团购系统小程序设计与实现(附源码,文档,部署)
java·开发语言·社区团购小程序·团购小程序·java社区团购小程序
程序员徐师兄1 小时前
Java 基于 SpringBoot 的校园外卖点餐平台微信小程序(附源码,部署,文档)
java·spring boot·微信小程序·校园外卖点餐·外卖点餐小程序·校园外卖点餐小程序
kucupung1 小时前
【C++基础】多线程并发场景下的同步方法
开发语言·c++
chengpei1471 小时前
chrome游览器JSON Formatter插件无效问题排查,FastJsonHttpMessageConverter导致Content-Type返回不正确
java·前端·chrome·spring boot·json
Quantum&Coder1 小时前
Objective-C语言的计算机基础
开发语言·后端·golang