Java 上传读取Excel文件

Web中導入Excel文件

ExtJs前端代碼:

//=========上傳Excel=============================

uploadPanel =  new Ext.form.FormPanel({

            fileUpload: true,

            id:'fileUploadForm',

            frame:true,

            labelAlign:'right',

            buttonAlign:'center',

            labelWidth: 60,

            items: [{

                xtype: 'textfield',

                fieldLabel: '文件',

                id: 'file',

                inputType: 'file'

            }],

           buttons: [{

              text:'提交',

              id:'tijiao',

              handler:function(){

                 var src=Ext.getCmp('file').getValue();

                 var filetype=src.split('.');

                 if(filetype[filetype.length-1].toLowerCase()!='xls'){

                    Ext.Msg.alert('提示','請選擇Excel文件!',function(){

                             uploadPanel.getForm().getEl().dom.reset();

                             Ext.getCmp('file').focus();

                       });

                    return;

                 }

                 if(src==''){

                    Ext.getCmp('file').focus();

                    return;

                 }

                 uploadPanel.getForm().submit({

                    method : 'post',

                    url:'paAction.do?actionType=uploadExcel',

                    waitTitle: '請稍後',

                    waitMsg: '正在導入 ...',

                    success : function(form, action){

                             if(action.result.success=='true'){

                                 Ext.Msg.alert('提示','導入成功!',function(){

                                           uploadPanel.getForm().getEl().dom.reset();

                                           win4.hide();

                                           store1.removeAll();

                                           store1.reload();

                                           win.show();

                                        });

                             }else{

                               Ext.Msg.alert('提示','導入失敗!');

                             }

                      },

                    failure: function(form, action){

                               Ext.Msg.alert('提示','導入失敗!');

                      }

                  });

             }

           },{

              text: '關閉',

              handler:function(){

                     win4.hide();

            }

        }]

    });

    var win4= new Ext.Window({

            title:'輸入/導入數據',

            width: 350,

            height:150,

            layout: 'fit',

            shadow:false,

            plain:true,

            bodyStyle:'padding:5px;',

            closeAction:'hide',

            items:uploadPanel

        });

    win4.on('hide',function(){

            uploadPanel.getForm().getEl().dom.reset();

    });

java後臺代碼:

  public ActionForward uploadExcel(ActionMapping actionMapping,       

                                      ActionForm actionForm,

                                      HttpServletRequest httpServletRequest,

                                      HttpServletResponse httpServletResponse) throws

         IOException, ServletException, SQLException, Exception {

       String user_id = httpServletRequest.getSession().getAttribute("user_id").

           toString();

       String ip = httpServletRequest.getRemoteHost();

       ArrayList plans = new ArrayList();

       String newFullNewPath = "";

       String returnvalue = "";

       boolean success = true;

       uploadForm fileForm = (uploadForm) actionForm;

       //System.out.println(fileForm);

       FormFile file = fileForm.getFile();

       String filePath = httpServletRequest.getSession().getServletContext().

           getRealPath("/");

       try {

         newFullNewPath = filePath + "\\Excel\\";

         File f = new File(newFullNewPath);

         if (!f.isDirectory()) {

           f.mkdirs();

         }

         newFullNewPath = newFullNewPath + file.getFileName().toString();

         InputStream is = file.getInputStream();

         FileOutputStream foutput = new FileOutputStream(new File(newFullNewPath), false);

         BufferedOutputStream bos = new BufferedOutputStream(foutput);

         int len = 0;

         byte[] buffer = new byte[8192];

         while ( (len = is.read(buffer, 0, 8192)) != -1) {

           bos.write(buffer, 0, len);

         }

         is.close();

         bos.close();

         foutput.close();

       }

       catch (FileNotFoundException e) {

         success = false;

         e.printStackTrace();

       }

       catch (IOException e) {

         success = false;

         e.printStackTrace();

       }

       plans = readExcel(newFullNewPath);

       success = insert(plans, user_id,ip);

       file.destroy();

       File ff = new File(newFullNewPath);

       ff.delete();

       returnvalue = "{success:'" + success + "',oper_id:'" + user_id + "'}";

       try {

         httpServletResponse.setContentType("text/html; charset=utf-8");

         httpServletResponse.getWriter().write(returnvalue);

       }

       catch (IOException ex) {

         ex.printStackTrace();

       }

       return actionMapping.findForward("");

}

