Java后台处理Excel工具类

此处以SpringMVC框架,maven项目为例:
首先pom.xml中导入支持:

<!-- 处理excel表格需要的jar包  -->
	<dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.15-beta2</version>
   	</dependency>

工具类包含读取Excel里的数据,以及将读取到的数据生成自己所需的Excel表
工具类如下:

package com.mvc.example.ToolUtil;

import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import com.mvc.example.entity.User;

public class ExcelTool {
	//【读取Excel表中的数据并返回】
	public List<User> getDataFromExcel(InputStream input , String fileName)throws Exception{
		List<User> userData = new ArrayList<>();//【从Excel表拿到的数据】
		Workbook workbook = null;//【创建Excel工作薄】
		String fileType = fileName.substring(fileName.lastIndexOf("."));//【获取文件尾缀】
		if(fileType.equals(".xls")) {	//【Excel 2003版本】
			workbook = new HSSFWorkbook(input);
		}else if(fileType.equals(".xlsx")) {//【Excel 2007版本】
			workbook = new XSSFWorkbook(input);
		}
		if(workbook!=null) {
			Sheet sheet = workbook.getSheetAt(0);
			int excelRows = sheet.getPhysicalNumberOfRows();//【Excel表的行数】
			int excelCells = 0;//【Excel表的列数】
			if(excelRows >= 1 && sheet.getRow(0) != null) {
				excelCells = sheet.getRow(0).getPhysicalNumberOfCells();//【Excel表的列数】
			}
			for(int i=1;i<excelRows;i++) {//【遍历Excel表的行数,从第二行开始,标题行不用获取】
				Row row = sheet.getRow(i);//【第i行】
				if(row == null) {
					continue;
				}
				User user = new User();
				for(int j=0;j<excelCells;j++) {
					Cell cell = row.getCell(j);//【第i行的第j列数据】
					if(cell != null) {
						cell.setCellType(Cell.CELL_TYPE_STRING);//【设置Cell获取数据类型为String】
						switch(j) {
						case 0://【用户名】
							user.setUsername(cell.getStringCellValue());
							System.out.println("从Excel表中读到得用户名:"+cell.getStringCellValue());
							break;
						case 1://【真实姓名】
							user.setRealName(cell.getStringCellValue());
							break;
						case 2://【电话号码】
							String regPhone = "^((17[0-9])|(14[0-9])|(13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$";
							Pattern patPhone = Pattern.compile(regPhone);
							Matcher matPhone = patPhone.matcher(cell.getStringCellValue());
							if(matPhone.matches()) {// 【电话号码是否与正则表达式相匹配】
								user.setPhone(cell.getStringCellValue());
								user.setPassword(cell.getStringCellValue());//【初始密码】
							}else {
								user.setPhone("");//【电话号码】
								user.setPassword("123456789");//【初始密码】
							}
							break;
						case 3://【电子邮箱】
							String regEmail = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
							Pattern patEmail = Pattern.compile(regEmail);
							Matcher matEmail = patEmail.matcher(cell.getStringCellValue());
							if(matEmail.matches()) {// 【电子邮箱是否与正则表达式相匹配】
								user.setEmail(cell.getStringCellValue());
							}else {
								user.setEmail("");
							}
							break;
						case 4://【用户类型】
							if(cell.getStringCellValue().equals("管理员")) {
								user.setUserType("1");
							}else {
								user.setUserType("0");
							}
							break;
						case 5://【备注信息】
							user.setRemark(cell.getStringCellValue());
							user.setUserStatus("1");
							user.setGrants("0");
							user.setFingerMark("0");
							break;
						}
					}
				}
				userData.add(user);
			}
		}else {
			throw new Exception("创建Excel工作薄失败!请选择Excel文件!");
		}
		workbook.close();
		return userData;
	}
	
	//【将获取到的数据生成Excel文件】
	@SuppressWarnings("resource")
	public String writeDataToExcel(List<User> userData)throws Exception {
		Workbook workbook = new XSSFWorkbook();//【创建Excel工作薄】
		//【标题行抽出字段】
		String[] title = {"序号","登陆名", "真实姓名", "电话号码", "电子邮箱", "用户类型", "账号状态", "备注信息"};
		
		Sheet sheet = workbook.createSheet();
		
		//【获取表头行,并将标题赋值】
		Row titleRow = sheet.createRow(0);
		CellStyle style = workbook.createCellStyle();//【创建单元格,设置style居中,字体,单元格大小等】
		Cell cell = null;
		for(int i=0;i<title.length;i++) {//【把已经写好的标题行写入excel文件中】
			cell = titleRow.createCell(i);
			cell.setCellValue(title[i]);
			cell.setCellStyle(style);
		}
		//【把从数据库中取得的数据一一写入excel文件中】
		Row row = null;
		for(int n=0;n<userData.size();n++) {//【创建userData.size()行数据】
			row = sheet.createRow(n + 1);	//【数据写入从第二行开始】
			row.createCell(0).setCellValue(n + 1);//【把值一一写进单元格里】【设置第一列为自动递增的序号】
			row.createCell(1).setCellValue(userData.get(n).getUsername());
			row.createCell(2).setCellValue(userData.get(n).getRealName());
			row.createCell(3).setCellValue(userData.get(n).getPhone());
			row.createCell(4).setCellValue(userData.get(n).getEmail());
			if(userData.get(n).getUserType().equals("1")) {
				row.createCell(5).setCellValue("管理员");
			}else {
				row.createCell(5).setCellValue("普通用户");
			}
			if(userData.get(n).getUserStatus().equals("1")) {
				row.createCell(6).setCellValue("在用");
			}else {
				row.createCell(6).setCellValue("冻结");
			}
			row.createCell(7).setCellValue(userData.get(n).getRemark());
		}
		//【设置单元格宽度自适应,在此基础上把宽度调至1.5倍】
		for(int j=0;j<title.length;j++) {
			sheet.autoSizeColumn(j,true);
			sheet.setColumnWidth(j, sheet.getColumnWidth(j)*3/2);
		}
		//【获取配置文件中保存对应excel文件的路径,本地也可以直接写成F:excel/stuInfoExcel路径】
		String filePath = "C:\\CodeSoftware\\Repository\\";
		//【设置文件名】
		String fileName = "TestExcel.xlsx";
		
		
		OutputStream fileOut = new FileOutputStream(filePath + fileName);
		workbook.write(fileOut);
	    fileOut.close();
		
		return filePath + fileName;
	}
}

直接调用方法即可进行对应操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值