Java Excel 通用导入

来源:互联网 发布:c 网页中数据写入xml 编辑:程序博客网 时间:2024/06/14 13:27
万分抱歉,因为最近项目上线 通用导入篇章现在才写

废话不多说,上代码!!!

<!-- 加载 multipartResolver -->  <beans:bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">      <beans:property name="maxUploadSize" value="32505856" />      <beans:property name="maxInMemorySize" value="4096" />  </beans:bean>  
1.在spring配置文件种加载解析器(想具体了解的可以自己百度一下)下面我们页面上传文档需要这个bean去解析


<form id="from1" action="${webroot}/system/sysResource/improtExcel"  method="post"  enctype="multipart/form-data" >          <input type="file" id="uploadFile" name="uploadFile"/>  </from>     <script type="text/javascript">  //Excel文件导入到数据库中     function importEmp(){        //检验导入的文件是否为Excel文件         var uploadFile = document.getElementById("uploadFile").value;        if(uploadFile == null || uploadFile == ''){            alert("请选择要上传的Excel文件");            return;        }else{            var fileExtend = uploadFile.substring(uploadFile.lastIndexOf('.')).toLowerCase();             if(fileExtend == '.xls'){            }else{                alert("文件格式需为'.xls'格式");                return;            }        }        //提交表单         document.getElementById("from1").submit();    }     </script>  

2.页面和js提交动作


@ResponseBody  @RequestMapping(value = "/improtExcel", method = { RequestMethod.POST })  public JsonResult ImprotExcel(@RequestParam(value="uploadFile")MultipartFile file) {      SysResources  obj = new SysResources ();      try {                    List<Map<String, Object>> list = ImportExcelUntil.importExcel(file, obj);                    System.out.println(list);      } catch (Exception e) {          e.printStackTrace();      }            //批量插入数据库      JsonResult jr = JsonResult.newInstance();      String ret = null;      String ret = sysResourceService.insert(list);      return ret == null ? jr.declareSuccess() : jr.declareFailure(ret);  }  
3.controller 代码

package com.xiong.weixin.untils;    import java.lang.reflect.Field;  import java.util.ArrayList;  import java.util.HashMap;  import java.util.List;  import java.util.Map;    import org.apache.commons.lang3.reflect.FieldUtils;  import org.apache.poi.hssf.usermodel.HSSFCell;  import org.apache.poi.hssf.usermodel.HSSFRow;  import org.apache.poi.hssf.usermodel.HSSFSheet;  import org.apache.poi.hssf.usermodel.HSSFWorkbook;  import org.apache.poi.poifs.filesystem.POIFSFileSystem;  import org.springframework.web.multipart.MultipartFile;  /**  *   * @author XiongYC  * @date 2017年11月2日  *  */  public class ImportExcelUntil{        /**      * 拼装单个obj      * @param obj      * @param row      * @return      * @throws Exception      */      private  static  Map<String, Object>  dataObj(Object obj, HSSFRow row) throws Exception {          Class<?> rowClazz= obj.getClass();              Field[] fields = FieldUtils.getAllFields(rowClazz);          if (fields == null || fields.length < 1) {              return null;          }                    //容器          Map<String, Object> map = new HashMap<String, Object>();                    //注意excel表格字段顺序要和obj字段顺序对齐 (如果有多余字段请另作特殊下标对应处理)          for (int j = 0; j < fields.length; j++) {              map.put(fields[j].getName(), getVal(row.getCell(j)));          }          return map;       }            public  static   List<Map<String, Object>> importExcel(MultipartFile file, Object obj) throws Exception {                    //装载流          POIFSFileSystem fs = new POIFSFileSystem(file.getInputStream());          HSSFWorkbook hw= new HSSFWorkbook(fs);                    //获取第一个sheet页          HSSFSheet sheet = hw.getSheetAt(0);                    //容器          List<Map<String, Object>> ret = new ArrayList<Map<String, Object>>();                    //遍历行 从下标第一行开始(去除标题)          for (int i = 1; i < sheet.getLastRowNum(); i++) {              HSSFRow row= sheet.getRow(i);              if(row!=null){                  //装载obj                   ret.add(dataObj(obj,row));              }          }          return ret;      }            /**      * 处理val(暂时只处理string和number,可以自己添加自己需要的val类型)      * @param hssfCell      * @return      */      public static String getVal(HSSFCell hssfCell) {          if (hssfCell.getCellType() == HSSFCell.CELL_TYPE_STRING) {              return hssfCell.getStringCellValue();          } else {              return String.valueOf(hssfCell.getNumericCellValue());          }      }  } 
4.导入工具类
  

以上就是通用导入的全部内容了,写的比较糙。有不足的地方 还留言斧正。