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>
相关推荐
枫叶v.7 分钟前
Agent 分层存储架构设计:从记忆方法到中间件选型
开发语言·python
AskHarries25 分钟前
系统提示词、开发者指令和用户输入的优先级
java·前端·数据库
daidaidaiyu1 小时前
ThingsBoard 规则链系统源码分析和自定义定时器
java
sleven fung1 小时前
MinerU与BabelDOC与KTransformers与OpenAI API库
开发语言·python·ai·langchain
小毛驴8502 小时前
spring-boot-maven-plugin,maven-compiler-plugin 功能对比
java·python·maven
萤萤七悬2 小时前
【Python笔记】AI帮实现CLI工具-使用argparse.ArgumentParser接收命令参数
开发语言·笔记·python
iCxhust2 小时前
C# 命令行指令 查看二进制文件
开发语言·单片机·嵌入式硬件·c#·proteus·微机原理·8088单板机
csdn_aspnet2 小时前
Java 霍尔分区算法(Hoare‘s Partition Algorithm)
java·开发语言·算法
霸道流氓气质2 小时前
通义灵码 IDEA 插件完全使用指南
java·ide·intellij-idea
诸葛务农2 小时前
道路行驶条件下电动汽车永磁电机的有效使用寿命及永磁体的失效和回收再利用(下)
java·开发语言·算法