Excel文件解析

在应用程序的开发过程中,经常需要使用Excel文件来进行数据的导入或导出。所以,在通过Java语言实现此类需求的时候,往往会面临着Excel文件的解析(导入)或生出(导出)。

在Java技术生态圈中,可以进行Excel文件处理的主流技术包括:Apache POIAlibaba EasyExcel等。

今天我们就来分别介绍一下这两种技术如何来进行解析文件和生成文件。

Apache POI

Apache POI 是一种免费开源的跨平台的Java API ,在Apache POI 中我们常用的解析文件的类有 HSSF 和 XSSF。        

HSSF用于解析旧版本(*.xls) Excel文件,由于旧版本的Excel文件只能存在65535行数据,所前目前已经不常用。所以目前主要采用XSSF进行新版本(*xlsx)Excel文件的解析。

 POI技术所需的Jar包

 

WorkBook文件(Excel文件)

        Workbook接口代表一个Excel文件,用于创建或者加载(解析)Excel文件。常见的实现类是XSSFWorkbook。

Sheet(工作簿)

        Sheet代表Excel表格中的一个工作簿,通过Workbook来进行Sheet对象的获取或创建。

Row(数据行) 

        Row代表Sheet工作簿中一行,通过Sheet来进行Row对象的获取和创建。

Cell(单元格)

        Cell代表一个数据行中的一个单元格,通过Row来进行Cell对象的获取和创建。

Apache POI的创建流程与解析流程

创建流程:

1,创建一个Workbook ,通过输出流写入Excel 文件

//输出流
FileOutputStream out = new FileOutputStream("c:\\test\\2022.xlsx");

//Excel文件对象
Workbook workbook = new XSSFWorkbook();

//通过输出流进行写入
workbook.write(out);

//关闭资源


2,通过Workbook创建一个工作簿Sheet

Sheet sheet = workbook.creatSheet();

3,通过Sheet创建一个工作行Row

Row row = sheet.createRow();

4,通过Row创建一个单元格Cell

//在row这行中创建第一个单元格
Cell cell = Row.createCell(0);

解析流程

1创建一个Workbook ,通过输入流加载 (解析) Excel 文件

//输入流
FileInputStream in = new FileInputStream(c:\\test\\2022.xlsx);

//Excel文件对象
Workbook workbook = new XFFSWorkbook(in)

2,通过Workbook获取工作簿Sheet

//按照工作簿下标获取Sheet
Sheet sheet01 = workbook.getSheetAt(0);

//按照工作簿名称获取Sheet
Sheet sheet02 = workbook.getSheet("Sheet0");

3,通过Sheet获取行Row

//获取首行下标
int first = sheet.getFirstRowNum();

//获取尾行下标
int last = sheet.getLastRowNum();

//根据下标获取指定行
Row row = sheet.getRow(0);

4,通过Rowt获取单元格Cell

//根据下表获取单元格
Cell cell = row.getCell(1);

//获取单元格类型
CellType type = cell.getCellType();

//设置单元格样式
//创建格式编码值
DataFormat dataFormat = workbook.createDataFormat();
short dateFormatCode = dataFormat.getFormat("yyyy年MM月dd日 HH时mm分ss秒");

//创建日期格式对象
CellStyle dataCellStyle = workbook.createCellStyle();
dataCellStyle.setDataFormat(dateFormatCode);

//创建单元格,并未单元格设置格式			
Cell cell = row.createCell(2);//日期
cell.setCellStyle(dataCellStyle);
cell.setCellValue(new Date());

部分代码实现如下

