您的位置:首页 > 数据库

Excel文件上传服务器并解析存入数据库的整套过程(2003--2013都可试)

2016-03-05 14:53 585 查看
运行环境搭建:

    JDK1.6.0

    MyEclipse 6.5

    Linux服务器

所需jar包:用积分到我的资源下载

java代码: 

ReadExcel03Util.java

package com.rapoo.excelToDB;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStream;

import java.text.NumberFormat;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Date;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import jxl.Workbook;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.apache.poi.hssf.usermodel.HSSFCell;

import org.apache.poi.hssf.usermodel.HSSFDateUtil;

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;

public class ReadExcel03Util{
HSSFWorkbook readbook;
HSSFSheet sheet;
String FormatDate;

Log log = LogFactory.getLog(this.getClass());

public  ReadExcel03Util(String uploadFilePath) throws IOException
{
FileInputStream fis=new FileInputStream(uploadFilePath);
POIFSFileSystem pfs=new POIFSFileSystem(fis);
readbook=new HSSFWorkbook(pfs);
sheet=readbook.getSheetAt(0);

}

public HSSFWorkbook getReadbook() {
return readbook;
}

public void setReadbook(HSSFWorkbook readbook) {
this.readbook = readbook;
}

public HSSFSheet getSheet() {
return sheet;
}

public void setSheet(HSSFSheet sheet) {
this.sheet = sheet;
}

public List<List<String>> ItermCell(HSSFSheet sheet){
List<List<String>> str1 = new ArrayList<List<String>>();    

lable:
  // 遍历行Row

 
  for(int rowNum=1;rowNum<=sheet.getLastRowNum();rowNum++){
  
  log.info("总共的行数:"+sheet.getLastRowNum());
  List<String> str2 = new ArrayList<String>();
           HSSFRow hssfRow=sheet.getRow(rowNum);
            if(hssfRow==null){
                break lable;
            }
            // 遍历列Cell
            for(int cellNum=0;cellNum<hssfRow.getLastCellNum();cellNum++){
           
 
           
String hssfCell = getCellValue(rowNum,cellNum);
              
           

           
log.info("hssfCell的值:======"+hssfCell);
                str2.add(hssfCell);
            }
            
            str1.add(str2);
  }
  return str1;
  
}

public  int getsheetLastRow(){

return sheet.getLastRowNum();

}

public  String getCellValue(int row, int col) {

String value="";
if(sheet==null)return "";
HSSFRow hrow=sheet.getRow(row);
if(hrow==null)return "";
HSSFCell cell=hrow.getCell((short) col);
if(cell==null)
return "";
int type=cell.getCellType();
switch(type)
{
case HSSFCell.CELL_TYPE_NUMERIC: 
if (HSSFDateUtil.isCellDateFormatted(cell)) {
Date date = cell.getDateCellValue();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
value = sdf.format(date);
} else {
NumberFormat formatter = NumberFormat.getNumberInstance();
formatter.setMaximumFractionDigits(3);
String newD = formatter.format(
(Double) cell.getNumericCellValue()).toString()
.replace(",", "");
value = newD;
}
break;
case HSSFCell.CELL_TYPE_STRING: value=cell.getStringCellValue();break;
case HSSFCell.CELL_TYPE_FORMULA:value=cell.getStringCellValue();break;
case HSSFCell.CELL_TYPE_BOOLEAN:value=cell.getBooleanCellValue()+"";break;
case HSSFCell.CELL_TYPE_BLANK: value="";break;

default:value="";
}
return value.trim();
}
public int getRows()
{
if(sheet!=null)
return sheet.getPhysicalNumberOfRows();
else
return 0;
}

public String getDateCellValue(int r, short col) {

try{
if(getSheet()==null)
return getCellValue(r,col);
HSSFRow row=getSheet().getRow(r);
if(row==null)
return getCellValue(r,col);
HSSFCell cell=row.getCell(col);
if(cell==null)
return getCellValue(r,col);
Date date=cell.getDateCellValue();
return FormatDate.format("yyyy-MM-dd",date);
}catch(Exception e)
{
e.printStackTrace();
return getCellValue(r,col);
}

}

    public int getFirstRow()

    {

        

        return sheet.getFirstRowNum();

    }

    public int getCols(int row)

    {

        

        return sheet.getRow(row).getPhysicalNumberOfCells();

    }

    

    

}

ReadExcel10Util.java

package com.rapoo.excelToDB;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStream;

import java.text.NumberFormat;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Date;

import java.util.List;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import org.apache.poi.poifs.filesystem.POIFSFileSystem;

import org.apache.poi.ss.usermodel.DateUtil;

import org.apache.poi.xssf.usermodel.XSSFCell;

import org.apache.poi.xssf.usermodel.XSSFRow;

