java 实现excel中的数据导入到数据库的功能

来源:互联网 发布:java怎么执行cmd命令 编辑:程序博客网 时间:2024/05/18 02:13
java web项目导入excel获取数据,是实用频率非常高的功能,通过做了几个这样的功能之后,现将此功能总结出了,为了以后自己方便使用,也为大家实现此功能做一个参考.
项目框架
1,后台:spring+springmvc+mybatis
2,前台: bootstrap+jquery+ajax
3,项目管理:maven
说明.excel处理函数需要引入poi的jar包,在pom.xml引入一下代码
    <!-- POI -->  <dependency>      <groupId>org.apache.poi</groupId>      <artifactId>poi</artifactId>      <version>3.8</version>      <exclusions>          <exclusion>              <artifactId>commons-codec</artifactId>              <groupId>commons-codec</groupId>          </exclusion>      </exclusions>  </dependency>  <dependency>      <groupId>org.apache.poi</groupId>      <artifactId>poi-ooxml</artifactId>      <version>3.8</version>  </dependency> 


别的框架大体上也是可以的,只需稍微调整,如有问题,大家可留言讨论
实现的功能说明:将用户信息(姓名,性别,年龄)通过excel上传,并保存到数据库
具体代码如下
1,前台html代码
<form enctype="multipart/form-data" id="batchUpload"  action="user/upload" method="post" class="form-horizontal">       <button class="btn btn-success btn-xs" id="uploadEventBtn" style="height:26px;"  type="button" >选择文件</button>      <input type="file" name="file"  style="width:0px;height:0px;" id="uploadEventFile">      <input id="uploadEventPath"  disabled="disabled"  type="text" placeholder="请选择excel表" style="border: 1px solid #e6e6e6; height: 26px;width: 200px;" >                                          </form>  <button type="button" class="btn btn-success btn-sm"  onclick="user.uploadBtn()" >上传</button>  



前台页面效果

excel内容展示

2,JS代码

var User = function(){            this.init = function(){                   //模拟上传excel           $("#uploadEventBtn").unbind("click").bind("click",function(){               $("#uploadEventFile").click();           });           $("#uploadEventFile").bind("change",function(){               $("#uploadEventPath").attr("value",$("#uploadEventFile").val());           });               };      //点击上传按钮      this.uploadBtn = function(){          var uploadEventFile = $("#uploadEventFile").val();          if(uploadEventFile == ''){              alert("请选择excel,再上传");          }else if(uploadEventFile.lastIndexOf(".xls")<0){//可判断以.xls和.xlsx结尾的excel              alert("只能上传Excel文件");          }else{              var url =  '/user/upload/';              var formData = new FormData($('form')[0]);              user.sendAjaxRequest(url,'POST',formData);          }      };            this.sendAjaxRequest = function(url,type,data){          $.ajax({              url : url,              type : type,              data : data,              success : function(result) {                  alert( result);              },              error : function() {                  alert( "excel上传失败");              },              cache : false,              contentType : false,              processData : false          });      };  }          var user;  $(function(){      user = new User();      user.init();  });  



3,domon层用户的实体类



/**  * @author  李光光(编码小王子)* @date    2016年11月7日 下午2:57:03  * @version 1.0   */  public class User {      private  String name;      private String sex;      private String age;      public String getName() {          return name;      }      public void setName(String name) {          this.name = name;      }      public String getSex() {          return sex;      }      public void setSex(String sex) {          this.sex = sex;      }      public String getAge() {          return age;      }      public void setAge(String age) {          this.age = age;      }                }  




4,controller层代码
@Controller  @RequestMapping("/user")  public class UserController{            @Autowired      private UserService  userService;            @RequestMapping(value="/upload",method = RequestMethod.POST)      @ResponseBody      public String  upload(@RequestParam(value="file",required = false)MultipartFile file,HttpServletRequest request, HttpServletResponse response){          Sring result = userService.readExcelFile(file);          return result;      }  }  



5,service层代码
1),service层接口
public interface UserService {        /**     * 读取excel中的数据,生成list     */      String readExcelFile( MultipartFile file);    }  



2),servic实现层代码

