excel上传

简介:

jsp


<c:if test="${not empty currentUserAccount and (currentUserAccount.role.contains('DA') or currentUserAccount.role.contains('FA')or currentUserAccount.role.contains('GMA')  or  currentUserAccount.role.contains('ADMIN'))}">
   <div class="col-sm-4">
       <label class="control-label">&nbsp;</label>
       <input type="button" class="btn btn-primary btn-large btn-block" id="export" value="导出">
   </div>

   <form method="POST" role="form" class="form-inline " enctype="multipart/form-data" id="form1" action="/sale/ajaxUpload">

       <div  class="form-group col-sm-4">
           <div class="">
               <label class="control-label">&nbsp;</label>
               <input type="file"   class="btn btn-primary btn-large btn-block form-group" id="upfile" name="upfile" value="上传文件">
           </div>
       </div>



       <div  class="form-group col-sm-4">
           <div class="">
               <label class="control-label">&nbsp;</label>
               <input type="button"  class="btn btn-primary btn-large btn-block form-group" id="import" value="导入">
           </div>
       </div>

       <div  class="form-group col-sm-4">
           <div class="">
               <label class="control-label">&nbsp;</label>

               <a class="btn btn-primary btn-large btn-block" href="/sale/download">EXCEL模板</a>
           </div>
       </div>

   </form>
</c:if>



  $('#import').click(function(){
       if(checkData()){
           $('#form1').ajaxSubmit({ url:'/sale/ajaxUpload',
               dataType: 'text',

               success: resutlMsg,
               error: errorMsg,


           });


       } });

   function resutlMsg(msg){ alert(msg); $("#upfile").val(""); jQuery("#saleList").trigger("reloadGrid");/*window.location.reload();*/}

   function errorMsg(){ alert("导入excel出错!"); }


   function checkData(){
       var fileDir = $("#upfile").val();
       var suffix = fileDir.substr(fileDir.lastIndexOf("."));
       if("" == fileDir){ alert("选择需要导入的Excel文件!"); return false; }
       if(".xls" != suffix && ".xlsx" != suffix ){ alert("选择Excel格式的文件导入!"); return false; }
       return true; }

});










Java

