项目产品化——Excel数据库模板化导入(java)

Excel导入可能是代码开发中比较常见的功能,一个项目如果有多个地方需要excel导入数据库,那么开发的工作量也将比较大,项目产品化过程中,将这么一个类似的功能进行封装合并也是必要的,封装好的代码只需要

使用方法:

第一步进行数据库关于excel的配置

第二步在jsp页面引入excel导入界面即可

拿到excel模板,不需要自己写后台代码,直接在数据库配置excel列与数据库字段的关系,然后在需要excel导入的地方,引入一个连接,即可生成excel导入功能。数据库配置一定要正确

//客户信息批量导入
	function excelToData() {
		var contextPath = "<%=request.getContextPath()%>";
		var groupType = $("#cstGrpType").val();
		$.showModalDialog(contextPath+"/util/openExcelToDataServlet?loginCode=<%=ContextUtil.getUserView().getLoginCode()%>&loginDept=<%=ContextUtil.getUserView().getOrgnizationId()%>&excelCode=CUSTOMER_GROUP¶m="+groupType,"客户群组成员导入",valueCallback,null,"350","150",2);
	}

一、能够解决的excel导入:

1、  已明确的单个表的excel导入

2、  已明确的多个没关系的表excel导入

3、  已明确的多个有关系的表excel导入

excel表格中内容必须从第一行第一列开始,当然可以通过页面设置,功能不复杂,这次的代码就不写了,类似下图中数据放在随机行随机列不支持

二、数据库配置

说明:excel数据库模板化导入,关键是在数据库配置,配置不能出错。


ID


NUMBER(10)


主键,无意义


EXCEL_CODE


VARCHAR2(50)


导出功能的标识,注意不同的excel导入功能excel_code不能重复,jsp页面传输参数之一。


EXCEL_INTO_TABLE


VARCHAR2(64)


excel导入的表,需要导入到哪个表中


FILED_CODE


VARCHAR2(64)


字段代码,导入到相应表中的哪个字段


FILED_NAME


VARCHAR2(32)


字段名称,与表字段相对应的excel列名,不是通过excel导入的字段,这个可以不写


FILED_TYPE


VARCHAR2(10)


字段类型,

S字符串,

T表示时间,

I表示数字,如果是主键,需要在TABLE_PK字段中,写上实体类的项目路径

A表示登录人帐号,

D表示添加人部门,

N表示当前时间,

P表示页面传入的参数,

F表示外键,通过插入另一个表生成外键(数字类型F&I,时间类型F&T,字符串类型F&S),需要在FILED_EXCELCODE_CONSTANT字段中写上外键表的excel_code

C表示常量(数字类型C&I,时间类型C&T,字符串类型C&S)。目前仅支持这些标记。


FILED_EXTEND


VARCHAR2(200)


外部属性


TABLE_PK


VARCHAR2(128)


记录表获得的序列号的标志,为空表示导入字段


FILED_ORDER


NUMBER


记录插入顺序


FILED_VALIDATE


VARCHAR2(200)


字段值为Y或者N,标记该字段是否需要验证,如果需要,将包含的值保存在FILED_EXCELCODE_CONSTANT字段中


FILED_EXCELCODE_CONSTANT


VARCHAR2(100)


当FILED_TYPE为F或C时起作用。当为F时向另一个表中插入数据,值为已存在的EXCEL_CODE ,当为C时表示的是常量的值


FILED_EXCELCODE_ISRETURN


CHAR(1)


当FILED_TYPE为F时起作用,作为外键值输出,Y表示是返回值的字段,N表示非返回值的字段

三、核心代码

由于本人比较懒,大家就将就着看吧,代码有点多,重要的代码都在这,我就不提取了,其实后面的代码都是次要的,上面的知道是怎么回事,大家完全可以自己写,自己写的代码以后修改还容易修改,再多说一句:重点在数据库

package com.haiyisoft.cc.util.web.struts;

import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
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 com.haiyisoft.cc.util.util.ExcelCheckMethod;
import com.haiyisoft.entity.cc.util.CcExcel;
import com.haiyisoft.entity.framework.EntitySequenceNo;
import com.haiyisoft.ep.cache.util.LogUtil;
import com.haiyisoft.ep.common.jpa.util.JPAUtil;
import com.haiyisoft.ep.common.model.QueryParamList;
import com.haiyisoft.ep.common.model.SortParam;
import com.haiyisoft.ep.common.model.SortParamList;
import com.haiyisoft.ep.framework.util.DropBeanUtil;
import com.haiyisoft.ep.framework.view.UserView;

/**
  * excel导入
  * @author 牟云飞
  * @tel 15562579597
  * @QQ  1147417467
  * @company 海颐软件股份有限公司
  *
  * <p> Modification History:</p>
  * <p> Date         Author     Description </p>
  * <p>------------------------------------------------------------------</p>
  * <p> 2014-5-14	 muyunfei    新建   </p>
  */