//讀取Excel文檔(excel2003)

 protected ArrayList readExcel(String filePath) {

     ArrayList pm_dn_plan_s = new ArrayList();

     ArrayList pm_dn_plandata = null;

     Workbook rwb = null;

     Sheet rs = null;

     try {

       InputStream is = new FileInputStream(filePath);

       rwb = Workbook.getWorkbook(is);

       //封裝明細數據

       rs = rwb.getSheet(0);

       for (int i = 1; i < rs.getRows(); i++) {

         pm_dn_plandata = new ArrayList();

         pm_dn_plandata.add(rs.getCell(0, i).getContents().trim());

         pm_dn_plandata.add(rs.getCell(1, i).getContents().trim());

         if(rs.getCell(2, i).getType()==CellType.NUMBER|| rs.getCell(2, i).getType()==CellType.NUMBER_FORMULA){

               DecimalFormat df = new DecimalFormat("###.0000");

               NumberCell nc=(NumberCell)rs.getCell(2, i);

               pm_dn_plandata.add(df.format(nc.getValue()));

           }else {

             pm_dn_plandata.add(rs.getCell(2, i).getContents().trim());

           }

          pm_dn_plandata.add(rs.getCell(3, i).getContents().trim());

          pm_dn_plandata.add(rs.getCell(4, i).getContents().trim());

          pm_dn_plandata.add(rs.getCell(5, i).getContents().trim());

         pm_dn_plan_s.add(pm_dn_plandata);

       }

       is.close();

       rwb.close();

     }

     catch (Exception e) {

       e.printStackTrace();

     }

     return pm_dn_plan_s;

   }

//插入臨時表

   public boolean insert(ArrayList Dn_tongzhi_s, String user_id,String ip) throws

         IOException, ServletException, SQLException, Exception {

       boolean returnvalue = true;

       Connection conn = null;

       Statement stmt = null;

       ResultSet rs = null;

       DataSource datasource = null;

       ServletContext context = null;

       context = servlet.getServletContext();

       datasource = (DataSource) context.getAttribute(Globals.DATA_SOURCE_KEY);

       conn = datasource.getConnection();

       conn.setAutoCommit(false);

       ArrayList evdata=null;

       //定義變量,用來判斷當為空字符串的時候,整形的賦值為0

       String evdata2="";

       //插入表頭

       stmt = conn.createStatement();

       String sqlString ="";

         try {

             //插入明細表

         stmt.addBatch("delete pa_data_temp where oper_id='"+user_id+"' and ip='"+ip+"'");

         for (int i = 0; i < Dn_tongzhi_s.size(); i++) {

           evdata = new ArrayList();

           evdata = (ArrayList) Dn_tongzhi_s.get(i);

           if (evdata.get(2).equals(""))

          {

            evdata2="0";

          }else{

            evdata2=evdata.get(2).toString();

          }

           sqlString ="insert into pa_data_temp(mat_id,mat_name,qty,deliver_by,used,notes,oper_id,ip) values('"+

                         evdata.get(0)+"','"+ evdata.get(1)+"','"+ evdata2+"','"+ evdata.get(3)+

                        "','"+ evdata.get(4)+"','"+ evdata.get(5)+"','"+ user_id+"','"+ ip+"')";

               //  System.out.println(sqlString);

                 stmt.addBatch(sqlString);

         }

         stmt.executeBatch();

        conn.commit();

         conn.setAutoCommit(true);

       }

       catch (SQLException e) {

         returnvalue = false;

         conn.rollback();

         System.err.println(e.getMessage());

         conn.setAutoCommit(true);

       }

       finally {

         if (rs != null) {

           try {

             rs.close();

           }

           catch (SQLException e) {

             rs = null;

           }

         }

         if (stmt != null) {

           try {

             stmt.close();

           }

           catch (SQLException e) {

             stmt = null;

           }

         }

         if (conn != null) {

           try {

             conn.close();

           }

           catch (SQLException e) {

             conn = null;

           }

         }

       }

       return returnvalue;

   }

