万分抱歉,因为最近项目上线 通用导入篇章现在才写
以上就是通用导入的全部内容了,写的比较糙。有不足的地方 还留言斧正。
废话不多说,上代码!!!
<!-- 加载 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.导入工具类
以上就是通用导入的全部内容了,写的比较糙。有不足的地方 还留言斧正。