import org.apache.poi.xssf.usermodel.XSSFSheet;

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ReadExcel10Util {

Log log = LogFactory.getLog(this.getClass());

XSSFSheet xssfSheet;
XSSFWorkbook readbook;

public ReadExcel10Util(String fileurl) throws IOException{

FileInputStream fis= new FileInputStream(fileurl);
readbook= new XSSFWorkbook(fis);
xssfSheet= readbook.getSheetAt(0);

}
/**
* 读取excel中sheet的数量,sheet中每行每列的值

* @param fileurl
* @return
*/
public List<List<String>> ItemVale(XSSFWorkbook readbook){

log.info("进入ItemVale方法++++++++++++++++++");

List<List<String>> str1 = new ArrayList<List<String>>();    //存入excel中的数据

log.info("xssfWorkbook++++++++++++++++++");

//1.循环读取所有的sheet
tlable :

for (int numSheet = 0; numSheet < readbook.getNumberOfSheets(); numSheet++) 
{
 
log.info("获取sheet表====="+readbook.getNumberOfSheets());

xssfSheet = readbook.getSheetAt(numSheet);

   if (xssfSheet == null) {
      break tlable;
   }

   log.info("读取sheet文件的所有行数======="+xssfSheet.getLastRowNum());
   //2.读取行元素
   for (int rowNum = 1; rowNum <=xssfSheet.getLastRowNum(); rowNum++) 
   {
    List<String> str2 = new ArrayList<String>();  //每列中存入的数据
   
    XSSFRow xssfRow = xssfSheet.getRow(rowNum);
   
    if (xssfRow == null) {
    break tlable;
    }
   
    for(int sheetcol=0;sheetcol<xssfRow.getLastCellNum();sheetcol++)
    {
   
   
    log.info("读取每行元素的每列数值======"+xssfRow.getLastCellNum());
   
    XSSFCell cell = xssfRow.getCell(sheetcol);
   
    String val = getCellValue(rowNum,sheetcol);
   
    log.info("每行元素的每列的数据:"+val);
    str2.add(val);
    }
   
    str1.add(str2);
   }
   
}

return str1;

}

/**
* 2010版本Excel

* 获取cellValue值  判断每行每列的类型返回String value值 
* @param row
* @param col
* @return
*/
public  String getCellValue(int row, int col) {

String value="";
if(xssfSheet==null)return "";
XSSFRow hrow= xssfSheet.getRow(row);
if(hrow==null)return "";
XSSFCell cell= hrow.getCell(col);
if(cell==null)
return "";
int type= cell.getCellType();
switch(type)
{
case XSSFCell.CELL_TYPE_NUMERIC: 
if (DateUtil.isCellDateFormatted(cell)) {
Date date = cell.getDateCellValue();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
value = sdf.format(date);
} else {
NumberFormat formatter = NumberFormat.getNumberInstance();
formatter.setMaximumFractionDigits(3);
String newD = formatter.format(
(Double) cell.getNumericCellValue()).toString()
.replace(",", "");
value = newD;
}
break;
case XSSFCell.CELL_TYPE_STRING: value=cell.getStringCellValue();break;
case XSSFCell.CELL_TYPE_FORMULA:value=cell.getStringCellValue();break;
case XSSFCell.CELL_TYPE_BOOLEAN:value=cell.getBooleanCellValue()+"";break;
case XSSFCell.CELL_TYPE_BLANK: value="";break;

default:value="";
}
return value.trim();
}

public XSSFSheet getXssfSheet() {
return xssfSheet;
}

public void setXssfSheet(XSSFSheet xssfSheet) {
this.xssfSheet = xssfSheet;
}
public XSSFWorkbook getReadbook() {
return readbook;
}
public void setReadbook(XSSFWorkbook readbook) {
this.readbook = readbook;
}

}

NewMyExcel.java

package com.rapoo.excelToDB;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.io.PrintWriter;

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.DiskFileUpload;

import org.apache.commons.fileupload.FileItem;

import org.apache.commons.fileupload.FileItemFactory;

import org.apache.commons.fileupload.FileUploadException;

import org.apache.commons.fileupload.disk.DiskFileItemFactory;

import org.apache.commons.fileupload.servlet.ServletFileUpload;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.apache.poi.hssf.usermodel.HSSFSheet;

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import weaver.conn.RecordSet;

import weaver.file.FileUploadToPath;

import weaver.general.GCONST;

public class NewMyExcel extends HttpServlet{

Log log = LogFactory.getLog(this.getClass());

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

log.info("进入NewMyExcelServle方法++++++++++");

   /**
    * 一、先删除suppliernumber表中的数据,再插入新数据
    * 
    */
   String delExcel = "delete from suppliernumber";
   
   RecordSet recordSet=new RecordSet();

    recordSet.execute(delExcel);
   
   String selExcel = "select * from suppliernumber";
   RecordSet selRecordSet=new RecordSet();
   selRecordSet.execute(selExcel);
   
