POI Excel读取以及导入导出

POI 对Excel读取和excel导入导出

poi分为2003版(.xls文件)和2007版(.xlsx文件),我只使用过xlsx的,所以只介绍07版Excel的基础操作。
阿里巴巴还有一个开源框架EasyExcel,但是我没有用过,各方面应该都更好。
EasyExcel是阿里巴巴开源的一个excel处理框架,以使用简单,节省内存著称,EasyExcel能大大减少占用内存的主要原因是在解析Excel时没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析。

一、首先导入jar包

<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi</artifactId>
	<version>5.2.2</version>
</dependency>
<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi-ooxml</artifactId>
	<version>5.2.2</version>
</dependency>

二、对Excel的一些基础操作

写入的基础操作

Workbook wb = new XSSFWorkbook();// 创建excel工作簿

Sheet sheet = wb.creaetShheet();// 在工作簿上创建表格-无参
wb.creaetShheet("表格1");// 有参-创建表格的表名

Row row = wb.createRow(row); //创建表格上的第row行 从0开始
Cell cell = row.createCell(col); // 创建row行上的第col列创建一个单元格,col要求 0 <= col <= 16384
cell.setCellValue("内容");// 为单元格赋值-有多种类型可选,我一般都是传string类型

读取操作

Sheet sheet = workbook.getSheet("表格1");
Row row = shhet.getRow(row);
Cell cell = row.getCell(col);
DataFormatter df = new DataFormatter();
String value = df.formatCellValue(cell);//获取cell中的值,不管什么类型都会转为String类型

合并单元格

CellRangeAddress addressCode = new CellRangeAddress (row, endRow, col, endCol);//创建一个合并单元个,row行到endRow行,col列到endCol列
sheet.addMergedRegion(addressCode );//合并单元格添加到具体的工作表中

样式

XSSFCellstyle style xssfWorkbook.createCellstyle();
style.setAlignment(HorizontalAlignment.CENTER);// 设置对水平齐方式
style.setverticalAlignment(VerticalAlignment.CENTER);// 设置垂直对齐方式
Font font xssfWorkbook.createFont(); //创建字体样式
font.setFontName("微软雅黑")// 设置字体名字 默认是 Calibri.
font.setColor(IndexedColors.RED.getIndex());// 设置字体颜色
font.setBold(true);// 设置粗体
style.setFont(font);
style.setBorderBottom(Borderstyle.THIN); // 设置边框,多种可选
style.setBorderLeft(Borderstyle.THIN);
style.setBorderRight(Borderstyle.THIN);
style.setBorderTop(Borderstyle.THIN);

三、导入已经导出

导入-读取上传的Excel文件

public void importExcel(MultipartFile file,String uuid){
	try(XSSFWorkbook workbook new XSSFWorkbook(file.getInputstream())){
		// 具体操作
	catch (IOException e){
		e.printstackTrace();
		log.error(e.getMessage());
	}
}

导出-从数据库中拿对应的数据按格式输出

public void exportExcel(HttpServletResponse response,String id) {
		try (ServletOutputstream out =  response.getOutputstream())
			String fileName URLEncoder.encode("文件名"+".xlsx",enc:"UTF-8");// 设置文件名,改UTF-8编码,防止中文名字乱码
			response.setContentType(type:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8");
			response.setHeader(name:"Content-Disposition","attachment filename="+fileName);
			XSSFWorkbook wb = new XSSFWorkbook ();
			// 对文件内容进行输出
			wb.write(out);
			wb.close();
		} catch (IOException e){
			e.printstackTrace();
			log.error("导出失败");
		}
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值