@ResponseBody
@RequestMapping(value="/ajaxUpload",method={RequestMethod.GET,RequestMethod.POST})
public  void  ajaxUploadExcel(@RequestParam MultipartFile upfile,ModelMap modelMap,HttpSession session,HttpServletResponse response) throws Exception {


   InputStream in = null;
   List<List<Object>> listob = null;
   String jieguo = "成功导入数据,文件上传成功!";

   if(upfile.isEmpty()){
       throw new Exception("文件不存在!");
   }



  UserAccount userAccount = (UserAccount) modelMap.get("currentUserAccount");



   if (userAccount != null) {
       listMedias = mediaService.listMedias("TPASS", userAccount.getUsername());

   }


   List<Client> clients = clientService.listClients();

   List<PayMethod> listMethods =payMethodService.listsPayMethod();



   List<String> allActivatednames = userAccountService.listUserNameActivated();



   in = upfile.getInputStream();

   listob = new ImportExcelUtil().getBankListByExcel(in, upfile.getOriginalFilename());

   //该处可调用service相应方法进行数据保存到数据库中,现只对数据输出
   try {

       for (int i = 0; i < listob.size(); i++) {
           List<Object> lo = listob.get(i);


           String a = String.valueOf(lo.get(0)).replaceAll("^[  ]+|[  ]+$", "");//业务名称
           String b = String.valueOf(lo.get(1)).replaceAll("^[  ]+|[  ]+$", "");//客户名称
           String c = String.valueOf(lo.get(2)).replaceAll("^[  ]+|[  ]+$", "");//加款账号


           String d = String.valueOf(lo.get(3)).replaceAll("^[  ]+|[  ]+$", "");///退币金额

           //应收金额

           String e = String.valueOf(lo.get(4)).replaceAll("^[  ]+|[  ]+$", "");//加币时间
           String f = String.valueOf(lo.get(5)).replaceAll("^[  ]+|[  ]+$", "");//应收款时间
           String g = String.valueOf(lo.get(6)).replaceAll("^[  ]+|[  ]+$", ""); //实付金额

           //收款方式
           String h = String.valueOf(lo.get(7)).replaceAll("^[  ]+|[  ]+$", "");//地域
           String ii = String.valueOf(lo.get(8)).replaceAll("^[  ]+|[  ]+$", "");//收款方式
           String j = String.valueOf(lo.get(9)).replaceAll("^[  ]+|[  ]+$", "");//记录人员信息
           String k = String.valueOf(lo.get(10)).replaceAll("^[  ]+|[  ]+$", "");//备注

           Sale sale = new Sale();
           sale.setUserAccountId(userAccount.getId());


           long mediaId = -1;
           long clientId = -1;
           BigDecimal discountProvider= null;


           //业务名称
           for(i=0; i< listMedias.size();i++){

               Media media = listMedias.get(i);
               if(StringUtils.equals(a,media.getFrameworkName())) {
                   mediaId = media.getId();
                   discountProvider = media.getDiscountProvider();

                   sale.setDiscountProvider(discountProvider);


                   break;
               };

           }

           //客户名称

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

               Client client = clients.get(i);
               if(StringUtils.equals(b,client.getClientName())) {
                   clientId = client.getId();



                   break;
               };

           }


           //加款账号
           List<MediaAccount> mediaAccountList = mediaAccountService.listMediaAccounts(mediaId, clientId);

           long mediaAccountId = -1;
           String discountMethod =  null;
           BigDecimal  discountBase = null;

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

               MediaAccount mediaAccount = mediaAccountList.get(i);
               if(StringUtils.equals(c,mediaAccount.getAccountName())) {
                   mediaAccountId = mediaAccount.getId();

                   discountMethod = mediaAccount.getDiscountMethod();
                   sale.setDiscountMethod(discountMethod);
                   discountBase = mediaAccount.getDiscountBase();
                   sale.setDiscountMedia(discountBase);
                   sale.setMediaAccountId(mediaAccountId);
                   break;
               };

           }


           ///退币金额
           BigDecimal recharge=new BigDecimal(d);
           recharge = recharge.setScale(2, BigDecimal.ROUND_HALF_UP);

           sale.setRecharge(recharge);



           //应收金额
           BigDecimal yingshou = jisuan(discountMethod,recharge,discountBase);
           yingshou = yingshou.setScale(2, BigDecimal.ROUND_HALF_UP);

           sale.setRevenue(yingshou);


           //加币时间
           DateFormat fmt =new SimpleDateFormat("yyyy/MM/dd");
           java.util.Date rechargeTime =fmt.parse(e);

           sale.setRechargeTime(rechargeTime);

           //应收款时间
           java.util.Date revenueTime =fmt.parse(f);

           sale.setRevenueTime(revenueTime);


           //实付金额
           BigDecimal actualAmount2=new BigDecimal(g);
           actualAmount2 = actualAmount2.setScale(2, BigDecimal.ROUND_HALF_UP);

           sale.setActualAmount(actualAmount2);





           //地域



           sale.setArea(h);

           //收款方式

           List<PayMethod>  payMethodList = payMethodService.listsPayMethod();
           for(i=0;i<payMethodList.size();i++){
               PayMethod payMethod = payMethodList.get(i);
               if(StringUtils.equals(ii,payMethod.getPayMethod())){
                   sale.setPaymentMethod(ii);
                   break;
               }
           }


           //记录人员信息

           List<String> userNameList = userAccountService.listUserNameActivated();
           for(i=0;i<userNameList.size();i++){
               if(StringUtils.equals(j,userNameList.get(i))){
                   sale.setAddPerson(j);
                   break;
               }
           }



           //备注
           sale.setNote(k);

           sale.setStatus("SUBMITED");

           sale = saleService.addSale(sale);




           if(sale == null){


               jieguo = "你导入的excel表格数据或格式有错误,文件上传失败!";
               break;

           }




       }

   } catch (Exception e) {
       if (logger.isErrorEnabled()) {

           logger.error("ajaxUploadExcel", e);
           jieguo = "你导入的excel表格数据或格式有错误,文件上传失败!";
       }

   }

   PrintWriter out = null;
   response.setCharacterEncoding("utf-8");  //防止ajax接受到的中文信息乱码
   out = response.getWriter();
   out.print(jieguo);
   out.flush();
   out.close();

}





package cn.com.singlemountaintech.dxmanagement.common.utils;

/**
* Created by li on 17-8-2.
*/


       import java.io.IOException;
       import java.io.InputStream;
       import java.text.DecimalFormat;
       import java.text.SimpleDateFormat;
       import java.util.ArrayList;
       import java.util.List;

       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;