@Service  public class MeetingRoomServiceImpl implements MeetingRoomService {    @Override      public String readExcelFile(MultipartFile file) {          String result ="";          //创建处理EXCEL的类          ReadExcel readExcel=new ReadExcel();          //解析excel,获取上传的事件单          List<User> useList = readExcel.getExcelInfo(file);          //至此已经将excel中的数据转换到list里面了,接下来就可以操作list,可以进行保存到数据库,或者其他操作,          //和你具体业务有关,这里不做具体的示范          if(useList != null && !useList.isEmpty()){              result = "上传成功";          }else{              result = "上传失败";          }          return result;      }      }  




3),excel处理函数

/**  * @author  李光光(编码小王子)* @date    2016年10月17日 下午2:19:39  * @version 1.0   */  public class ReadExcel {      //总行数      private int totalRows = 0;       //总条数      private int totalCells = 0;       //错误信息接收器      private String errorMsg;      //构造方法      public ReadExcel(){}      //获取总行数      public int getTotalRows()  { return totalRows;}       //获取总列数      public int getTotalCells() {  return totalCells;}       //获取错误信息      public String getErrorInfo() { return errorMsg; }           /**   * 读EXCEL文件,获取信息集合   * @param fielName   * @return   */      public List<User> getExcelInfo(MultipartFile mFile) {          String fileName = mFile.getOriginalFilename();//获取文件名          try {              if (!validateExcel(fileName)) {// 验证文件名是否合格                  return null;              }              boolean isExcel2003 = true;// 根据文件名判断文件是2003版本还是2007版本              if (isExcel2007(fileName)) {                  isExcel2003 = false;              }              List<User> userList = createExcel(mFile.getInputStream(), isExcel2003);          } catch (Exception e) {              e.printStackTrace();          }          return userList;      }       /**   * 根据excel里面的内容读取客户信息   * @param is 输入流   * @param isExcel2003 excel是2003还是2007版本   * @return   * @throws IOException   */      public List<User> createExcel(InputStream is, boolean isExcel2003) {          try{              Workbook wb = null;              if (isExcel2003) {// 当excel是2003时,创建excel2003                  wb = new HSSFWorkbook(is);              } else {// 当excel是2007时,创建excel2007                  wb = new XSSFWorkbook(is);              }              List<User> userList = readExcelValue(wb);// 读取Excel里面客户的信息          } catch (IOException e) {              e.printStackTrace();          }          return userList;      }       /**   * 读取Excel里面客户的信息   * @param wb   * @return   */      private List<User> readExcelValue(Workbook wb) {          // 得到第一个shell          Sheet sheet = wb.getSheetAt(0);          // 得到Excel的行数          this.totalRows = sheet.getPhysicalNumberOfRows();          // 得到Excel的列数(前提是有行数)          if (totalRows > 1 && sheet.getRow(0) != null) {              this.totalCells = sheet.getRow(0).getPhysicalNumberOfCells();          }          List<User> userList = new ArrayList<User>();          // 循环Excel行数          for (int r = 1; r < totalRows; r++) {              Row row = sheet.getRow(r);              if (row == null){                  continue;              }              User user = new User();              // 循环Excel的列              for (int c = 0; c < this.totalCells; c++) {                  Cell cell = row.getCell(c);                  if (null != cell) {                      if (c == 0) {                          //如果是纯数字,比如你写的是25,cell.getNumericCellValue()获得是25.0,通过截取字符串去掉.0获得25                          if(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){                              String name = String.valueOf(cell.getNumericCellValue());                              user.setName(name.substring(0, name.length()-2>0?name.length()-2:1));//名称                          }else{                              user.setName(cell.getStringCellValue());//名称                          }                      } else if (c == 1) {                          if(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){                              String sex = String.valueOf(cell.getNumericCellValue());                              user.setSex(sex.substring(0, sex.length()-2>0?sex.length()-2:1));//性别                          }else{                              user.setSex(cell.getStringCellValue());//性别                          }                      } else if (c == 2){                          if(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){                              String age = String.valueOf(cell.getNumericCellValue());                              user.setAge(age.substring(0, age.length()-2>0?age.length()-2:1));//年龄                          }else{                              user.setAge(cell.getStringCellValue());//年龄                          }                      }                  }              }              // 添加到list              userList.add(user);          }          return userList;      }   
    /**     * 验证EXCEL文件     *       * @param filePath     * @return     */      public boolean validateExcel(String filePath) {          if (filePath == null || !(isExcel2003(filePath) || isExcel2007(filePath))) {              errorMsg = "文件名不是excel格式";              return false;          }          return true;      }            // @描述:是否是2003的excel,返回true是2003       public static boolean isExcel2003(String filePath)  {            return filePath.matches("^.+\\.(?i)(xls)$");        }            //@描述:是否是2007的excel,返回true是2007       public static boolean isExcel2007(String filePath)  {            return filePath.matches("^.+\\.(?i)(xlsx)$");        }   } 


阅读全文
0 0
原创粉丝点击