public class ExcelToDataAction extends  HttpServlet {

	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		this.doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		try {
			importExcel(req,resp);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	//excel导入
	public void importExcel(HttpServletRequest request, HttpServletResponse response) throws Exception{

		//导入成功个数
		int count=0;
		//导入信息
		String message="";
		//获取excelcode
		String excelCode=request.getParameter("excelCode");
		if(null==excelCode||"".equals(excelCode)){
			message="导入失败<br/>excelCode不存在";
			request.setAttribute("message",message);
		}
		request.setAttribute("excelCode", excelCode);
		String param=request.getParameter("param");
		request.setAttribute("param", param);
		//获得数据库中的excel配置
		QueryParamList params = new QueryParamList();
		params.addParam("excelCode", excelCode);
		SortParamList sortParams = new SortParamList();
		sortParams.addParam("excelIntoTable", SortParam.SORT_TYPE_ASCENDING);
		sortParams.addParam("filedOrder", SortParam.SORT_TYPE_ASCENDING);
		List<CcExcel> list = JPAUtil.load(CcExcel.class,params, null, null, sortParams, null);
		//读取excel
		try {
			request.setCharacterEncoding("gbk");
			response.setContentType("text/html;charset=gbk");
			// 1. 创建工厂类
			 DiskFileItemFactory factory = new DiskFileItemFactory();
			// 2. 创建FileUpload对象
			 ServletFileUpload upload = new ServletFileUpload(factory);

			// 3. 判断是否是上传表单
			// boolean b = upload.isMultipartContent(request);
			 // 设置上传文件最大值
			 upload.setSizeMax(25 * 1024 * 1024);
			// 是文件上传表单
			// 4. 解析request,获得FileItem项
			 List<FileItem> fileitems = upload.parseRequest(request);
			// 5. 遍历集合
			 for (FileItem item : fileitems) {
				// 判断是不是普通字段
				 if (!item.isFormField()) {
						// 获得流,读取数据写入文件
						InputStream in = item.getInputStream();
					 	Workbook book = createWorkBook(in,item.getName());
					    // 获得第一个工作表对象
						Sheet sheet = book.getSheetAt(0);
					 	if(0==sheet.getLastRowNum()){
							//如果没有数据
							request.setAttribute("message", "excel的sheet0中不存在数据");
							request.getRequestDispatcher("/cc/util/excelToData.jsp").forward(request, response);
						}

						// 第一行为标题,从第二行开始录入
						for (int i = 1; i <= sheet.getLastRowNum(); i++) {
							//标题行,用来对比方便得到数据
							Row titleRow = sheet.getRow(0);
							//数据行
							Row row = sheet.getRow(i);
							String sql_name="";
							String sql_value="";
							String sql_table="";
							QueryParamList paramsList=null;
							int fieldCount=1;
							for (int j = 0; j < list.size(); j++) {
								CcExcel excelItem = list.get(j);
								if(j==0){
									//获取数据库表明
									sql_table=excelItem.getExcelIntoTable();
									paramsList=new QueryParamList();
								}
								//解决多表插入问题
								if(!sql_table.equals(excelItem.getExcelIntoTable())){
									//如果表不一样,先插入一个
									String sql="insert into "+sql_table+"("+sql_name+")"+" values("+sql_value+")" ;
									JPAUtil.executeNativeUpdate(sql,paramsList);
									//重置条件
									sql_table=excelItem.getExcelIntoTable();
									sql_name="";
									sql_value="";
									fieldCount=1;
									paramsList=new QueryParamList();
								}
								//插入的类型
								String fieldType =excelItem.getFiledType();
								//外部属性
								String fieldExtend=excelItem.getFiledExtend();
								//序列号
								String table_pk=(excelItem.getTablePk()+"").trim();
								//是否需要验证,N不验证  方法名
								String insert_validate=(excelItem.getFiledValidate()+"").trim();

								//字段名
								if(null!=excelItem.getFiledCode()&&!"".equals(excelItem.getFiledCode())){
									if(1!=fieldCount){
										sql_name+=",";
										//列值占位
										sql_value+=",";
									}
									fieldCount++;
									sql_name+=excelItem.getFiledCode();
									//获得用户session
									UserView urser= (UserView) request.getSession().getAttribute("userView");
									String loginCode="";
									String loginDept="";
									//解决再次提交session消失的问题
									if(null==urser||"".equals(urser)){
										loginCode=request.getParameter("loginCode");
										loginDept=request.getParameter("loginDept");
									}else{
										loginCode=urser.getLoginCode();
										loginDept=urser.getOrgnizationId()+"";
									}
									request.setAttribute("loginCode", loginCode);
									request.setAttribute("loginDept", loginDept);
									String value_temp="";
									//设置字段值
									if ("T".equals(fieldType)){  //字段类型T表示是时间类型
										sql_value = sql_value+ "TO_DATE(:dt"+j+",'YYYY-MM-DD HH24:MI:SS') ";
										int position= getCellPosition(titleRow,excelItem.getFiledName());
										if(-1!=position){
											//用来验证时候校验
											value_temp= this.getValue((Cell) row.getCell(position));
											//校验
											String[] item_value = checkValue(value_temp,insert_validate,row,param,titleRow);
											if(null!=item_value&&0!=item_value.length&&"1".equals(item_value[0])){
												//校验可以保存
												value_temp=item_value[1];
											}else if(null!=item_value&&0!=item_value.length&&"0".equals(item_value[0])){
												message="导入失败<br/>"+item_value[1];
												request.setAttribute("message",message);
												request.getRequestDispatcher("/cc/util/excelToData.jsp").forward(request, response);
												return ;
											}

											paramsList.addParam("dt"+j, value_temp);
										}else{
											message="导入失败<br/>"+message;
											request.setAttribute("message",message);
											request.getRequestDispatcher("/cc/util/excelToData.jsp").forward(request, response);
											return ;
										}
									}else if ("I".equals(fieldType)){ //字段类型I表示是数字类型
										sql_value = sql_value + "TO_NUMBER(:pk"+j+") ";
										//查看序列号
										if(null!=table_pk&&!"".equals(table_pk)&&!"null".equals(table_pk)){
											//查询Ep_Sys_Entity_Sequence_No表获得数据
											QueryParamList para=new QueryParamList();
											para.addParam("entityType", table_pk);
											String queryPKhql="select to_char(a.maxNo) from  EntitySequenceNo a where  a.entityType='"+table_pk+"'";
											List<Object> listPK = JPAUtil.find(queryPKhql);

											//最大值加1
											String updateSql="update EntitySequenceNo a set a.maxNo=a.maxNo+1 where a.entityType='"+table_pk+"'";
											JPAUtil.executeUpdate(updateSql);
											//用来验证时候校验
											value_temp= listPK.get(0)+"";
											//校验
											String[] item_value = checkValue(value_temp,insert_validate,row,param,titleRow);
											if(null!=item_value&&0!=item_value.length&&"1".equals(item_value[0])){
												//校验可以保存
												value_temp=item_value[1];
											}else if(null!=item_value&&0!=item_value.length&&"0".equals(item_value[0])){
												message="导入失败<br/>"+item_value[1];
												request.setAttribute("message",message);
												request.getRequestDispatcher("/cc/util/excelToData.jsp").forward(request, response);
												return ;
											}
											paramsList.addParam("pk"+j, value_temp);
										}else if(null!=fieldExtend&&!"".equals(fieldExtend)){
											DropBeanUtil util = new DropBeanUtil() ;
											int position= getCellPosition(titleRow,excelItem.getFiledName());
											if(-1!=position){
												//用来验证时候校验
												value_temp= this.getValue((Cell) row.getCell(position));
												String dropName = util.getDropLabel(fieldExtend, value_temp);
												//校验
												String[] item_value = checkValue(dropName,insert_validate,row,param,titleRow);
												if(null!=item_value&&0!=item_value.length&&"1".equals(item_value[0])){
													//校验可以保存
													dropName=item_value[1];
												}else if(null!=item_value&&0!=item_value.length&&"0".equals(item_value[0])){
													message="导入失败<br/>"+item_value[1];
													request.setAttribute("message",message);
													request.getRequestDispatcher("/cc/util/excelToData.jsp").forward(request, response);
													return ;
												}
												paramsList.addParam("pk"+j, Integer.valueOf(dropName));
											}else{
												message="导入失败<br/>"+message;
												request.setAttribute("message",message);
												request.getRequestDispatcher("/cc/util/excelToData.jsp").forward(request, response);
												return ;
											}
										}else{
											int position= getCellPosition(titleRow,excelItem.getFiledName());
											if(-1!=position){
												//用来验证时候校验
												value_temp= this.getValue((Cell) row.getCell(position));
												//校验
												String[] item_value = checkValue(value_temp,insert_validate,row,param,titleRow);
												if(null!=item_value&&0!=item_value.length&&"1".equals(item_value[0])){
													//校验可以保存
													value_temp=item_value[1];
												}else if(null!=item_value&&0!=item_value.length&&"0".equals(item_value[0])){
													message="导入失败<br/>"+item_value[1];
													request.setAttribute("message",message);
													request.getRequestDispatcher("/cc/util/excelToData.jsp").forward(request, response);
													return ;
												}
												paramsList.addParam("pk"+j, value_temp);
											}else{
												message="导入失败<br/>"+message;
												request.setAttribute("message",message);
												request.getRequestDispatcher("/cc/util/excelToData.jsp").forward(request, response);
												return ;
											}
										}
									}
									else if ("A".equals(fieldType)){ //字段类型A表示是登录人员帐号
										//用来验证时候校验
										value_temp= loginCode;
										//校验
										String[] item_value = checkValue(value_temp,insert_validate,row,param,titleRow);
										if(null!=item_value&&0!=item_value.length&&"1".equals(item_value[0])){
											//校验可以保存
											value_temp=item_value[1];
										}else if(null!=item_value&&0!=item_value.length&&"0".equals(item_value[0])){
											message="导入失败<br/>"+item_value[1];
											request.setAttribute("message",message);
											request.getRequestDispatcher("/cc/util/excelToData.jsp").forward(request, response);
											return ;
										}
										sql_value = sql_value + "'"+value_temp+"'";
									}else if ("D".equals(fieldType)){ //字段类型D表示是登录人的部门
										//用来验证时候校验
										value_temp= loginDept;
										//校验
										String[] item_value = checkValue(value_temp,insert_validate,row,param,titleRow);
										if(null!=item_value&&0!=item_value.length&&"1".equals(item_value[0])){
											//校验可以保存
											value_temp=item_value[1];
										}else if(null!=item_value&&0!=item_value.length&&"0".equals(item_value[0])){
											message="导入失败<br/>"+item_value[1];
											request.setAttribute("message",message);
											request.getRequestDispatcher("/cc/util/excelToData.jsp").forward(request, response);
											return ;
										}
										sql_value = sql_value + "'"+value_temp+"'";
									}else if ("N".equals(fieldType)){ //字段类型N表示是当前时间
										sql_value = sql_value + " SYSDATE ";
									}else if ("P".equals(fieldType)){ //字段类型P表示是传入参数
										String excelPara=request.getParameter("param")+"";
										//用来验证时候校验
										value_temp= excelPara;
										//校验
										String[] item_value = checkValue(value_temp,insert_validate,row,param,titleRow);
										if(null!=item_value&&0!=item_value.length&&"1".equals(item_value[0])){
											//校验可以保存
											value_temp=item_value[1];
										}else if(null!=item_value&&0!=item_value.length&&"0".equals(item_value[0])){
											message="导入失败<br/>"+item_value[1];
											request.setAttribute("message",message);
											request.getRequestDispatcher("/cc/util/excelToData.jsp").forward(request, response);
											return ;
										}
										sql_value = sql_value + "'"+value_temp+"'";
									}else if ("F".equals(fieldType.substring(0,1))){ //外键类型F表示通过插入另一个表形成外键
										String fieldExcelCode=excelItem.getFiledExcelcodeConstant();
										//获得返回值
										String[] insertFKValue=executeFieldExcelCode(fieldExcelCode,row,param,titleRow,loginCode,loginDept);
										if(null==insertFKValue){
											message="导入失败<br/>fieldExcelCode不存在输出值";
											request.setAttribute("message",message);
											request.getRequestDispatcher("/cc/util/excelToData.jsp").forward(request, response);
											return ;
										}
										//如果存在错误返回,结束操作返回 错误信息
										if(!"1".equals(insertFKValue[0])){
											message="导入失败<br/>"+insertFKValue[1];
											request.setAttribute("message",message);
											request.getRequestDispatcher("/cc/util/excelToData.jsp").forward(request, response);
											return ;
										}
										//用来验证时候校验
										value_temp= insertFKValue[1];//获取正确值
										//校验
										String[] item_value = checkValue(value_temp,insert_validate,row,param,titleRow);
										if(null!=item_value&&0!=item_value.length&&"1".equals(item_value[0])){
											//校验可以保存
											value_temp=item_value[1];
										}else if(null!=item_value&&0!=item_value.length&&"0".equals(item_value[0])){
											message="导入失败<br/>"+item_value[1];
											request.setAttribute("message",message);
											request.getRequestDispatcher("/cc/util/excelToData.jsp").forward(request, response);
											return ;
										}
										String type=fieldType.substring(2,fieldType.length());
										if("I".equals(type)){
											sql_value = sql_value + ""+value_temp+"";
										}else if("T".equals(type)){
											sql_value = sql_value + "TO_DATE('"+value_temp+"','YYYY-MM-DD HH24:MI:SS') ";
										}else{
											sql_value = sql_value + "'"+value_temp+"'";
										}
									}else if ("C".equals(fieldType.substring(0,1))){ //常量类型
										//从数据库中获得常量的值
										value_temp=excelItem.getFiledExcelcodeConstant();
										//校验
										String[] item_value = checkValue(value_temp,insert_validate,row,param,titleRow);
										if(null!=item_value&&0!=item_value.length&&"1".equals(item_value[0])){
											//校验可以保存
											value_temp=item_value[1];
										}else if(null!=item_value&&0!=item_value.length&&"0".equals(item_value[0])){
											message="导入失败<br/>"+item_value[1];
											request.setAttribute("message",message);
											request.getRequestDispatcher("/cc/util/excelToData.jsp").forward(request, response);
											return ;
										}
										//获得类型,根据类型判断插入的值类型
										String type=fieldType.substring(2,fieldType.length());
										if("I".equals(type)){
											sql_value = sql_value + ""+value_temp+"";
										}else if("T".equals(type)){
											sql_value = sql_value + "TO_DATE('"+value_temp+"','YYYY-MM-DD HH24:MI:SS') ";
										}else{
											sql_value = sql_value + "'"+value_temp+"'";
										}
									}else {
										sql_value = sql_value + " :st"+j;
										//查看序列号
										if(null!=table_pk&&!"".equals(table_pk)&&!"null".equals(table_pk)){
											//查询Ep_Sys_Entity_Sequence_No表获得数据
											QueryParamList para=new QueryParamList();
											para.addParam("entityType", table_pk);
											List<EntitySequenceNo> listPk=null;
											listPk = JPAUtil.load(EntitySequenceNo.class, para, null, null, null, null) ;
											long pk =listPk.get(0).getMaxNo();
											//最大值加1
											String updateSql="update EntitySequenceNo a set a.maxNo=a.maxNo+1 where a.entityType='"+table_pk+"'";
											JPAUtil.executeUpdate(updateSql);
											//用来验证时候校验
											value_temp= (pk+1)+"";
											//校验
											String[] item_value = checkValue(value_temp,insert_validate,row,param,titleRow);
											if(null!=item_value&&0!=item_value.length&&"1".equals(item_value[0])){
												//校验可以保存
												value_temp=item_value[1];
											}else if(null!=item_value&&0!=item_value.length&&"0".equals(item_value[0])){
												message="导入失败<br/>"+item_value[1];
												request.setAttribute("message",message);
												request.getRequestDispatcher("/cc/util/excelToData.jsp").forward(request, response);
												return ;
											}
											paramsList.addParam("st"+j, value_temp);
										}else if(null!=fieldExtend&&!"".equals(fieldExtend)){
											DropBeanUtil util = new DropBeanUtil() ;
											int position= getCellPosition(titleRow,excelItem.getFiledName());
											if(-1!=position){
												//用来验证时候校验
												value_temp= this.getValue((Cell) row.getCell(position));
												String dropName = util.getDropLabel(fieldExtend, value_temp);
												//校验
												String[] item_value = checkValue(dropName,insert_validate,row,param,titleRow);
												if(null!=item_value&&0!=item_value.length&&"1".equals(item_value[0])){
													//校验可以保存
													dropName=item_value[1];
												}else if(null!=item_value&&0!=item_value.length&&"0".equals(item_value[0])){
													message="导入失败<br/>"+item_value[1];
													request.setAttribute("message",message);
													request.getRequestDispatcher("/cc/util/excelToData.jsp").forward(request, response);
													return ;
												}
												paramsList.addParam("st"+j, dropName);
											}else{
												message="导入失败<br/>"+message;
												request.setAttribute("message",message);
												request.getRequestDispatcher("/cc/util/excelToData.jsp").forward(request, response);
												return ;
											}
										}else{
											int position= getCellPosition(titleRow,excelItem.getFiledName());
											if(-1!=position){
												//用来验证时候校验
												value_temp= this.getValue((Cell) row.getCell(position));
												if(null==value_temp){
													value_temp="";
												}
												//校验
												String[] item_value = checkValue(value_temp,insert_validate,row,param,titleRow);
												if(null!=item_value&&0!=item_value.length&&"1".equals(item_value[0])){
													//校验可以保存
													value_temp=item_value[1];
												}else if(null!=item_value&&0!=item_value.length&&"0".equals(item_value[0])){
													message="导入失败<br/>"+item_value[1];
													request.setAttribute("message",message);
													request.getRequestDispatcher("/cc/util/excelToData.jsp").forward(request, response);
													return ;
												}
												paramsList.addParam("st"+j, value_temp);
											}else{
												//如果都没有,判断验证列,如果验证列有方法执行方法
												if(null!=insert_validate&&!"N".equals(insert_validate)&&!"null".equals(insert_validate.toLowerCase())){
													//校验
													String[] item_value = checkValue("",insert_validate,row,param,titleRow);
													if(null!=item_value&&0!=item_value.length&&"1".equals(item_value[0])){
														//校验可以保存
														value_temp=item_value[1];
													}else if(null!=item_value&&0!=item_value.length&&"0".equals(item_value[0])){
														message="导入失败<br/>"+item_value[1];
														request.setAttribute("message",message);
														request.getRequestDispatcher("/cc/util/excelToData.jsp").forward(request, response);
														return ;
													}
													paramsList.addParam("st"+j, value_temp);
												}else{
													message="导入失败<br/>"+"excel未找到有该列("+excelItem.getFiledName()+")";
													request.setAttribute("message",message);
													request.getRequestDispatcher("/cc/util/excelToData.jsp").forward(request, response);
													return ;
												}
											}
										}
									}

								}

							}
							//插入数据库
							String sql="insert into "+sql_table+"("+sql_name+")"+" values("+sql_value+")" ;
							JPAUtil.executeNativeUpdate(sql,paramsList);
							//成功导入一掉excel数据
							count++;
						}
			     }
			 }
			message="成功导入"+count+"条记录<br/>"+message;
			request.setAttribute("message","1");
			request.setAttribute("messagecontext",message);
			request.getRequestDispatcher("/cc/util/excelToData.jsp").forward(request, response);

		} catch (Exception e) {
			e.printStackTrace();
			message="导入失败<br/>"+message;
			request.setAttribute("message",message);
			request.getRequestDispatcher("/cc/util/excelToData.jsp").forward(request, response);

		}
	}

	//解决验证问题、解决值需要重新计算问题
	@SuppressWarnings({ "unchecked", "rawtypes" })
	private String[] checkValue(String excelValue,String insert_validate,Row row,String param ,Row titleRow){
		try{
			String[] value=new String[2];
			if(null!=insert_validate&&!"".equals(insert_validate)&&!"N".equals(insert_validate)){

				String classPath="com.haiyisoft.cc.util.util.ExcelCheckMethod";
				Class cl = Class.forName(classPath);
				Method method = cl.getMethod(insert_validate, String.class,String.class,Row.class,Row.class);
				//采用实例化一个对象,对应的方法中spring将不起作用必须用new
				//如果返回数据为数组   第一位 1通过,               0验证失败
				//                  第二位  返回正确值       失败的原因
				ExcelCheckMethod excelMethod=new ExcelCheckMethod();
				value=(String[])method.invoke(excelMethod,excelValue,param,row,titleRow);
				return value;
			}
			return null;
		}catch(Exception e){
			LogUtil.getLogger().error("验证出现异常");
			return null;
		}
	}

	//得到filed_name在excel是第几列
	private int getCellPosition(Row titleRow,String name){
		int num=-1;
		if(null==name||"null".equals(name)||"".equals(name)||"NULL".equals(name)){
			return num;
		}
		for (int i = 0; i < titleRow.getLastCellNum(); i++) {
			String title=titleRow.getCell(i).getStringCellValue();
			if(name.trim().equals(title.trim())){
				return i;
			}
		}
		LogUtil.getLogger().error("无法找到列:"+name);
		return num;
	}

	 /* 判断是xls文件还是xlsx文件  */
	public Workbook createWorkBook(InputStream is,String name) throws IOException{
		if(name.toLowerCase().endsWith("xls")){
			return new HSSFWorkbook(is);
			}
		if(name.toLowerCase().endsWith("xlsx")){
			return new XSSFWorkbook(is);
			}
		return null;
	}

	//解决excel类型问题,获得数值
	public  String getValue(HSSFCell cell) {
		String value = "";
		if(null==cell){
			return value;
		}
		switch (cell.getCellType()) {
		 	//数值型
	  		case HSSFCell.CELL_TYPE_NUMERIC:
	  			if (HSSFDateUtil.isCellDateFormatted(cell)) {
				    //如果是date类型则 ,获取该cell的date值
	  				Date date = HSSFDateUtil.getJavaDate(cell.getNumericCellValue());
	  				SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
				    value = format.format(date);;
	  			}else {// 纯数字
	  				BigDecimal big=new BigDecimal(cell.getNumericCellValue());
	  				value = big.toString();
	  				//解决1234.0  去掉后面的.0
	  				if(null!=value&&!"".equals(value.trim())){
	  				     String[] item = value.split("[.]");
	  				     if(1<item.length&&"0".equals(item[1])){
	  				    	 value=item[0];
	  				     }
	  				}
	  			}
	  			break;
	  			//字符串类型
	  		case HSSFCell.CELL_TYPE_STRING:
	  			value = cell.getStringCellValue().toString();
	  			break;
	  		// 公式类型
	  		case HSSFCell.CELL_TYPE_FORMULA:
	  			//读公式计算值
	  			value = String.valueOf(cell.getNumericCellValue());
	  			if (value.equals("NaN")) {// 如果获取的数据值为非法值,则转换为获取字符串
	  				value = cell.getStringCellValue().toString();
	  			}
	  			break;
	  		// 布尔类型
	  		case HSSFCell.CELL_TYPE_BOOLEAN:
	  			value = " "+ cell.getBooleanCellValue();
	  			break;
	  		// 空值
	  		case HSSFCell.CELL_TYPE_BLANK:
	  			value = "";
	  			LogUtil.getLogger().error("excel出现空值");
	  			break;
	  		// 故障
	  		case HSSFCell.CELL_TYPE_ERROR:
	  			value = "";
	  			LogUtil.getLogger().error("excel出现故障");
	  			break;
	  		default:
	  			value = cell.getStringCellValue().toString();
		}
		if("null".endsWith(value.trim())){
			value="";
		}
	  return value;
	}

	//解决excel类型问题,获得数值
	public  String getValue(Cell cell) {
		String value = "";
		if(null==cell){
			return value;
		}
		switch (cell.getCellType()) {
	 	//数值型
  		case Cell.CELL_TYPE_NUMERIC:
  			if (HSSFDateUtil.isCellDateFormatted(cell)) {
			    //如果是date类型则 ,获取该cell的date值
  				Date date = HSSFDateUtil.getJavaDate(cell.getNumericCellValue());
  				SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			    value = format.format(date);;
  			}else {// 纯数字
  				BigDecimal big=new BigDecimal(cell.getNumericCellValue());
  				value = big.toString();
  				//解决1234.0  去掉后面的.0
  				if(null!=value&&!"".equals(value.trim())){
  				     String[] item = value.split("[.]");
  				     if(1<item.length&&"0".equals(item[1])){
  				    	 value=item[0];
  				     }
  				}
  			}
  			break;
  			//字符串类型
  		case Cell.CELL_TYPE_STRING:
  			value = cell.getStringCellValue().toString();
  			break;
  		// 公式类型
  		case Cell.CELL_TYPE_FORMULA:
  			//读公式计算值
  			value = String.valueOf(cell.getNumericCellValue());
  			if (value.equals("NaN")) {// 如果获取的数据值为非法值,则转换为获取字符串
  				value = cell.getStringCellValue().toString();
  			}
  			break;
  		// 布尔类型
  		case Cell.CELL_TYPE_BOOLEAN:
  			value = " "+ cell.getBooleanCellValue();
  			break;
  		// 空值
  		case Cell.CELL_TYPE_BLANK:
  			value = "";
  			LogUtil.getLogger().error("excel出现空值");
  			break;
  		// 故障
  		case Cell.CELL_TYPE_ERROR:
  			value = "";
  			LogUtil.getLogger().error("excel出现故障");
  			break;
  		default:
  			value = cell.getStringCellValue().toString();
	}
	if("null".endsWith(value.trim())){
		value="";
	}
  return value;
	}

	//通过关联excelcode插入表数据,并返回输出的值
	public String[] executeFieldExcelCode(String fieldExcelCode,Row row,String param,Row titleRow,String loginCode,String loginDept){
		//返回的值
		String[] value= new String[2];
		//获得数据库中的excel配置
		QueryParamList params = new QueryParamList();
		params.addParam("excelCode", fieldExcelCode);
		SortParamList sortParams = new SortParamList();
		sortParams.addParam("excelIntoTable", SortParam.SORT_TYPE_ASCENDING);
		sortParams.addParam("filedOrder", SortParam.SORT_TYPE_ASCENDING);
		List<CcExcel> list = JPAUtil.load(CcExcel.class,params, null, null, sortParams, null);
		String sql_name="";
		String sql_value="";
		String sql_table="";
		String message="";

		QueryParamList paramsList=null;
		int fieldCount=1;
		for (int j = 0; j < list.size(); j++) {
			CcExcel excelItem = list.get(j);
			if(j==0){
				//获取数据库表明
				sql_table=excelItem.getExcelIntoTable();
				paramsList=new QueryParamList();
			}
			//解决多表插入问题
			if(!sql_table.equals(excelItem.getExcelIntoTable())){
				//如果表不一样,先插入一个
				String sql="insert into "+sql_table+"("+sql_name+")"+" values("+sql_value+")" ;
				JPAUtil.executeNativeUpdate(sql,paramsList);
				//重置条件
				sql_table=excelItem.getExcelIntoTable();
				sql_name="";
				sql_value="";
				fieldCount=1;
				paramsList=new QueryParamList();
			}
			//插入的类型
			String fieldType =excelItem.getFiledType();
			//外部属性
			String fieldExtend=excelItem.getFiledExtend();
			//序列号
			String table_pk=(excelItem.getTablePk()+"").trim();
			//是否需要验证,N不验证  方法名
			String insert_validate=(excelItem.getFiledValidate()+"").trim();

			//字段名
			if(null!=excelItem.getFiledCode()&&!"".equals(excelItem.getFiledCode())){
				if(1!=fieldCount){
					sql_name+=",";
					//列值占位
					sql_value+=",";
				}
				fieldCount++;
				sql_name+=excelItem.getFiledCode();

				String value_temp="";
				//设置字段值
				if ("T".equals(fieldType)){  //字段类型T表示是时间类型
					sql_value = sql_value+ "TO_DATE(:dt"+j+",'YYYY-MM-DD HH24:MI:SS') ";
					int position= getCellPosition(titleRow,excelItem.getFiledName());
					if(-1!=position){
						//用来验证时候校验
						value_temp= this.getValue((Cell) row.getCell(position));
						//校验
						String[] item_value = checkValue(value_temp,insert_validate,row,param,titleRow);
						if(null!=item_value&&0!=item_value.length&&"1".equals(item_value[0])){
							//校验可以保存
							value_temp=item_value[1];
						}else if(null!=item_value&&0!=item_value.length&&"0".equals(item_value[0])){
							com.haiyisoft.ep.log.LogUtil.getAppLoger().error("导入失败,"+item_value[1]);
							value[0]="0";
							value[1]=item_value[1];
							return value;
						}
						//如果是返回值
						if("Y".equals(excelItem.getFiledExcelcodeIsreturn())){
							value[0]="1";
							value[1]=value_temp;
						}
						paramsList.addParam("dt"+j, value_temp);
					}else{
						com.haiyisoft.ep.log.LogUtil.getAppLoger().error("导入失败,excel未找到有该列("+excelItem.getFiledName()+")");
						value[0]="0";
						value[1]="excel未找到有该列("+excelItem.getFiledName()+")";
						return value;
					}
				}else if ("I".equals(fieldType)){ //字段类型I表示是数字类型
					sql_value = sql_value + "TO_NUMBER(:pk"+j+") ";
					//查看序列号
					if(null!=table_pk&&!"".equals(table_pk)&&!"null".equals(table_pk)){
						//查询Ep_Sys_Entity_Sequence_No表获得数据
						QueryParamList para=new QueryParamList();
						para.addParam("entityType", table_pk);
						List<EntitySequenceNo> listPk = JPAUtil.load(EntitySequenceNo.class, para, null, null, null, null) ;
						long pk =listPk.get(0).getMaxNo();
						//最大值加1
						String updateSql="update EntitySequenceNo a set a.maxNo=a.maxNo+1 where a.entityType='"+table_pk+"'";
						JPAUtil.executeUpdate(updateSql);
						//用来验证时候校验
						value_temp= (pk+1)+"";
						//校验
						String[] item_value = checkValue(value_temp,insert_validate,row,param,titleRow);
						if(null!=item_value&&0!=item_value.length&&"1".equals(item_value[0])){
							//校验可以保存
							value_temp=item_value[1];
						}else if(null!=item_value&&0!=item_value.length&&"0".equals(item_value[0])){
							message="导入失败<br/>"+item_value[1];
							com.haiyisoft.ep.log.LogUtil.getAppLoger().error(message);
							value[0]="0";
							value[1]=item_value[1];
							return value;
						}
						//如果是返回值
						if("Y".equals(excelItem.getFiledExcelcodeIsreturn())){
							value[0]="1";
							value[1]=value_temp;
						}
						paramsList.addParam("pk"+j, value_temp);
					}else if(null!=fieldExtend&&!"".equals(fieldExtend)){
						DropBeanUtil util = new DropBeanUtil() ;
						int position= getCellPosition(titleRow,excelItem.getFiledName());
						if(-1!=position){
							//用来验证时候校验
							value_temp= this.getValue((Cell) row.getCell(position));
							String dropName = util.getDropLabel(fieldExtend, value_temp);
							//校验
							String[] item_value = checkValue(dropName,insert_validate,row,param,titleRow);
							if(null!=item_value&&0!=item_value.length&&"1".equals(item_value[0])){
								//校验可以保存
								dropName=item_value[1];
							}else if(null!=item_value&&0!=item_value.length&&"0".equals(item_value[0])){
								message="导入失败<br/>"+item_value[1];
								com.haiyisoft.ep.log.LogUtil.getAppLoger().error(message);
								value[0]="0";
								value[1]=item_value[1];
								return value;
							}
							//如果是返回值
							if("Y".equals(excelItem.getFiledExcelcodeIsreturn())){
								value[0]="1";
								value[1]=dropName;
							}
							paramsList.addParam("pk"+j, Integer.valueOf(dropName));
						}else{
							message="导入失败<br/>"+message;
							com.haiyisoft.ep.log.LogUtil.getAppLoger().error("excel未找到有该列("+excelItem.getFiledName()+")");
							value[0]="0";
							value[1]="excel未找到有该列("+excelItem.getFiledName()+")";
							return value;
						}
					}else{
						int position= getCellPosition(titleRow,excelItem.getFiledName());
						if(-1!=position){
							//用来验证时候校验
							value_temp= this.getValue((Cell) row.getCell(position));
							//校验
							String[] item_value = checkValue(value_temp,insert_validate,row,param,titleRow);
							if(null!=item_value&&0!=item_value.length&&"1".equals(item_value[0])){
								//校验可以保存
								value_temp=item_value[1];
							}else if(null!=item_value&&0!=item_value.length&&"0".equals(item_value[0])){
								message="导入失败<br/>"+item_value[1];
								com.haiyisoft.ep.log.LogUtil.getAppLoger().error(message);
								value[0]="0";
								value[1]=item_value[1];
								return value;
							}
							//如果是返回值
							if("Y".equals(excelItem.getFiledExcelcodeIsreturn())){
								value[0]="1";
								value[1]=value_temp;
							}
							paramsList.addParam("pk"+j, value_temp);
						}else{
							message="导入失败<br/>"+message;
							com.haiyisoft.ep.log.LogUtil.getAppLoger().error("excel未找到有该列("+excelItem.getFiledName()+")");
							value[0]="0";
							value[1]="excel未找到有该列("+excelItem.getFiledName()+")";
							return value;
						}
					}
				}
				else if ("A".equals(fieldType)){ //字段类型A表示是登录人员帐号
					//用来验证时候校验
					value_temp= loginCode;
					//校验
					String[] item_value = checkValue(value_temp,insert_validate,row,param,titleRow);
					if(null!=item_value&&0!=item_value.length&&"1".equals(item_value[0])){
						//校验可以保存
						value_temp=item_value[1];
					}else if(null!=item_value&&0!=item_value.length&&"0".equals(item_value[0])){
						message="导入失败<br/>"+item_value[1];
						com.haiyisoft.ep.log.LogUtil.getAppLoger().error(message);
						value[0]="0";
						value[1]=item_value[1];
						return value;
					}
					//如果是返回值
					if("Y".equals(excelItem.getFiledExcelcodeIsreturn())){
						value[0]="1";
						value[1]=value_temp;
					}
					sql_value = sql_value + "'"+value_temp+"'";
				}else if ("D".equals(fieldType)){ //字段类型D表示是登录人的部门
					//用来验证时候校验
					value_temp= loginDept;
					//校验
					String[] item_value = checkValue(value_temp,insert_validate,row,param,titleRow);
					if(null!=item_value&&0!=item_value.length&&"1".equals(item_value[0])){
						//校验可以保存
						value_temp=item_value[1];
					}else if(null!=item_value&&0!=item_value.length&&"0".equals(item_value[0])){
						message="导入失败<br/>"+item_value[1];
						com.haiyisoft.ep.log.LogUtil.getAppLoger().error(message);
						value[0]="0";
						value[1]=item_value[1];
						return value;
					}
					//如果是返回值
					if("Y".equals(excelItem.getFiledExcelcodeIsreturn())){
						value[0]="1";
						value[1]=value_temp;
					}
					sql_value = sql_value + "'"+value_temp+"'";
				}else if ("N".equals(fieldType)){ //字段类型N表示是当前时间
					sql_value = sql_value + " SYSDATE ";
				}else if ("P".equals(fieldType)){ //字段类型P表示是传入参数
					String excelPara=param;
					//用来验证时候校验
					value_temp= excelPara;
					//校验
					String[] item_value = checkValue(value_temp,insert_validate,row,param,titleRow);
					if(null!=item_value&&0!=item_value.length&&"1".equals(item_value[0])){
						//校验可以保存
						value_temp=item_value[1];
					}else if(null!=item_value&&0!=item_value.length&&"0".equals(item_value[0])){
						message="导入失败<br/>"+item_value[1];
						com.haiyisoft.ep.log.LogUtil.getAppLoger().error(message);
						value[0]="0";
						value[1]=item_value[1];
						return value;
					}
					//如果是返回值
					if("Y".equals(excelItem.getFiledExcelcodeIsreturn())){
						value[0]="1";
						value[1]=value_temp;
					}
					sql_value = sql_value + "'"+value_temp+"'";
				}else if ("F".equals(fieldType.substring(0,1))){ //外键类型F表示通过插入另一个表形成外键
					String fieldExcelCode2=excelItem.getFiledExcelcodeConstant();
					//获得返回值
					String[] insertFKValue=executeFieldExcelCode(fieldExcelCode2,row,param,titleRow,loginCode,loginDept);
					if(null==insertFKValue){
						message="导入失败<br/>fieldExcelCode配置导入一次";
						com.haiyisoft.ep.log.LogUtil.getAppLoger().error(message);
						value[0]="0";
						value[1]=message;
						return value;
					}
					//如果存在错误返回,结束操作返回 错误信息
					if(!"1".equals(insertFKValue[0])){
						message="导入失败<br/>"+insertFKValue[1];
						com.haiyisoft.ep.log.LogUtil.getAppLoger().error(message);
						value[0]="0";
						value[1]=message;
						return value;
					}
					//用来验证时候校验
					value_temp= insertFKValue[1];//获取正确值
					//校验
					String[] item_value = checkValue(value_temp,insert_validate,row,param,titleRow);
					if(null!=item_value&&0!=item_value.length&&"1".equals(item_value[0])){
						//校验可以保存
						value_temp=item_value[1];
					}else if(null!=item_value&&0!=item_value.length&&"0".equals(item_value[0])){
						message="导入失败<br/>"+item_value[1];
						com.haiyisoft.ep.log.LogUtil.getAppLoger().error(message);
						value[0]="0";
						value[1]=item_value[1];
						return value;
					}
					//如果是返回值
					if("Y".equals(excelItem.getFiledExcelcodeIsreturn())){
						value[0]="1";
						value[1]=value_temp;
					}
					String type=fieldType.substring(2,fieldType.length());
					if("I".equals(type)){
						sql_value = sql_value + ""+value_temp+"";
					}else if("T".equals(type)){
						sql_value = sql_value + "TO_DATE('"+value_temp+"','YYYY-MM-DD HH24:MI:SS') ";
					}else{
						sql_value = sql_value + "'"+value_temp+"'";
					}
				}else if ("C".equals(fieldType.substring(0,1))){ //常量类型
					//从数据库中获得常量的值
					value_temp=excelItem.getFiledExcelcodeConstant();
					//校验
					String[] item_value = checkValue(value_temp,insert_validate,row,param,titleRow);
					if(null!=item_value&&0!=item_value.length&&"1".equals(item_value[0])){
						//校验可以保存
						value_temp=item_value[1];
					}else if(null!=item_value&&0!=item_value.length&&"0".equals(item_value[0])){
						message="导入失败<br/>"+item_value[1];
						com.haiyisoft.ep.log.LogUtil.getAppLoger().error(message);
						value[0]="0";
						value[1]=item_value[1];
						return value;
					}
					//获得类型,根据类型判断插入的值类型
					String type=fieldType.substring(2,fieldType.length());
					if("I".equals(type)){
						sql_value = sql_value + ""+value_temp+"";
					}else if("T".equals(type)){
						sql_value = sql_value + "TO_DATE('"+value_temp+"','YYYY-MM-DD HH24:MI:SS') ";
					}else{
						sql_value = sql_value + "'"+value_temp+"'";
					}
					//如果是返回值
					if("Y".equals(excelItem.getFiledExcelcodeIsreturn())){
						value[0]="1";
						value[1]=value_temp;
					}
				}else {
					sql_value = sql_value + " :st"+j;
					//查看序列号
					if(null!=table_pk&&!"".equals(table_pk)&&!"null".equals(table_pk)){
						//查询Ep_Sys_Entity_Sequence_No表获得数据
						QueryParamList para=new QueryParamList();
						para.addParam("entityType", table_pk);
						List<EntitySequenceNo> listPk = JPAUtil.load(EntitySequenceNo.class, para, null, null, null, null) ;
						long pk =listPk.get(0).getMaxNo();
						//最大值加1
						String updateSql="update EntitySequenceNo a set a.maxNo=a.maxNo+1 where a.entityType='"+table_pk+"'";
						JPAUtil.executeUpdate(updateSql);
						//用来验证时候校验
						value_temp= (pk+1)+"";
						//校验
						String[] item_value = checkValue(value_temp,insert_validate,row,param,titleRow);
						if(null!=item_value&&0!=item_value.length&&"1".equals(item_value[0])){
							//校验可以保存
							value_temp=item_value[1];
						}else if(null!=item_value&&0!=item_value.length&&"0".equals(item_value[0])){
							message="导入失败<br/>"+item_value[1];
							com.haiyisoft.ep.log.LogUtil.getAppLoger().error(message);
							value[0]="0";
							value[1]=item_value[1];
							return value;
						}
						//如果是返回值
						if("Y".equals(excelItem.getFiledExcelcodeIsreturn())){
							value[0]="1";
							value[1]=value_temp;
						}
						paramsList.addParam("st"+j, value_temp);
					}else if(null!=fieldExtend&&!"".equals(fieldExtend)){
						DropBeanUtil util = new DropBeanUtil() ;
						int position= getCellPosition(titleRow,excelItem.getFiledName());
						if(-1!=position){
							//用来验证时候校验
							value_temp= this.getValue((Cell) row.getCell(position));
							String dropName = util.getDropLabel(fieldExtend, value_temp);
							//校验
							String[] item_value = checkValue(dropName,insert_validate,row,param,titleRow);
							if(null!=item_value&&0!=item_value.length&&"1".equals(item_value[0])){
								//校验可以保存
								dropName=item_value[1];
							}else if(null!=item_value&&0!=item_value.length&&"0".equals(item_value[0])){
								message="导入失败<br/>"+item_value[1];
								com.haiyisoft.ep.log.LogUtil.getAppLoger().error(message);
								value[0]="0";
								value[1]=item_value[1];
								return value;
							}
							//如果是返回值
							if("Y".equals(excelItem.getFiledExcelcodeIsreturn())){
								value[0]="1";
								value[1]=dropName;
							}
							paramsList.addParam("st"+j, dropName);
						}else{
							message="导入失败<br/>"+message;
							com.haiyisoft.ep.log.LogUtil.getAppLoger().error("excel未找到有该列("+excelItem.getFiledName()+")");
							value[0]="0";
							value[1]="excel未找到有该列("+excelItem.getFiledName()+")";
							return value;
						}
					}else{
						int position= getCellPosition(titleRow,excelItem.getFiledName());
						if(-1!=position){
							//用来验证时候校验
							value_temp= this.getValue((Cell) row.getCell(position));
							if(null==value_temp){
								value_temp="";
							}
							//校验
							String[] item_value = checkValue(value_temp,insert_validate,row,param,titleRow);
							if(null!=item_value&&0!=item_value.length&&"1".equals(item_value[0])){
								//校验可以保存
								value_temp=item_value[1];
							}else if(null!=item_value&&0!=item_value.length&&"0".equals(item_value[0])){
								message="导入失败<br/>"+item_value[1];
								com.haiyisoft.ep.log.LogUtil.getAppLoger().error(message);
								value[0]="0";
								value[1]=item_value[1];
								return value;
							}
							//如果是返回值
							if("Y".equals(excelItem.getFiledExcelcodeIsreturn())){
								value[0]="1";
								value[1]=value_temp;
							}
							paramsList.addParam("st"+j, value_temp);
						}else{
							//如果都没有,判断验证列,如果验证列有方法执行方法
							if(null!=insert_validate&&!"N".equals(insert_validate)){
								//校验
								String[] item_value = checkValue("",insert_validate,row,param,titleRow);
								if(null!=item_value&&0!=item_value.length&&"1".equals(item_value[0])){
									//校验可以保存
									value_temp=item_value[1];
								}else if(null!=item_value&&0!=item_value.length&&"0".equals(item_value[0])){
									message="导入失败<br/>"+item_value[1];
									com.haiyisoft.ep.log.LogUtil.getAppLoger().error(message);
									value[0]="0";
									value[1]=item_value[1];
									return value;
								}
								//如果是返回值
								if("Y".equals(excelItem.getFiledExcelcodeIsreturn())){
									value[0]="1";
									value[1]=value_temp;
								}
								paramsList.addParam("st"+j, value_temp);
							}else{
								message="导入失败<br/>"+message;
								com.haiyisoft.ep.log.LogUtil.getAppLoger().error(message);
								value[0]="0";
								value[1]="excel未找到有该列("+excelItem.getFiledName()+")";
								return value;
							}
						}
					}
				}

			}

		}
		//插入数据库
		String sql="insert into "+sql_table+"("+sql_name+")"+" values("+sql_value+")" ;
		JPAUtil.executeNativeUpdate(sql,paramsList);
		return value;
	}
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-02 02:25:35

项目产品化——Excel数据库模板化导入(java)的相关文章

项目产品化升级数据库脚本问题——如何查询两个数据库差异的库表或者数据

项目产品化能够解决svn版本问题,防止一个现场发现问题需要修改多套程序的问题.但是同时带来新的问题,在项目需求变化的时候或者升级一个产品的时候,对应的数据库脚本就成为关键,这里介绍一个解决方法--数据链对比法. 通过建立数据链对比缺少的库表以及各种配置数据.当然,如果在开发的时候就合理的管理的数据库脚本就不会存在这样的问题 步骤: 1.建立数据链,打开pl/sql,右键点击database_links--新建,填写信息即可,对应的sql语句为,这里我建一个名字叫TEST的数据链 -- Drop

springboot项目实现excel静态模板下载

excel静态模板下载,有两种方式:第一种,在http头中指定输出文件流的类型为"application/vnd.ms-excel"类型时,输出流时就不需要添加输出文件的后缀名:第二种,指定文件流的类型为"multipart/form-data"时,输出流时需要判断文件是.xls/.xlsx,并且加上后缀名. 1.方式一: controller层代码: @GetMapping("/download") public Result<Strin

ASP.NET之Excel下载模板、导入、导出操作

1.下载模板功能 前提是服务器某文件夹中有这个文件.代码如下 1 protected void btnDownload_Click(object sender, EventArgs e) 2 { 3 var path = Server.MapPath(("upfiles\\") + "test.xlt"); //upfiles-文件夹 test.xlt-文件 4 var name = "test.xlt"; 5 6 try 7 { 8 var f

商城项目后台表格的模板化处理办法

一:展示效果 二:表格结构 1.表头的特殊处理 <div class="content_main"> <!--breadcrumb面包屑--> <ol class="breadcrumb ptb15 plr20 clearfix"> <li><a href="javascript:;" class="cursor_default">供销商管理</a><

java通过POI技术操作Excel(2)----模板读取,录入数据

先来回顾下通常把java对Excel的操作分为以下功能:1.生成模板,导出模板:2.填充模板,录入数据:3:读取数据库数据,导出数据:在上一篇博文中,我简单记录了模板生成和导出,在这篇博文中,主要来记录--Excel文件导入,数据录入(仍然是以jsp+servlet为例) 既然要解决这个问题,那首先来分析下我们需要面对的有哪些需求需要实现: 1.Excel文件导入(这是最基础的,巧妇难为无米之炊,导入环节也是查了好久才完成的); 2.Excel文件中数据的格式判定,你要读取文件,如果文件中其实没

利用Aspose.Word控件和Aspose.Cell控件,实现Word文档和Excel文档的模板化导出

我们知道,一般都导出的Word文档或者Excel文档,基本上分为两类,一类是动态生成全部文档的内容方式,一种是基于固定模板化的内容输出,后者在很多场合用的比较多,这也是企业报表规范化的一个体现. 我的博客介绍过几篇关于Aspose.Word控件和Aspose.Cell控件的使用操作,如下所示. <使用Aspose.Cell控件实现Excel高难度报表的生成(一)> <使用Aspose.Cell控件实现Excel高难度报表的生成(二)> <使用Aspose.Cell控件实现Ex

导入java项目时出现红色叹号问题的解决

问题:导入java项目时出现红色叹号(如下图所示) 原因:引入项目的某些jar包跟自己电脑上的位置不一样: 解决方案:步骤如下 (1)右键红色叹号所在项目————>build path————>Configure Build Path 出现下面窗口: (2)remove掉带红叉的选项:JRE System Library[jdk.7.0.72](unbound),然后Add Library(如下图): (3)选中 JRE System Library ————>next(如下图所示):

Eclipse导入Java项目时“No projects are found to import”错误的处理

用Eclipse导入Java项目时,经常会出现“No projects are found to import”错误(尤其是导入网上下载的项目时),这是因为文件夹里面没有.project和.classpath两个文件. 解决的办法很简单: 1.从其他Java项目里面复制这两个文件 2.修改文件,.classpath文件不用修改,.project只需要把name属性修改一下就可以 3.保存,再次导入,就没有“No projects are found to import”错误了 Eclipse导入

Excel中的数据导入到SqlServer数据库中

从SqlServer2008才开始支持导出表结构的和表中的数据,而SqlServer2008以前的数据库只支持导出表结构,有些时候我们可能需要把2008以前的数据库中的数据导出来,这个时候我们可以使用折中的方法,先把数据库导出到Excel中,再把Excel中的数据导入到数据库中(如果两台数据库服务器之间可以互通的话,可以直接建立远程链接进行数据传输,不用如此麻烦), 将SqlServer中的数据导出到Excel中比较简单,这里不再贴图,下面是把Excel中的数据导入到SqlServer中步骤: