运用java对Excel文件进行解析与创建

一、引言

        在使用java开发应用程序的时候,经常会解析Excel文件,进行数据的写入(导入)与读取(导出)操作,在java中自带的jar包中并没有提供完成此项需求的类库,所以我们需要通过第三方的jar包导入来实现这类需求。

        在我们常见的第三方jar包有Apache Poi , Alibaba EasyExcel,JXL,Apache Poi是第三方的免费跨平台开源用java编写的提供给office Excel数据操作的类库,本篇博客使用Poi对Excel文件进行操作。

        在POI中提供了Excel文件的两种实现类 ,HSSFWrorBook和XSSFWorkBook,前者适用于Excel文件的老版本,后缀名为“.xls”,而后者适用于后缀名为“.xlsx”。

二、Excel文件的结构

WorkBook:Excel文件
Sheet:工作簿对象
Row:数据行
Cell:单元格

三、Excel文件的解析

        创建一个WookBook类的实例化对象,与此同时创建输入流对文件进行文件的读取,按照文件的结构逐层读取。

	//方式1
		try (Workbook workbook = new XSSFWorkbook();
				
				FileInputStream in = new FileInputStream("D:\\test\\1627356552686.xlsx")) {
		} catch (IOException e) {
			
			e.printStackTrace();
		}
		
		try (//方式2 通过匿名子类
		 Workbook workbook1 = new XSSFWorkbook(new FileInputStream("D:\\test\\1627356552686.xlsx"))) {
		} catch (IOException e) {
		
			e.printStackTrace();
		}

 1.先获取文件的工作簿(Sheet):


//获取Sheet的两种方式

//根据名称获取
Sheet sheet = workbook.getSheet("yyyy");

//根据下标获取第一个工作簿
Sheet sheet = workbook.getSheetAt(0);

2.获取当前工作簿中的数据行:

我们可以通过foreach循环和for循环遍历,foreach可以遍历所有行,for循环可以遍历部分行


//遍历所有行
for(Row row : sheet) {
    System.out.println(row);
}

//遍历部分行

for (int i = 1; i <= sheet.getLastRowNum(); i++) {
    Row row = sheet.getRow(i);
    System.out.println(row);
}

3.获取当前行的每个单元格

Cell cell = row.getCell(0); //得到第一个单元格

cell.getNumericCellValue() //得到第一个单元格的内容

也可以使用foreach进行单元格的遍历

for(Cell cell : row) {

}

4.设置单元格的格式

使用DataFormat创建单元格的格式,获取格式编码,然后创建CellStyle单元格格式的对象。

         //创建单元格格式
		 DataFormat dataFormat = workbook.createDataFormat();

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




         cell3.setCellStyle(cellStyle);  //设置单元格格式
				 
		 cell3.setCellValue(new Date()); //设置日期 = LocalDateTime.now()

四、Excel文件的写入

       1.写入操作时,先创建WorkBook对象,伴随着输出流FileOutputStream的使用,用来决定写入到哪一个文件路径。

        2.通过WorkBook来创建工作簿(Sheet)对象



Sheet sheet1 = workbook.createSheet();

//也可以自定义工作簿名称

Sheet sheet2 = workbook.createSheet("y");

3.创建数据行

Row row = sheet.createRow(0);  //创建当前工作簿的第一行

4.创建单元格并且写入内容

Cell cell = row.createCell(0); //创建第一个单元格


//设置当前单元格的格式
cell.setCellValue(UUID.randomUUID().toString());

5.设置单元格格式

// 创建单元格样式
DataFormat dataFormat = workbook.createDataFormat();
Short formatCode = dataFormat.getFormat("yyyy-MM-dd HH:mm:ss");
CellStyle cellStyle = workbook.createCellStyle();
cellStyle.setDataFormat(formatCode);



// 为当前行创建单元格
Cell cell1 = row.createCell(1);
cell1.setCellStyle(cellStyle); // 设置单元格样式
cell1.setCellValue(new Date()); // 保存当前日期时间至本单元格

//设置单元格的水平对齐类型。 此时水平居中
cellStyle.setAlignment(HorizontalAlignment.CENTER);

// 设置单元格的垂直对齐类型。 此时垂直靠底边
cellStyle.setVerticalAlignment(VerticalAlignment.BOTTOM);

6.通过输入流,写入excel文件

使用的是WorkBook对象的write!

  workbook.write(out);

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值