public class ImportExcelUtil {

   private final static String excel2003L =".xls";    //2003- 版本的excel
   private final static String excel2007U =".xlsx";   //2007+ 版本的excel

   /**
    * 描述:获取IO流中的数据,组装成List<List<Object>>对象
    * @param in,fileName
    * @return
    * @throws IOException
    */
   public  List<List<Object>> getBankListByExcel(InputStream in,String fileName) throws Exception{
       List<List<Object>> list = null;

       //创建Excel工作薄
       Workbook work = this.getWorkbook(in,fileName);
       if(null == work){
           throw new Exception("创建Excel工作薄为空!");
       }
       Sheet sheet = null;
       Row row = null;
       Cell cell = null;

       list = new ArrayList<List<Object>>();
       //遍历Excel中所有的sheet
       for (int i = 0; i < work.getNumberOfSheets(); i++) {
           sheet = work.getSheetAt(i);
           if(sheet==null){continue;}

           //遍历当前sheet中的所有行
           for (int j = sheet.getFirstRowNum(); j <= sheet.getLastRowNum(); j++) {
               row = sheet.getRow(j);
               if(row==null||row.getFirstCellNum()==j){continue;}

               //遍历所有的列
               List<Object> li = new ArrayList<Object>();
               for (int y = row.getFirstCellNum(); y < row.getLastCellNum(); y++) {
                   cell = row.getCell(y);
                   li.add(this.getCellValue(cell));
               }
               list.add(li);
           }
       }
       work.close();
       return list;
   }

   /**
    * 描述:根据文件后缀,自适应上传文件的版本
    * @param inStr,fileName
    * @return
    * @throws Exception
    */
   public  Workbook getWorkbook(InputStream inStr,String fileName) throws Exception{
       Workbook wb = null;
       String fileType = fileName.substring(fileName.lastIndexOf("."));
       if(excel2003L.equals(fileType)){
           wb = new HSSFWorkbook(inStr);  //2003-
       }else if(excel2007U.equals(fileType)){
           wb = new XSSFWorkbook(inStr);  //2007+
       }else{
           throw new Exception("解析的文件格式有误!");
       }
       return wb;
   }

   /**
    * 描述:对表格中数值进行格式化
    * @param cell
    * @return
    */
   public  Object getCellValue(Cell cell){
       Object value = null;
       DecimalFormat df = new DecimalFormat("0");  //格式化number String字符
       SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd");  //日期格式化
       DecimalFormat df2 = new DecimalFormat("0.00");  //格式化数字

       /*if("yyyy/mm;@".equals(cell.getCellStyle().getDataFormatString()) || "m/d/yy".equals(cell.getCellStyle().getDataFormatString())
               || "yy/m/d".equals(cell.getCellStyle().getDataFormatString()) || "mm/dd/yy".equals(cell.getCellStyle().getDataFormatString())
               || "dd-mmm-yy".equals(cell.getCellStyle().getDataFormatString())|| "yyyy/m/d".equals(cell.getCellStyle().getDataFormatString())){
           return new SimpleDateFormat("yyyy/MM/dd").format(cell.getDateCellValue());
       }*/

       switch (cell.getCellType()) {
           case Cell.CELL_TYPE_STRING:
               value = cell.getRichStringCellValue().getString();
               break;
           case Cell.CELL_TYPE_NUMERIC:
               if("General".equals(cell.getCellStyle().getDataFormatString())){
                   value = df.format(cell.getNumericCellValue());
               }else if("yyyy/mm;@".equals(cell.getCellStyle().getDataFormatString()) || "m/d/yy".equals(cell.getCellStyle().getDataFormatString())
                       || "yy/m/d".equals(cell.getCellStyle().getDataFormatString()) || "mm/dd/yy".equals(cell.getCellStyle().getDataFormatString())
                       || "dd-mmm-yy".equals(cell.getCellStyle().getDataFormatString())|| "yyyy/m/d".equals(cell.getCellStyle().getDataFormatString())){
                   return new SimpleDateFormat("yyyy/MM/dd").format(cell.getDateCellValue());
               }
               /*
               else if("m/d/yy".equals(cell.getCellStyle().getDataFormatString())){
                   value = sdf.format(cell.getDateCellValue());
               }*/else{
                   value = df2.format(cell.getNumericCellValue());
               }
               break;
           case Cell.CELL_TYPE_BOOLEAN:
               value = cell.getBooleanCellValue();
               break;
           case Cell.CELL_TYPE_BLANK:
               value = "";
               break;
           default:
               break;
       }
       return value;
   }


}



