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);
}



watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

一、可以解决的excel导入:

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

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

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

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

二、数据库配置

说明: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表示非返回值的字段

三、核心代码

因为本人比較懒。大家就将就着看吧,代码有点多,重要的代码都在这,我就不提取了,事实上后面的代码都是次要的。上面的知道是怎么回事,大家全然能够自己写,自己写的代码以后改动还easy改动。再多说一句:重点在数据库
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;
}
}

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

  1. 项目总结04:SQL批量导入数据:将具有多表关联的Excel数据,通过sql语句脚本的形式,导入到数据库

    将具有多表关联的Excel数据,通过sql语句脚本的形式,导入到数据库 写在前面:本文用的语言是java:数据库是MySql: 需求:在实际项目中,经常会被客户要求,做批量导入数据:一般的简单的单表数 ...

  2. ssm框架之将数据库的数据导入导出为excel文件

    在这里首先我要将自己遇到的各种问题,以及需求记录下来,做一个备忘,便于以后查看: 需求:主要实现两个功能,将oracle数据库里的数据导出为excel,同时需要将excel表格的数据导入到数据库 环境 ...

  3. 导入导出笔记-easyExcel初探(表格导入和模板化导出)

    前言 本文使用的EasyExcel Alibaba和EasyPoi Apache技术栈分析 EasyExcel Dependency EasyPoi Dependency 1.需求一:表格化需求导入导 ...

  4. jsp+servlet上传excel并将数据导入到数据库表的实现方法

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

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

    我们知道,一般都导出的Word文档或者Excel文档,基本上分为两类,一类是动态生成全部文档的内容方式,一种是基于固定模板化的内容输出,后者在很多场合用的比较多,这也是企业报表规范化的一个体现. 我的 ...

  6. 图解如何 将Excel里的数据导入到sql server数据库中

    项目中,经常会碰到如何将Excel里的数据导入到sql server中的问题. 下面,图解如何实现导入Excel中的数据到sql server 2008 R2: Excel截图如下: 查询pub数据库 ...

  7. Java项目专栏之数据库建表

    Java项目专栏之数据库建表 数据库建表前期准备 1. 安装mysql:数据库语言,语法和sql server差不太多,如果习惯于sql server可以不用mysql. 2. 安装navicat:可 ...

  8. 使用openpyxl模块将Excel中的数据导入数据库

    这里将不介绍openpyxl模块的详细操作. 主要就是记录一个使用openpyxl模块将Excel表格的数据导入数据库中的实例. from openpyxl import load_workbook ...

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

    用Eclipse导入Java项目时,经常会出现“No projects are found to import”错误(尤其是导入网上下载的项目时),这是因为文件夹里面没有.project和.class ...

随机推荐

  1. S - New Year Transportation

    Problem description New Year is coming in Line World! In this world, there are n cells numbered by i ...

  2. C#之实体类

    一.为什么要用实体类? |  使程序简洁易懂,便于维护. |  暗合接口不变原则. |  体现面向对象思想.         举例说明: 不用实体类的三层 假如程序有所变动,需要增加一个参数,学生年龄 ...

  3. DeltaFish 校园物资共享平台 第一次小组会议

    软工小组第一次会议 会议地点:图书馆 会议时间:19:00 ~ 20:00 与会人员:软工小组全体成员 请假人员:无缺席人员:无 记录人:陈志锴 整理人:曾子轩 会议记录 一.确认选题 每一位成员提出 ...

  4. 【Oracle】服务器端监听配置

    一.静态监听 创建端口为1521的监听,静态注册,本机ip:192.168.10.2 [oracle@localhost ~]$ vi /u01/app/oracle/product/11.2.0/d ...

  5. Visual Studio UI Automation 学习(一)

    这几天需要研究自动化测试工具,因为团队开发使用visual studio,所以需要研究一下Visual studio自带的框架. 刚开始安装的时候,没有选自定义安装,所以安装完成后没有找到UI Aut ...

  6. VTK初始化New返回Null问题

    原文链接:http://www.cppblog.com/mythma/archive/2013/08/02/vtk-6-new-null.html 在使用VTK6.0时候,会遇到X::New()返回为 ...

  7. HDU_2149_基础博弈sg函数

    Public Sale Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  8. Hadoop-2.2.0集群部署时live nodes数目不对的问题

    关于防火墙,hadoop本身配置都确定没任何问题,集群启动不报错,但打开50070页面,始终live nodes数目不对,于是我尝试/etc/hosts文件配置是否存在逻辑的错误: 127.0.0.1 ...

  9. 团体程序设计天梯赛-练习集-L1-036. A乘以B

    L1-036. A乘以B 看我没骗你吧 —— 这是一道你可以在10秒内完成的题:给定两个绝对值不超过100的整数A和B,输出A乘以B的值. 输入格式: 输入在第一行给出两个整数A和B(-100 < ...

  10. C++ (带有默认参数的函数参数)缺省函数参数

    缺省参数?在C++中,允许实参的个数与形参的个数不同.在声明函数原型时,为一个或者多个形参指定默认值,以后调用这个函数时,若省略某一个实参,c++则自动的以默认值作为相应参数的值. 实列说明:#inc ...