上传excel数据到数据库中

上传excel表格数据到数据库

导入固定路径下的excel数据到数据库

    <form id="disposeFlightDataForm" action="../upload/disposeFlightData"
        method="post">
        <input id="disposeFlightDataButton" type="submit" value="处理航班数据" />
    </form>

后台代码类

@Controller
@RequestMapping(value = "/upload")
public class UploadSaleDataAction

    /**
     * 页面上传excel文件保存到tomcat的sams/upload目下
     *
     * @param file
     * @param request
     * @param model
     */
    @RequestMapping(value = "/disposeFlightData")
    public String disposeFlightData() {
        flightDataService.disposeFlightData();
        return GO_UPLAODEXCEL;
    }

@Component
@Transactional
@Service
public class FlightDataServiceImpl implements FlightDataService类

    @Override
    public void disposeFlightData() {
        // 接收的文件所在目录
        String filePath = "E:/Accpet";
        FileOperate.newFolder(filePath);
        File fileDir = new File(filePath);
        File[] flightDataFiles = fileDir.listFiles();
        System.out.println("该目录下对象个数:" + flightDataFiles.length);

        // 循环目录下的文件
        for (int i = 0; i < flightDataFiles.length; i++) {
            System.out.println("第"+i+"对象个数:"+flightDataFiles[i].getName());
            File flightDataFile = flightDataFiles[i];
            if (flightDataFile.exists() && flightDataFile.isFile()
                    && flightDataFile.getName().lastIndexOf(".xls") > 0
                    && DateUtil.isValidDate(flightDataFile.getName().substring(0, 8))) {
                List<FlightData> fdList = DisposeFlightData
                        .parseExcelToFlightData(flightDataFile);
                List<FlightData> addfdList = new ArrayList<FlightData>();
                for (int j = 0; j < fdList.size(); j++) {
                    System.out.println(flightDataFiles[i].getName()+j);
                    FlightData fd = fdList.get(j);
                    FlightData data = flightDataDao.findFlightData(fd);
                    if (data == null) {
                        addfdList.add(fd);
                    }            //批量处理添加,每1000条保存一次
                    if(addfdList.size()%1000==0||j==fdList.size()-1){
                        flightDataDao.addFdList(addfdList);
//                        flightDataDao.addFdList(fdList);
                        addfdList.clear();
                    }
                }
            } else {
                String newPath = "E:/Reject";
                FileOperate.newFolder(newPath);
                FileOperate.moveFile(flightDataFile.getPath(),
                        newPath + "/" + flightDataFile.getName());
            }
        }
    }

解析excel数据到实体类

package cn.com.acca.sams.sales.test;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

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

import cn.com.acca.sams.common.utils.XlsReader;
import cn.com.acca.sams.sales.domainmodel.FlightData;

/**
 *
 * 航班数据解析入库.
 *
 * @author Yan jianjun
 * @since 2015-09-14
 */
public class DisposeFlightData {

    /**
     * 解析excel航班数据设置到FlightData对象中
     *
     * @param file
     * @return
     */

    public static List<FlightData> parseExcelToFlightData(File file) {
        XlsReader xlsReader = XlsReader.loadXls(file.getPath());
        HSSFSheet sheet = null;
        HSSFRow row = null;

        String fileName = file.getName();// forexample:20150601MUD.xls,20150601MUI.xls
        // 接口文件名 ,东航航班数据文件的文件名
        String interfaceFile = fileName;

        fileName = fileName.split("\\.")[0];

        SimpleDateFormat sdf = new SimpleDateFormat(DateUtil.DATEFORMAT2);
        Date date = new Date();

        List<FlightData> flightDataList = new ArrayList<FlightData>();
        for (int i = 0; i < xlsReader.getSheets(); i++) {
            sheet = xlsReader.getSheetBySheetNo(i);
            // System.out.println("总行数---》" + (sheet.getPhysicalNumberOfRows() - 1));
            // 这里j从1开始,即从第二行起,因为第一行是属性名,不用读取。
            for (int j = 1; j < sheet.getPhysicalNumberOfRows(); j++) {
//            for (int j = 33955; j < sheet.getPhysicalNumberOfRows(); j++) {
                row = sheet.getRow(j);
                // 判断如果第一列为空不处理
                if (row.getCell(0).getStringCellValue() != null
                        && !"".equals(row.getCell(0).getStringCellValue())) {

                    FlightData flightData = new FlightData();
//                    flightData.setFlightDate(Long.valueOf(flightDate));
//                    flightData.setMarketCarrier(marketCarrier);
                    flightData.setFileName(interfaceFile);
//                    flightData.setDiInd(DI);
//                    flightData.setInterfaceDate(interfaceDate);
                    flightData.setCreatedDate(date);

                    setValueToFlightData(flightData, row);
                    flightDataList.add(flightData);
                }
            }
        }

        return flightDataList;
    }