public class Demo {
	public static void main(String[] args) {
		try (FileOutputStream out = new FileOutputStream("C:\\POI\\data.xlsx");
				Workbook workbook = new XSSFWorkbook()) {
			//创建工作簿
			Sheet sheet01 = workbook.createSheet("2020数据列表");
			Sheet sheet02 = workbook.createSheet("2021数据列表");
			Sheet sheet03 = workbook.createSheet("2022数据列表");
			
			//创建行
			Row row = sheet01.createRow(0);
			
			//创建单元格
			Cell cell0 = row.createCell(0);
			cell0.setCellValue(UUID.randomUUID().toString());
			Cell cell1 = row.createCell(1);
			cell1.setCellValue(Math.random() * 10000);
			Cell cell2 = row.createCell(2);
			cell2.setCellValue(LocalDateTime.now());
			
			//将workbook对象中包含的数据,通过输出流,写入至Excel文件
			workbook.write(out);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

Alibaba EasyExcel

当我们需要读取或者写入一个超大Excel文件时,Apache POI技术已经无法快速的对文件进行读取和写入,此时我们需要使用Alibaba EasyExcel技术对文件进行操作,下来我们看一组两种技术对大文件进行读写的CPU和内存占用的对比图。

 

 

 下面我们来看一下EasyExcel的部分代码实现

public class Demo {
	public static void main(String[] args) {
        long begin = System.currentTimeMillis();
		// 写入100w
        EasyExcel.write("E:\\easyExcel\\easy.xlsx", Order.class)
                 .sheet("订单列表")
                 .doWrite(data());
        long end = System.currentTimeMillis();
        
        System.out.println("共耗时" + (end - begin) + "毫秒");
    }
    
    // 创建100w条订单数据
    private static List<Order> data() {
        List<Order> list = new ArrayList<Order>();
        for (int i = 0; i < 1000000; i++) {
            list.add(new Order());
        }
        return list;
    }
}

 

  • 26
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
你好!对于Spring Boot项目中的Excel文件解析入库操作,你可以按照以下步骤来实现: 1. 首先,确保你的项目中已经引入了相关的依赖。你可以在 `pom.xml` 文件中添加以下依赖: ```xml <dependencies> <!-- Spring Boot Starter --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <!-- Apache POI for Excel processing --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> </dependencies> ``` 2. 创建一个用于解析Excel文件的工具类。你可以在这个类中编写解析Excel文件的代码。这里使用 Apache POI 来实现。下面是一个简单的示例代码: ```java import org.apache.poi.ss.usermodel.*; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class ExcelParser { public static List<List<String>> parseExcelFile(MultipartFile file) throws IOException { Workbook workbook = WorkbookFactory.create(file.getInputStream()); Sheet sheet = workbook.getSheetAt(0); Iterator<Row> rowIterator = sheet.iterator(); List<List<String>> data = new ArrayList<>(); while (rowIterator.hasNext()) { Row row = rowIterator.next(); Iterator<Cell> cellIterator = row.cellIterator(); List<String> rowData = new ArrayList<>(); while (cellIterator.hasNext()) { Cell cell = cellIterator.next(); String cellValue = ""; switch (cell.getCellType()) { case STRING: cellValue = cell.getStringCellValue(); break; case NUMERIC: cellValue = String.valueOf(cell.getNumericCellValue()); break; // 处理其他类型的单元格,根据需要进行扩展 } rowData.add(cellValue); } data.add(rowData); } workbook.close(); return data; } } ``` 3. 创建一个控制器类,在其中接收Excel文件并调用工具类进行解析和入库操作。这里使用Spring MVC来处理请求和响应。示例代码如下: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.util.List; @RestController @RequestMapping("/api") public class ExcelController { @Autowired private ExcelService excelService; @PostMapping("/upload") public void uploadExcelFile(@RequestParam("file") MultipartFile file) throws IOException { List<List<String>> data = ExcelParser.parseExcelFile(file); excelService.saveData(data); } } ``` 4. 创建一个服务类,在其中实现将解析后的数据存入数据库的逻辑。你可以根据自己的需求选择合适的数据库操作框架(如Spring Data JPA、MyBatis等)。示例代码如下: ```java import org.springframework.stereotype.Service; import java.util.List; @Service public class ExcelService { // 注入你的数据访问层对象 public void saveData(List<List<String>> data) { // 解析并保存数据到数据库 } } ``` 这样,你就完成了Spring Boot项目中Excel文件解析入库的基本操作。你可以根据实际需求进行扩展和修改。希望对你有所帮助!如果你还有其他问题,可以继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值