我是靠谱客的博主 慈祥星星,最近开发中收集的这篇文章主要介绍java解析或创建Excel文件使用Apach POI进行Excel文件的解析超大Excel文件读写,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

使用Apach POI进行Excel文件的解析

1、添加jar依赖包

2、Workbook(Excel文件)

2.1加载(解析)Excel文件

2.2创建Excel文件

3、Sheet工作簿

3.1获取Excel文件中的Sheet工作簿

3.2创建工作簿

4、Row(数据行)

4.1获取工作簿中的行数据(Row)

4.2创建数据行

5、Cell(单元格)

5.1获取行中的单元格数据(Cell)

5.2创建单元格

超大Excel文件读写

1.使用PIO写入

2.使用EasyExcel

2.1写入100w条数据

2.2读取100w条数据

2.3  POI 使用SXSSFWorkbook实现类和EasyExcel 写入100w数据时间对比

2.4 POI使用XSSFWorkbook实现类和使用SXSSFWorkbook实现类写入10w数据时间对比


在应用开发过程中,经常会需要Excel文件进行数据的导入或导出。通过Java语言实现此类需时,主流技术有Apache POI、JXL、Alibaba EasyExcel等;

核心类:Workbook类(Excel文件)、Sheet类(工作簿)、Row类(数据行)、Cell类(单元格)

使用Apach POI进行Excel文件的解析

1、添加jar依赖包

2、Workbook(Excel文件)

2.1加载(解析)Excel文件

try (
		// 输入流
		 FileInputStream in = new FileInputStream("D:\test\1627356554991.xlsx");
		// Excel文件对象
		Workbook workbook = new XSSFWorkbook(in)) {
			
		} catch (IOException e) {
			e.printStackTrace();
		}

2.2创建Excel文件

try (
        Workbook workbook = new XSSFWorkbook();
	    FileOutputStream out= new FileOutputStream("D:\test\abc.xlsx")) {
        
        // 将Workbook对象中包含的数据,通过输出流,写入值Excel文件
        workbook.write(out);
    } catch (IOException e) {
    e.printStackTrace();
    }

3、Sheet工作簿

3.1获取Excel文件中的Sheet工作簿

        // 通过下标获取第2个工作簿(第一个工作簿是0)
        Sheet sheet2 = workbook.getSheetAt(1);

3.2创建工作簿

        // 按照默认名称创建工作簿
        Sheet sheet = workbook.createSheet();
    
        // 按照自定义名称创建工作簿
        Sheet sheet1 = workbook.createSheet("工作簿1");

4、Row(数据行)

4.1获取工作簿中的行数据(Row)

        // 获取工作簿中的行数据(Row)
		int first = sheet2.getFirstRowNum();  // 获取首行下标
		
		int last = sheet2.getLastRowNum();    // 获取尾行下标
		
		Row row = sheet2.getRow(2);           // 获取指定行的数据
		
		for(Row row1 : sheet2) {              // 遍历所有行
			System.out.println(row1);
		}

4.2创建数据行

        Row row = sheet.createRow(0);

5、Cell(单元格)

5.1获取行中的单元格数据(Cell)

        // 获取行中的单元格数据(Cell)
		Cell cell = row.getCell(1);          // 获取指定单元格数据
		
        CellType type = cell.getCellType();  // 获取单元格类型

		for(Cell cell1 : row) {
			System.out.println(cell1);       // 遍历所有单元格
		}

5.2创建单元格

        Cell cell0 = row.createCell(0);  // 创建单元格

        // 创建单元格格式
	    // 获取格式编码
		DataFormat dataFormat = workbook.createDataFormat();
		Short formatCode = dataFormat.getFormat("yyyy-MM-dd HH:mm:ss");	
		CellStyle cellStyle = workbook.createCellStyle(); // 创建CellStyle单元格格式对象
		cellStyle.setDataFormat(formatCode); // 设置单元格格式编码

        // 通过设置CellStyle单元格格式对象,来正常显示日期
		cell0.setCellStyle(cellStyle); // 设置单元格格式
		cell0.setCellValue(new Date());

超大Excel文件读写

1.使用PIO写入

使用SXSSFWorkbook实现类进行写入

try (Workbook workbook = new SXSSFWorkbook(100);
				FileOutputStream fos = new FileOutputStream("c:\test\temp.xlsx")) {
    Sheet sheet1 = workbook.createSheet();

    for (int i = 0; i <= 1000000; i++) {
        Row row = sheet1.createRow(i);
        Cell cell0 = row.createCell(0);
        cell0.setCellValue(UUID.randomUUID().toString());

        Cell cell1 = row.createCell(1);
        cell1.setCellValue(new Date());
    }

    workbook.write(fos);
} catch (IOException e) {
    e.printStackTrace();
}

2.使用EasyExcel

2.1写入100w条数据

public class Demo {
	public static void main(String[] args) {
        // 写入100w
        EasyExcel.write("c:\test\run\easy.xlsx", Order.class)
                 .sheet("订单列表")
                 .doWrite(data());
    }
    
    // 创建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;
    }
}

2.2读取100w条数据

// 用于保存读取到的结果
List<Order> orderList = new ArrayList<Order>();
		
// 读取
EasyExcel.read("D:\test\run\easy100ws.xlsx",
			Order.class,
			new AnalysisEventListener<Order>() {
					
			@Override
			public void invoke(Order order, AnalysisContext arg1) {
				// 每读取带一条订单数据
				orderList.add(order);
			}
					
					
			@Override
			public void invokeHeadMap(java.util.Map<Integer,String> headMap, AnalysisContext context) {
			    // 读取表头元素
				System.out.println(headMap);
				super.invokeHeadMap(headMap, context);
				}
					
			@Override
			public void doAfterAllAnalysed(AnalysisContext arg0) {
				// 所有订单数据读取完毕
				System.out.println("Game over");
						
			}
}).sheet().doRead();
		
// 遍历
for(Order order : orderList) {
	System.out.println(order);
}

2.3  POI 使用SXSSFWorkbook实现类和EasyExcel 写入100w数据时间对比

使用EasyExce

使用SXSSFWorkbook实现类

2.4 POI使用XSSFWorkbook实现类和使用SXSSFWorkbook实现类写入10w数据时间对比

使用XSSFWorkbook实现类

使用SXSSFWorkbook实现类

 

 

最后

以上就是慈祥星星为你收集整理的java解析或创建Excel文件使用Apach POI进行Excel文件的解析超大Excel文件读写的全部内容,希望文章能够帮你解决java解析或创建Excel文件使用Apach POI进行Excel文件的解析超大Excel文件读写所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部