    /**
     * 将一行航班数据设置到FlightData对象中
     *
     * @param row
     */
    private static void setValueToFlightData(FlightData flightData,  HSSFRow row) {
        HSSFCell cell = null;
        //设置航班日期
       String flightDate = row.getCell(0).getStringCellValue().replace("-", "");
//       if(flightDate.equals("20150919")&&row.getCell(2).getStringCellValue().equals("7158")){
//           System.out.println(row.getCell(10).getStringCellValue());
//       }
       flightData.setFlightDate(Long.valueOf(flightDate));
        //承运人
        String  operateCarrier = row.getCell(1).getStringCellValue();
        flightData.setOperateCarrier(operateCarrier);

        // 设置航班号
        cell = row.getCell(2);
//      flightData.setMarketFlightNo(filterString(cell.getStringCellValue().replaceAll("CES", "MU")));
        flightData.setOperateFlightNo(operateCarrier+cell.getStringCellValue());
        // 设置飞机注册号
        cell = row.getCell(3);
        flightData.setAircraftRegistrationNo(cell.getStringCellValue());
       // 设置机型
//        cell = row.getCell(2);
//        flightData.setAirCraft(cell.getStringCellValue());
        //性质
        cell = row.getCell(4);
        flightData.setProperty(cell.getStringCellValue());
        // 设置起飞地
        cell = row.getCell(6);
        flightData.setDepartureStation(cell.getStringCellValue());
        //计划起飞站
        cell = row.getCell(7);
        flightData.setPlannedAepartureStation(cell.getStringCellValue());
        // 计算后的最终日期
        Date finalDate = null;
        // 计飞
        cell = row.getCell(8);
        finalDate = calDate(flightDate, cell);
        if (finalDate != null) {
            flightData.setPlannedDepartureDate(finalDate);
        }
        //关舱门日期
        cell = row.getCell(9);
        finalDate = calDate(flightDate, cell);
        if (finalDate != null) {
            flightData.setCloseDoorDate(finalDate);
        }
        // 实飞
        cell = row.getCell(10);
        finalDate = calDate(flightDate, cell);
        if (finalDate != null) {
            flightData.setActualDepartureDate(finalDate);
        }

        //到站
        cell = row.getCell(11);
        flightData.setArrivalStation(cell.getStringCellValue());

        // 计划到达站
        cell = row.getCell(12);
        flightData.setPlannedArrivalStation(cell.getStringCellValue());
        //计划到达日期,时间
        cell = row.getCell(13);
        finalDate = calDate(flightDate, cell);
        if (finalDate != null) {
            flightData.setPlannedArrivalDate(finalDate);
        }
        //实际降落(到达)日期,时间 实到
        cell = row.getCell(14);
        finalDate = calDate(flightDate, cell);
        if (finalDate != null) {
            flightData.setActualArrivalDate(finalDate);
        }

//        // 预飞
//        cell = row.getCell(5);
//        finalDate = calDate(flightDate, cell);
//        if (finalDate != null) {
//            flightData.setEstimateUplDate(finalDate);
//        }

        //统计原因
        cell = row.getCell(17);
        flightData.setStatiscalReason(cell.getStringCellValue());

        // 备注
        cell = row.getCell(22);
        flightData.setRemarks(cell.getStringCellValue());

    }

    /**
     * 计算(计飞、预飞、实飞)日期,根据单元格中时间的后缀,计算(计飞、预飞、实飞)的日期是航班日期的前一天、后一天、当天。
     * @param flightDate 航班日期
     * @param cell (计飞、预飞、实飞)时间单元格
     * @return
     */
    private static Date calDate(String flightDate, HSSFCell cell) {
        String cellValue = cell.getStringCellValue();
        if (cellValue != null && !"".equals(cellValue)) {
            String time = cellValue.substring(0, 4);
            Date date = null;
            if (cellValue.lastIndexOf("-") > 0) {
                date = DateUtil.getBeforeDay(DateUtil.strToDate(flightDate + time, DateUtil.DATEFORMAT1));
            } else if (cellValue.lastIndexOf("+") > 0) {
                date = DateUtil.getAfterDay((DateUtil.strToDate(flightDate + time, DateUtil.DATEFORMAT1)));
            } else {
                date = DateUtil.strToDate(flightDate + time, DateUtil.DATEFORMAT1);
            }
            return  date;
        }
        return null;
    }

    /**
     * 过滤特殊字符
     *
     * @param str
     * @return
     * @throws PatternSyntaxException
     */
    private static String filterString(String str) throws PatternSyntaxException {
        // 只允许字母和数字 String regEx ="[^a-zA-Z0-9]";
        // 清除掉所有特殊字符
        String regEx = "[`[email protected]#$%^&*()+=|{}‘:;‘,\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]";
        Pattern p = Pattern.compile(regEx);
        Matcher m = p.matcher(str);
        return m.replaceAll("").trim();
    }

