Java Excel 通用导入

万分抱歉,因为最近项目上线 通用导入篇章现在才写

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

<!-- 加载 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.导入工具类
  

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




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值