上面的上传要在

AppConfig添加最后一个@Bean(name="multipartResolver")


package cn.com.singlemountaintech.dxmanagement.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.*;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.core.env.Environment;
import org.springframework.core.task.SimpleAsyncTaskExecutor;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import java.util.concurrent.Executor;


/*
* JDK 8 proper
*applicationContext.xml
* */
@Configuration
@EnableAsync
@EnableScheduling
@EnableAspectJAutoProxy
@ComponentScan(basePackages = "cn.com.singlemountaintech.dxmanagement")
@PropertySource(value = {"classpath:application.properties"})
public class AppConfig {

    @Autowired
    private Environment environment;

    @Bean
    public Executor taskExecutor() {
        return new SimpleAsyncTaskExecutor();
    }

    @Bean(name = "messageSource")
    public MessageSource configureMessageSource() {
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasename("classpath:messages");
        messageSource.setCacheSeconds(5);
        messageSource.setDefaultEncoding("UTF-8");
        messageSource.setFallbackToSystemLocale(true);
        return messageSource;
    }

    @Bean(name = "localeResolver")
    public LocaleResolver localeResolver() {
        SessionLocaleResolver SessionLocaleResolver = new SessionLocaleResolver();
        return SessionLocaleResolver;
    }

    @Bean(name="multipartResolver")
    public CommonsMultipartResolver multipartResolver(){

            CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();

        return multipartResolver;

    }

}




@ResponseBody
@RequestMapping(value="/ajaxUpload",method={RequestMethod.GET,RequestMethod.POST})
public  void  ajaxUploadExcel(@RequestParam MultipartFile upfile,HttpSession session,HttpServletResponse response) throws Exception {

       InputStream in =null;
       List<List<Object>> listob = null;

       //MultipartFile file = multipartRequest.getFile("upfile");
       if(upfile.isEmpty()){
           throw new Exception("文件不存在!");
       }

       in = upfile.getInputStream();

       listob = new ImportExcelUtil().getBankListByExcel(in, upfile.getOriginalFilename());

       //该处可调用service相应方法进行数据保存到数据库中,现只对数据输出

         String tishi = "成功导入数据,文件上传成功!";


   try {


       for (int i = 0; i < listob.size(); i++) {
           List<Object> lo = listob.get(i);

           String a = String.valueOf(lo.get(0)).replaceAll("^[  ]+|[  ]+$", "");
           String b = String.valueOf(lo.get(1)).replaceAll("^[  ]+|[  ]+$", "");
           String c = String.valueOf(lo.get(2)).replaceAll("^[  ]+|[  ]+$", "");
           String d = String.valueOf(lo.get(3)).replaceAll("^[  ]+|[  ]+$", "");
           String e = String.valueOf(lo.get(4)).replaceAll("^[  ]+|[  ]+$", "");
           String f = String.valueOf(lo.get(5)).replaceAll("^[  ]+|[  ]+$", "");
           String g = String.valueOf(lo.get(6)).replaceAll("^[  ]+|[  ]+$", "");
           Client client = new Client();
           client.setClientName(a);
           client.setClientContact(b);
           client.setClientNum(c);
           client.setClientMail(d);
           client.setClientAddr(e);
           client.setStatus("SUBMITED");
           client.setContractName(g);

           BigDecimal deposit = new BigDecimal("0.00");
           client.setDeposit(deposit);


           client = clientService.addClient(client);


           if(client == null){
               tishi="你导入的excel表格数据和格式有错误,文件上传失败!";
               break;
           }
           //System.out.println(client.toString() + "333333333333");

           //System.out.println("打印信息-->机构:"+a+"  名称:"+b+"   时间:"+c+"   资产:"+d+"  lallalaal"+e);

       }



   } catch (Exception e) {
       if (logger.isErrorEnabled()) {
           logger.error("ajaxUploadExcel", e);
           tishi="你导入的excel表格数据和格式有错误,文件上传失败!";

       }

   }



   PrintWriter out = null;
   response.setCharacterEncoding("utf-8");  //防止ajax接受到的中文信息乱码
   out = response.getWriter();
   out.print(tishi);
   out.flush();
   out.close();
}


下面这个不需要配置