//插入正式表

   public ActionForward insert_zhengshi(ActionMapping actionMapping,

                                      ActionForm actionForm,

                                      HttpServletRequest httpServletRequest,

                                      HttpServletResponse httpServletResponse) throws

          IOException, ServletException, SQLException {

        HashMap maplist = new HashMap();

        String returnvalue = "";

        boolean success = true;

        String sqlString ="";

        String ip = httpServletRequest.getRemoteHost();

        String user_id = httpServletRequest.getSession().getAttribute("user_id").

         toString();

         String json1 = java.net.URLDecoder.decode(httpServletRequest.getParameter("json"), "utf-8").replace('"', ' ').trim();

         json1 = java.net.URLDecoder.decode(json1, "utf-8").replace('"', ' ').trim();

        //System.out.println(json1);       

        Connection conn = null;

        Statement stmt = null;

        ResultSet rs = null;

        DataSource datasource = null;

        ServletContext context = null;

        context = servlet.getServletContext();

        datasource = (DataSource) context.getAttribute(Globals.DATA_SOURCE_KEY);

        conn = datasource.getConnection();

        stmt = conn.createStatement();

        conn.setAutoCommit(false);

        try {

          ArrayList list = json.jsonstrToarraylist(json1);

          String mat_name="";

          String used="";

          String notes="";

          for (int i = 0; i < list.size(); i++) {

            maplist = (HashMap) list.get(i);

            mat_name=json.toTeshuStr(maplist.get("pmat_name").toString().replaceAll("'", "").trim());

            used=json.toTeshuStr(maplist.get("used").toString().replaceAll("'", "").trim());

            notes=json.toTeshuStr(maplist.get("notes").toString().replaceAll("'", "").trim());

                sqlString = "update pa_data_temp set mat_id=" +maplist.get("pmat_id")+",mat_name='"+mat_name+"',deliver_by="+maplist.get("deliver_by")+",qty="+maplist.get("qty")+" ,pa_no="+maplist.get("pa_no")+

                            ",used='"+used+"',notes='"+notes+"' where pa_detail_id="+ maplist.get("detail_id");

               // System.out.println(sqlString);

                stmt.executeUpdate(sqlString);

          }

          sqlString="insert into pa_data(pa_no,mat_id,mat_name,qty,deliver_by,used,notes)"+

                    " select ltrim(pa_no) as pa_no, ltrim(mat_id) as mat_id, ltrim(mat_name) as mat_name,qty,deliver_by, ltrim(used) as used, ltrim(notes) as notes "+

                    "from pa_data_temp where  oper_id='"+user_id+"'and ip='"+ip+"'";

          System.out.println(sqlString);

            stmt.addBatch(sqlString);

            stmt.executeBatch();

            returnvalue = "保存成功!";

conn.commit();

            conn.setAutoCommit(true);

        }

        catch (SQLException e) {

          conn.rollback();

          conn.setAutoCommit(true);

          System.err.println(e.getMessage());

          success = false;

          returnvalue = "保存失敗!";

        }

        finally {

          if (rs != null) {

            try {

              rs.close();

            }

            catch (SQLException e) {

              rs = null;

            }

          }

          if (stmt != null) {

            try {

              stmt.close();

            }

            catch (SQLException e) {

              stmt = null;

            }

          }

          if (conn != null) {

            try {

              conn.close();

            }

            catch (SQLException e) {

              conn = null;

            }

          }

        }

        returnvalue = "{success:'" + success + "',msg:'" + returnvalue + "'}";

        try {

          httpServletResponse.setContentType("text/json; charset=utf-8");

          httpServletResponse.getWriter().write(returnvalue);

        }

        catch (IOException ex) {

          ex.printStackTrace();

        }

        return actionMapping.findForward("");

  }

//讀取exec文檔(execl2007,2003)

  protected ArrayList readExcel(String excelPath) throws InvalidFormatException, FileNotFoundException, IOException

{

  Workbook workbook = WorkbookFactory.create(new FileInputStream(new File(excelPath)));

  Sheet sheet = workbook.getSheetAt(0);

  int startRowNum = sheet.getFirstRowNum();

  int endRowNum = sheet.getLastRowNum();

  ArrayList pm_dn_plan_s = new ArrayList();

  ArrayList pm_dn_plandata = null;

  boolean check = true;

  //第一行標題不要

  for(int rowNum = startRowNum+1;rowNum<=endRowNum;rowNum++){

    Row row = sheet.getRow(rowNum);

    if (row == null)continue;

    int startCellNum = row.getFirstCellNum();

    int endCellNum = row.getLastCellNum();

    if(endCellNum<2){

      check = false;

      break;

    }else{

      //只讀第一第二列

      pm_dn_plandata = new ArrayList();

      for (int cellNum = startCellNum; cellNum < endCellNum; cellNum++) {

        //pm_dn_plandata = new ArrayList();

        Cell cell = row.getCell(cellNum);

        if(cellNum==0){

          if(cell.getCellType()!=Cell.CELL_TYPE_STRING){

            check = false;

            break;

          }

          pm_dn_plandata.add(cell.getStringCellValue());

        }

        if(cellNum==1){

          if(cell.getCellType()!=Cell.CELL_TYPE_NUMERIC){

            check = false;

            break;

          }

          pm_dn_plandata.add(cell.getNumericCellValue());

        }

      }

      pm_dn_plan_s.add(pm_dn_plandata);

    }

    //只讀第一第二列

    //if(endCellNum)

    //System.out.println();

  }

  if(!check){

    pm_dn_plan_s.clear();

  }

  return pm_dn_plan_s;

}

你可能感兴趣的:(Java进阶,java,servlet,开发语言)