    public static void main(String[] args) {

//        long startTime = System.currentTimeMillis(); // 获取开始时间
//
//        // 接收的文件所在目录
//        String fileDir = "F:/Accpet";
//        File file = new File(fileDir);
//        File[] flightDataFiles = file.listFiles();
//        System.out.println("该目录下对象个数:" + flightDataFiles.length);
//        // 循环目录下的文件
//        for (int i = 0; i < flightDataFiles.length; i++) {
//            if (flightDataFiles[i].isFile()) {
//                File flightDataFile = flightDataFiles[i];
//                System.out.println("文     件--》:" + flightDataFile);
//                List<FlightData> fdList = parseExcelToFlightData(flightDataFile);
//                for (int j = 0; j < fdList.size(); j++) {
//                    FlightData fd = fdList.get(j);
//                    System.out.println(j + "<----->" + fd.toString());
//                }
//            }
//        }
//
//        long endTime = System.currentTimeMillis(); // 获取结束时间
//        long totalTime = endTime - startTime;
//        System.out.println("程序运行时间: " + totalTime + "ms");

    }

}

将session中的实体保存导数据库中

/* (non-Javadoc)
     * @see cn.com.acca.sams.sales.dao.FlightDataDao#addFdList(java.util.List)
     */
    @Override
    public void addFdList(List<FlightData> addfdList) {
        // TODO Auto-generated method stub

        for(int i = 0;i<addfdList.size();i++){
            System.out.println("添加"+i);
          super.add(addfdList.get(i));
        }
//        super.add(addfdList);
        super.getEm().flush();//提交session中的对象到数据库中
        super.getEm().clear();//清除session对象,由托管状态变为游离态
}
时间: 2024-08-07 08:37:36

上传excel数据到数据库中的相关文章

上传Excel数据到数据库中(Asp.net自动生成三层代码 第六集 )

上传文件 string savePath = Server.MapPath("~/upload/");//指定上传文件在服务器上的保存路径 //检查服务器上是否存在这个物理路径,如果不存在则创建 if (!System.IO.Directory.Exists(savePath)) { System.IO.Directory.CreateDirectory(savePath); } if (FileUpload1.HasFile) { string fileExtension = Pat

SpringMVC 实现POI读取Excle文件中数据导入数据库(上传)、导出数据库中数据到Excle文件中(下载)

读取Excle表返回一个集合: package com.shiliu.game.utils; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Field; import java.lang.reflect

jQuery+php+ajax+PHPExcel实现上传excel文件导入数据库

项目中需要批量导入数据,感觉这个需求以后也会经常用,必须总结分享下: 引入jquery的第三方表单插件: <scripttype="text/javascript"src="/js/lib/jquery.ajax.form.js"></script> 视图文件:goods_list.ctp(商品列表), <div class="btnimport"> <form class='myupload' acti

ABAP根据输入的表名动态生成上传EXCEL数据的代码

开发技术: 1.文本文件上载技术 2.动态程序代码生成技术 3.ABAP动态程序执行技术 4.TXT文本文件对应用Table字段编辑技术 注意事项: 文件文件编辑过程中时间日期格式为 20060201 120000 表示 2006.02.01 12:00:00 文本文件中不能包含除字符,数字之外的其他特殊符号.假如Table中对应的字段数据为空时,在编辑数据时也对应该列为空. EXCEL 文件必须带表头. 程序代码:如下 *&-----------------------------------

asp.net 从Excel表导入数据到数据库中

http://www.cnblogs.com/hfzsjz/archive/2010/12/31/1922901.html http://hi.baidu.com/ctguyg/item/ebc857e90e436ae1fb42ba01 1 <form action="" method="post" runat ="server"> 2 <div> 3 <span>请选择文件:</span><

下载不含数据EXCEL的固定表头模版(标准EXCEL只含有列头),然后上传EXCEL.显示成功和上传失败的EXCEL连接

<div id="import" runat="server" visible="false"> Step1:<asp:HyperLink ID="HyperLink1" NavigateUrl="~/CommonTemplate/设备清单模版.xlsx" runat="server">下载模版</asp:HyperLink><br />

使用ocupload和POI一键上传Excel并解析导入数据库

使用的工具如下:  JQuery ocupload jquery.ocupload-1.1.2.js Apache POI  poi-3.9.jar 如果是Maven项目添加依赖如下: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.9</version> </dependency> J

eclipse中导入jdk源码、SpringMVC注解@RequestParam、SpringMVC文件上传源码解析、ajax上传excel文件

eclipse中导入jdk源码:http://blog.csdn.net/evolly/article/details/18403321, http://www.codingwhy.com/view/799.html. ------------------------------- SpringMVC注解@RequestParam:http://825635381.iteye.com/blog/2196911. --------------------------- SpringMVC文件上传源

Thinkphp5+PHPExcel实现批量上传表格数据功能

http://www.jb51.net/article/129262.htm 1.首先要下载PHPExcel放到vendor文件夹下,我的路径是:项目/vendor/PHPExcel/,把下载的PHPExcel文件放在这里 2.前端代码 <!DOCTYPE html> <html> <head> <title>批量导入数据</title> </head> <body> <form action="{:url