直接上代码,注释写的很清楚
需要的jar包下载地址
https://download.csdn.net/download/yanpengfeil/10611873
package com.my.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
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 org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class ImportExcel {
/**
* 思路解析:
* @param1 request 不解释
* @param2 dataList 要存入数据库字段 以英文 ; 分隔
* @param3 Excelpath excel路径
* 首先将excel表格上传至服务器
* 将服务器返回的路径、以及要存入数据库的字段传入此方法
* 根据数据库规定来写代码
*
* */
public String ImportExcelM(HttpServletRequest request,String dataList,String Excelpath){
String tableName="";//存入数据库的表名
String vre="0";
Configuration cfg=new Configuration().configure();
SessionFactory sessionFactory = cfg.buildSessionFactory();
Session sess = sessionFactory.openSession();
//获取项目绝对路径
String projectPath = request.getSession().getServletContext().getRealPath("");
//转换 /
String execelFile=Excelpath;
String[] eF= execelFile.split("/");
String execelFile1="";
for(int r=4;r<eF.length-1;r++){
eF[r]=eF[r]+"\\";
execelFile1=execelFile1+eF[r];
}
execelFile1=execelFile1+eF[eF.length-1];
String[] dm1=dataList.split(";");
int jyzs = dm1.length;
try {
try {
String hql="";
Query qu=null;
// 构造 Workbook 对象,execelFile 是传入文件路径(获得Excel工作区)
Workbook book = null;
try {
// Excel 2007获取方法
book = new XSSFWorkbook(new FileInputStream(projectPath+"//"+execelFile1));
} catch (Exception ex) {
// Excel 2003获取方法
book = new HSSFWorkbook(new FileInputStream(projectPath+"//"+execelFile1));
}
// 读取表格的第一个sheet页
Sheet sheet = book.getSheetAt(0);
// 定义 row、cell
Row row;
String cell;
// 总共有多少行,从0开始
int totalRows = sheet.getLastRowNum() ;
if (totalRows==0) {
throw new Exception("文档中没有可导入数据");
}
// 循环输出表格中的内容,首先循环取出行,再根据行循环取出列
for (int i = 1; i <= totalRows; i++) {
Transaction tran= sess.beginTransaction();
row = sheet.getRow(i);
// 处理空行
if(row == null){
continue ;
}
// 总共有多少列,从0开始
int totalCells = row.getLastCellNum() ;
/**
* 实际应该是对应数据课的实体类
* */
UserInfo U = new UserInfo();
java.util.Date dateDate = new Date();
SimpleDateFormat formatter1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String dateString1 = formatter1.format(dateDate);
int e = 0;
for (int j = 0; j < totalCells; j++) {
switch (dm1[e]) {
case "xingm": //姓名
Cell cell1 = row.getCell(j);
String xingm="";
try{
xingm = cell1.toString();
if(xingm.equals("") || xingm == null){
vre="5=成功导入"+(i-1)+"条从业人员信息,其余信息导入失败,原因:没有填写人员《姓名》信息";
throw new Exception("成功导入"+(i-1)+"条从业人员信息,其余信息导入失败,原因:没有填写《姓名》信息");
}else{
U.setXingm(xingm.replace(" ", ""));
}
}catch(Exception e2){
vre="5=成功导入"+(i-1)+"条从业人员信息,其余信息导入失败,原因:没有填写人员《姓名》信息";
throw new Exception("成功导入"+(i-1)+"条从业人员信息,其余信息导入失败,原因:没有填写《姓名》信息");
}
break;
case "mzzw": //民族
Cell cell2 = row.getCell(j);
try{
if(row.getCell(j).toString().equals("")||row.getCell(j).toString()==null){
vre="成功导入"+(i-1)+"条从业人员信息,其余信息导入失败,原因:没有填写民族信息";
throw new Exception("成功导入"+(i-1)+"条从业人员信息,其余信息导入失败,原因:没有填写民族信息");
}else{
String mzzw = findMz(cell2.toString().replace(" ", ""));
if(mzzw.equals("")){
vre="成功导入"+(i-1)+"条从业人员信息,其余信息导入失败,原因:没有填写民族信息";
throw new Exception("成功导入"+(i-1)+"条从业人员信息,其余信息导入失败,原因:没有填写民族信息");
}else{
U.setMzzw(mzzw);
}
}
}catch(Exception e2){
vre="成功导入"+(i-1)+"条从业人员信息,其余信息导入失败,原因:导入民族信息失败";
throw new Exception("成功导入"+(i-1)+"条从业人员信息,其余信息导入失败,原因:导入民族信息失败");
}
break;
case "sfzh": //sfzh
String sfzh="";
try{
sfzh=row.getCell(j).toString();
if(row.getCell(j).toString().equals("")||row.getCell(j).toString()==null){
vre="3=成功导入"+(i-1)+"条从业人员信息,其余信息导入失败,原因:没有填写身份证信息";
throw new Exception("成功导入"+(i-1)+"条从业人员信息,其余信息导入失败,原因:没有填写《身份证》信息");
}else{
row.getCell(j).toString().replace(" ", "");
}
}catch(Exception e2){
vre="3=成功导入"+(i-1)+"条从业人员信息,其余信息导入失败,原因:没有填写身份证信息";
throw new Exception("成功导入"+(i-1)+"条从业人员信息,其余信息导入失败,原因:没有填写《身份证》信息");
}
if (sfzh.length()==15){
U.setSfzh(sfzh);
}else if(sfzh.length()==18){
char charAt = sfzh.charAt(17);
String valueOf = String.valueOf(charAt);
if(valueOf.matches("^[0-9]*[1-9][0-9]*$")){
U.setSfzh(sfzh);
}else if(valueOf.toUpperCase().equals("X")){
U.setSfzh(sfzh.toUpperCase());
}else{
vre = "3=成功导入"+(i-1)+"条从业人员信息,其余信息导入失败,原因:证件号码格式不正确!";
throw new Exception("成功导入"+(i-1)+"条从业人员信息,其余信息导入失败,原因:证件号码格式不正确!");
}
}else{
vre = "3=成功导入"+(i-1)+"条从业人员信息,其余信息导入失败,原因:证件号码位数不正确!";
throw new Exception("成功导入"+(i-1)+"条从业人员信息,其余信息导入失败,原因:证件号码位数不正确!");
}
if(Integer.parseInt(sfzh.substring(16,17)) % 2 != 0){
U.setXbdm("01");
U.setXbzw("男");
}
else{
U.setXbdm("02");
U.setXbzw("女");
}
Date myDate = new Date();// 得到系统日期然后就可以得到时间了:
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String dateString = formatter.format(myDate);
int nianling = Integer.parseInt(dateString.split("-")[0]) - Integer.parseInt(sfzh.substring(6,10)) - 1;
if((Integer.parseInt(dateString.split("-")[1]) - Integer.parseInt(sfzh.substring(10,12)))>=0){
if((Integer.parseInt(dateString.split("-")[2]) - Integer.parseInt(sfzh.substring(12,14))) >= 0){
nianling = nianling + 1;
}
}
U.setCsrq(sfzh.substring(6,10)+"年"+sfzh.substring(10,12)+"月"+sfzh.substring(12,14)+"日");
break;
}
e++;
}
sess.save(U);
if(i%10000==0){ //每一千条刷新并写入数据库
sess.flush();
sess.clear();
}
tran.commit();
}
vre="1";
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}finally{
if(sess != null)
sess.close();
}
DeleteFolder(projectPath+"/zczwxfile1");
return vre;
}
/**
* 根据路径删除指定的目录或文件,无论存在与否
*@param sPath 要删除的目录或文件
*@return 删除成功返回 true,否则返回 false。
*/
public static boolean DeleteFolder(String sPath) {
boolean flag = false;
File file = new File(sPath);
// 判断目录或文件是否存在
if (!file.exists()) { // 不存在返回 false
return flag;
} else {
// 判断是否为文件
if (file.isFile()) { // 为文件时调用删除文件方法
return deleteFile(sPath);
} else { // 为目录时调用删除目录方法
return deleteDirectory(sPath);
}
}
}
/**
* 删除单个文件
* @param sPath 被删除文件的文件名
* @return 单个文件删除成功返回true,否则返回false
*/
public static boolean deleteFile(String sPath) {
boolean flag = false;
File file = new File(sPath);
// 路径为文件且不为空则进行删除
if (file.isFile() && file.exists()) {
file.delete();
flag = true;
}
return flag;
}
/**
* 删除目录(文件夹)以及目录下的文件
* @param sPath 被删除目录的文件路径
* @return 目录删除成功返回true,否则返回false
*/
public static boolean deleteDirectory(String sPath) {
//如果sPath不以文件分隔符结尾,自动添加文件分隔符
if (!sPath.endsWith(File.separator)) {
sPath = sPath + File.separator;
}
File dirFile = new File(sPath);
//如果dir对应的文件不存在,或者不是一个目录,则退出
if (!dirFile.exists() || !dirFile.isDirectory()) {
return false;
}
boolean flag = true;
//删除文件夹下的所有文件(包括子目录)
File[] files = dirFile.listFiles();
for (int i = 0; i < files.length; i++) {
//删除子文件
if (files[i].isFile()) {
flag = deleteFile(files[i].getAbsolutePath());
if (!flag) break;
} //删除子目录
else {
flag = deleteDirectory(files[i].getAbsolutePath());
if (!flag) break;
}
}
if (!flag) return false;
//删除当前目录
if (dirFile.delete()) {
return true;
} else {
return false;
}
}
public static String findMz(String str){
String info="";
int index=0;
String [] arr={"汉族","蒙古族","回族","维吾尔族","苗族","彝族","壮族","布依族","朝鲜族","满族","瑶族","侗族","白族","土家族","哈尼族","哈萨克族","傣族","傈僳族","佤族","畲族","高山族","拉祜族","水族","东乡族","纳西族","景颇族","柯尔克孜族","土族","达斡尔族","仫佬族","羌族","布朗族","撒拉族","毛难族","仡佬族","锡伯族","阿昌族","普米族","塔吉克族","怒族","乌孜别克族","乌孜别克族","俄罗斯族","鄂温克族","德昂族","保安族","裕固族","塔塔尔族","京族","独龙族","鄂伦春族","赫哲族","门巴族","珞巴族","基诺族"};
for (int i = 0; i < arr.length; i++) {
String s=arr[i];
if(str.equals(arr[i])){
index=i+1;
if(index < 10){
info = index+"";
return "0"+info;
}else{
return info = index+"";
}
}else{
info ="";
}
}
return info;
}
}