我是靠谱客的博主 慈祥星星,这篇文章主要介绍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内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部