@Bean(name="multipartResolver")




/* @ResponseBody
   @RequestMapping(value="/ajaxUpload",method={RequestMethod.GET,RequestMethod.POST})
   public  void  ajaxUploadExcel(HttpServletRequest request,HttpServletResponse response) throws Exception {
       MultipartResolver resolver = new CommonsMultipartResolver(request.getSession().getServletContext());



      MultipartHttpServletRequest multipartRequest = resolver.resolveMultipart(request);



       InputStream in =null;
       List<List<Object>> listob = null;

       MultipartFile file = multipartRequest.getFile("upfile");
       if(file.isEmpty()){
           throw new Exception("文件不存在!");
       }

       in = file.getInputStream();

       listob = new ImportExcelUtil().getBankListByExcel(in, file.getOriginalFilename());

       //该处可调用service相应方法进行数据保存到数据库中,现只对数据输出
       for (int i = 0; i < listob.size(); i++) {
           List<Object> lo = listob.get(i);



           String a = String.valueOf(lo.get(0));
           String b = String.valueOf(lo.get(1));
           String c = String.valueOf(lo.get(2));
           String d = String.valueOf(lo.get(3));
           String e = String.valueOf(lo.get(4));
           String f = String.valueOf(lo.get(5));
            Client client = new Client();
           client.setClientName(a);
           client.setClientContact(b);
           client.setClientNum(c);
           client.setClientMail(d);
           client.setClientAddr(e);
            client.setStatus("SUBMITED");

           BigDecimal deposit = new BigDecimal("0.00");
           client.setDeposit(deposit);
            System.out.println(client.toString() + "222222222222222222");
            clientService.addClient(client);
            System.out.println(client.toString() + "333333333333");

           //System.out.println("打印信息-->机构:"+a+"  名称:"+b+"   时间:"+c+"   资产:"+d+"  lallalaal"+e);

       }

       PrintWriter out = null;
       response.setCharacterEncoding("utf-8");  //防止ajax接受到的中文信息乱码
       out = response.getWriter();
       out.print("文件导入成功!");
       out.flush();
       out.close();
   }


}

*/

本文转自wiwi博客51CTO博客,原文链接http://blog.51cto.com/wiwili/1965881如需转载请自行联系原作者


wiwili

相关文章
|
24天前
|
索引
xlwings 复制一个excel的一列 到另一个excel中
【4月更文挑战第10天】使用xlwings复制Excel文件中一列的步骤:安装xlwings库(`pip install xlwings`);打开源文件和目标文件(`xw.Book()`);选择工作表;设定要复制的列索引;遍历源文件列并复制到目标文件;保存目标文件(`save()`);关闭文件(`close()`)。记得替换文件路径和工作表名称。
24 5
|
3月前
|
测试技术 数据处理 Python
测试报告导出PDF和excel的方法
测试报告导出PDF和excel的方法
|
5月前
|
前端开发 小程序 JavaScript
phpexcel(二)导入excel文件
有导出。自然就有导入。功能多样化嘛。 我这里使用的是laravel5.8框架(框架老点,但是这玩意完全就是一个自定义方法,跟框架版本什么的没有关系)
24 1
|
6月前
使用EasyPoi导入Excel直接读流(不保存到本地文件)
使用EasyPoi导入Excel直接读流(不保存到本地文件)
49 0
|
8月前
|
前端开发
后台生成 xlsx 文件
后台生成 xlsx 文件
40 0
|
10月前
Fastadmin上传EXCEL
Fastadmin上传EXCEL
137 0
导出图片和数据到Excel
导出图片和数据到Excel
JavaWeb - Excel/Word(2003/2007、上传/下载、解析/生成、导入/导出)
JavaWeb - Excel/Word(2003/2007、上传/下载、解析/生成、导入/导出)
132 0
JavaWeb - Excel/Word(2003/2007、上传/下载、解析/生成、导入/导出)
|
数据库 数据安全/隐私保护
Spire.XLS,生成Excel文件、加载Excel文件
一、组件介绍 Spire.XLS是E-iceblue开发的一套基于企业级的专业Office文档处理的组件之一,全称Spire.Office for .NET。旗下有Spire.Doc,Spire XLS,Spire.PDF,Spire.BarCode等多款专业组件,为各种Office文档在程序处理上提供了很大的方便,官方为各种功能提供了大量的在线api,简化了使用组件的难度。
3040 0