栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java解析或创建Excel文件

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java解析或创建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 data() {
        List list = new ArrayList();
        for (int i = 0; i < 1000000; i++) {
            list.add(new Order());
        }
        return list;
    }
}

2.2读取100w条数据
// 用于保存读取到的结果
List orderList = new ArrayList();
		
// 读取
EasyExcel.read("D:\test\run\easy100ws.xlsx",
			Order.class,
			new AnalysisEventListener() {
					
			@Override
			public void invoke(Order order, AnalysisContext arg1) {
				// 每读取带一条订单数据
				orderList.add(order);
			}
					
					
			@Override
			public void invokeHeadMap(java.util.Map 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实现类

 

 

暑期编程PK赛 得CSDN机械键盘等精美礼品!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1016753.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号