   if(selRecordSet.next()){
   
    log.info("删除失败!------------");
   }else{
   
    log.info("删除成功!------------");
   }

log.info("进入MyReadExcel中的doPost方法");

/**
* 二、将Excel存入服务器

*/
String tmpPath = "/app/ecology/tempfile/";   //存Excel文件的路径
String dirPath ="";                          //存Excel文件的路径地址(包含Excel名字)

//1.创建解析工厂
DiskFileUpload factory = new DiskFileUpload();
 

 
//2.解析
List<FileItem> items = null;
 
try {
items = factory.parseRequest(request);

} catch (FileUploadException e) {
e.printStackTrace();
}

String repName = "";

//3.遍历

File file1 ;
for(FileItem item : items){

if(item.getFieldName().equals("excelData"))
{
//将文件名加上唯一的标识  保证文件名不重复
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyMMddHHmmss");
String primatekey= sdf.format(date);

//获得字段名
String name = item.getFieldName();
log.info("字段名称=========:"+name);

//获得文件名
String fileName = item.getName();
log.info("文件名称=========:"+fileName);

int startSub = fileName.indexOf(".");
repName = fileName.substring(startSub);

log.info("截取的文件后缀名字==="+repName);

dirPath = primatekey+repName;

File remoteFile = new File(new String(dirPath.getBytes(),"utf-8"));

//4.将文件存入相应路径

log.info("存放新文件的路径======"+tmpPath+"文件名:"+dirPath);

file1 = new File(tmpPath, remoteFile.getName());

file1.createNewFile();     //创建新文件

InputStream ins = item.getInputStream();    //FileItem的内容

OutputStream ous  = new FileOutputStream(file1);

byte[] buffer = new byte[1024];   //字节缓存
int len = 0 ;

while((len = ins.read(buffer)) > -1){

ous.write(buffer, 0, len);

}

ins.close();
ous.close();
}

}

/**

* 三、判断上传文件后缀名,不同版本Excel导入数据
*
*/

String returnval = "";                 

String Excelurl = tmpPath+dirPath;

if(Common.OFFICE_EXCEL_2010_POSTFIX.equals(repName)){

//1.读取10版本Excel文件中的数据
ReadExcel10Util mrs = new ReadExcel10Util(Excelurl);      //始化Excel中的数据内容

XSSFWorkbook readbook = mrs.getReadbook();

List<List<String>>  excelVal =
mrs.ItemVale(readbook);

   
   for(int i =0;i<excelVal.size();i++)
   {
    List<String> colStr = excelVal.get(i);
   
    log.info("Excel表行数:===="+excelVal.size()+"列数:===="+colStr.size());
   
    String _inVal = ""; 
    for(int j =0;j<colStr.size();j++)
    {
    _inVal = _inVal+"'"+colStr.get(j)+"'"+",";
   
   
    }
   
    if(_inVal.length()>0)
    {
   
    String sqlVals = _inVal.substring(0, _inVal.length()-1);
    log.info("插入suppliernumber数据的val值:"+sqlVals);
   
    String sql = "insert into suppliernumber(BH,GYSJC,GYSMC,XXGL,WLLB,SL,FKTJ,FKTJ2)values("+sqlVals+")";
   
    log.info("sql插入数据======="+sql);
   
   RecordSet inseSql=new RecordSet();
   inseSql.execute(sql);
   
    returnval="<div style='position:absolute;top: 50%;left:50%'><font color='red'>数据导入成功!</font></div>";
    }else{
   
    returnval="<div style='position:absolute;top: 50%;left:50%'><font color='red'>数据导入失败!</font></div>";
    }
   }

}
if(Common.OFFICE_EXCEL_2003_POSTFIX.equals(repName))
{

//1.读取03版本Excel文件中的数据
ReadExcel03Util mrs = new ReadExcel03Util(Excelurl);      //始化Excel中的数据内容

HSSFSheet hfs = mrs.getSheet();                   //03版本获取构造函数中的sheet文件
   
   List<List<String>> strList = mrs.ItermCell(hfs);        //遍历循环sheet文件中的数据

   
   //2.将数据插入数据库
   
   for(int i =0;i<strList.size();i++)
   {
    List<String> colStr = strList.get(i);
   
    String _inVal = ""; 
    for(int j =0;j<colStr.size();j++)
    {
    _inVal = _inVal+"'"+colStr.get(j)+"'"+",";
   
    }
   
    if(_inVal.length()>0)
    {
   
    String sqlVals = _inVal.substring(0, _inVal.length()-1);
    log.info("插入suppliernumber数据的val值:"+sqlVals);
   
    String sql = "insert into suppliernumber(BH,GYSJC,GYSMC,XXGL,WLLB,SL,FKTJ,FKTJ2)values("+sqlVals+")";
   
    log.info("sql插入数据======="+sql);
   
   RecordSet inseSql=new RecordSet();
   inseSql.execute(sql);
   
       returnval="<div style='position:absolute;top: 50%;left:50%'><font color='red'>数据导入成功!</font></div>";
    }else{
   
    returnval="<div style='position:absolute;top: 50%;left:50%'><font color='red'>数据导入失败!</font></div>";
    }
   }
   

}  

response.setHeader("content-type", "text/html;charset=GBK");
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
PrintWriter out = null;
try {
out = response.getWriter();
} catch (IOException e) {
e.printStackTrace();
}
out.print(returnval);
out.flush();
out.close();

}

}

Common.java

package com.rapoo.excelToDB;

public class Common {

public static final String OFFICE_EXCEL_2003_POSTFIX = ".xls";
public static final String OFFICE_EXCEL_2010_POSTFIX = ".xlsx";
 

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: