Java 的 Excel 导入功能实现

1.由于采用的Js是ExtJs,故前端引入的应该是:{text : ' 导入 ',  action:' payImport '}

2.在MainController中,写入 " button[action=payImport] ":{click:this.payImport},由此引入 

payImport : function(button){

Ext.widget(" importPayWindow ");

}

3.在Ext中创立ImportPayWindow.js ,并创建以下代码:

Ext.define(' yucen.view.main.pay.ImportPayWindow ' ,{

 extend: 'Ext.window.Window',
   
 alias: 'widget.importPayWindow',
    title: '导入内容',
   
 id:'importPayWindow',
   
 modal:true,
   
 width:500,
    layout: 'form',
   
 autoShow: true,
   
 functionModulesComp:null,

 initComponent: function() {

        var me=this;
       
  this.items =[
            {
                xtype: 'form',
                border: false,
                layout: {
                    type: 'vbox',
                    align: 'center'
                },
                items: [
                    {xtype:'label',id:'importPayShowLabel',margin:'20 0 40 0',html:'批量导入前请先下载模板文件<br>请按照模板格式编辑设备内容'},
                    {xtype:'label',id:'importPayHref',margin:'0 0 40 00',html:'<a href="'+ctx+'/paymentOrder/exportPayModel'+'">下载模板</a>'},
                    {xtype:'button',margin:'0 0 100 00',text:'下一步',
                        handler:function(){
                            Ext.getCmp('importPayShowLabel').setText('请选择您编辑好的模板并上传');
                            Ext.getCmp('importPayHref').setVisible(false);
                            this.setVisible(false);
                            Ext.getCmp('importPayUpLoad').setVisible(true);
                        }},
                    {xtype:'button',margin:'0 0 100 00',id:'importPayUpLoad',hidden:true,text:'上传',
                        handler:function(){
                            Ext.query('input[name="importPaysXls"]')[0].click();
                        }},
                    {
                        xtype: 'fileuploadfield',
                        width: 295,
                        emptyText: '',
                        hidden:true,
                        name:'importPaysXls',
                        buttonCfg: {
                            text: '浏览',
                            iconCls: 'icon-upload'
                        },
                        listeners: {
                            'change': function () {
                               
 var uploadForm = this.up('form')
                                    .getForm();
                               
 var form = this.up('form');
                               
 if (uploadForm.isValid()) {
                                   
     uploadForm.submit({
                                        url: ctx+'/paymentOrder/importPays',
                                        method: 'post',
                                        //waitMsg: '正在上传...',
                                        success: function (form, action) {
                                            Ext.getStore('Message').load();
                                            var result = Ext.decode(action.response.responseText);
                                            console.log(result);
                                            var successNumber = result.successNumber;
                                            var failureNumber = result.failureNumber;
                                           
        var data = "";
                                            me.destroy();
                                            var usernameField=result.usernameField;
                                            if (data == "") {
                                                Ext.Msg.alert('确认', '成功上传' + successNumber + '条数据,失败' + failureNumber + '条数据');
                                            } else {
                                                Ext.Msg.alert('警告', '成功上传' + successNumber + '条数据,失败' + failureNumber + '条数据' + data);

                                           
        }
                                       
               }
                                   
     });
                                } else {
                                    Ext.Msg.alert("", "");
                               
                                    }
                           
        }
                        }
                    }
                ]
            }
        ];
        this.callParent(arguments);
 
                }
});

4.创建一个Controllor,比如 PaymentOrderController,则需要写入两个接口。分别是 exportPayModel和importPays。

@RequestMapping("/exportPayModel")

@ResponseBody

public void exportPayModel(HttpServletRespose  response){

//生成提示信息

response.setContentType(" application/vnd.ms-excel ");

String codedFileName = null;

OutputStream fOut = null;


SimpleDateFormat   yyyyMMddHHmmss  =  new  SimpleDateFormat(Constants.SHORT_DATE_FORMAT);

String date=  yyyyMMddHHmmss.format(System.currentTimeMillis())  ;

try{

//进行转码,使其支持中文文件名

codeFileName  =  java.net.URLEncoder.encode(" 信息导入模板 "," UTF-8 ");

response.setHeader(" content-disposition " , " attachment : filename = " + codeFileName + " .xlsx ");


//产生工作簿对象

XSSFWorkbook  workbook = new XSSFWorkbook();


XSSFCellStyle   stringStyle  =  workbook.createCellStyle();

stringStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);

XSSFDataFormat format  =  workbook.createDataFormat();

Font    ztFont = workbook.createFont();

ztFont.setFontHeightInPoints((short)16);         //设置字体大小

ztFont.setColor(Font.COLOR_NORMAL);

ztFont.setFontName("宋体");

stringStyle.setFont(ztFont);


//产生工作表对象

Sheet   sheet  =  workbook.createSheet();

sheet.setDefaultColumnWidth(20);

Row header  =  sheet.createRow(0);   //第0行

//产生标题列

Cell  headerCell  =  header.createCell(0);

Cell  headerCell1  =  header.createCell(1);

Cell  headerCell2  =  header.createCell(2);

Cell  headerCell3  =  header.createCell(3);

Cell  headerCell4  =  header.createCell(4);

headerCell.setCellValue(" 手机号码 ");

headerCell1.setCellValue(" 姓名 ");

headerCell2.setCellValue(" 楼盘名称 ");

headerCell3.setCellValue(" 支付方式 ");

headerCell4.setCellValue(" 支付金额 ");


//            headerCell.setCellStyle(stringStyle);
//            headerCell1.setCellStyle(stringStyle);
//            headerCell2.setCellStyle(stringStyle);
//            headerCell3.setCellStyle(stringStyle);
//            headerCell4.setCellStyle(stringStyle);


Row  row1  =  sheet.createRow(1);  //创建一行

row1.createCell(0).setCellValue(" 第一条 ");

Row row2  =   sheet.createRow(2);   //创建一行

row2.createCell(0).setCellValue(" 第二条 ");

Row row3  =   sheet.createRow(3);   //创建一行

row3.createCell(0).setCellValue(" 第三条 ");


//            System.out.println("size="+stocks.size());
//            for (int i = 0; i < 3; i++) {
//
//                Row row = sheet.createRow(i + 1);//创建一行
//                row.createCell(0).setCellValue("内容"+(i+1));
//
//
//            }


fOut  =  response.getOutputStream();

workbook.write(fOut);

   }  catch (UnsupportedEncodingException e1) {
              e1.printStackTrace();
           } catch (Exception e) {

            e.printStackTrace();
           } finally {

try{

fOut.flush();

fOut.close();

     } catch  (IOException  e){

e.printSatckTrace();

     } catch  (NullPointerException   ne){

ne.printStackTrace();

     }

}

 }




@RequestMapping("/importPays")

public  void  importCommentSensitiveWord(@RequestParam(value = " importPaysXls ",required = false) MultipartFile  file ,HttpServletResponse  response)   throws Exception{ 

String  fileName  =  file.getOriginalFilename();

String  fileType  =  fileName.substring(fileName.length() - 3 , fileName.length());

int   successNumber   =  0;

int   failureNumber    =  0;

String  dataField ="";

if("xls".equals(fileType)||"lsx".equals(fileType)) {    // 上传文件是excel时    文件文件后缀名为xls

List<String[]> list  =  new  UpLoadExcel().getExcelTest(file.getInputStream());

if(list.size() > 0){

String[] str  =  null;

if (dataField.equals("")) {
                    for (int i = 1; i < list.size(); i++) {
                        str = list.get(i);
                        if (str[0] != null && !"".equals(str[0])) {
                            PaymentOrder paymentOrder=new PaymentOrder();
                            paymentOrder.setClientUserPhoneNumber(str[0]);
                            paymentOrder.setClientUserName(str[1]);
                            paymentOrder.setPrice(Double.valueOf(str[4]));


                            paymentOrderManager.createPaymentOrderOffline(paymentOrder);
                            successNumber += 1;

                        }

                    }
                }

}

}

response.setStatus(HttpServletResponse.SC_OK);
        response.setContentType("text/html;charset=UTF-8");
        response.getOutputStream().println("{\"success\":true,\"successNumber\":" + successNumber + ",\"failureNumber\":\"" + failureNumber + "\",\"data\":\"" + dataField + "\"}");

}

5.在第二个接口中,即/importPays,有用到过1个方法:  paymentOrderManager.createPaymentOrderOffline(paymentOrder);

因此需要创建一个service和hibernate来实现这个方法。接口均给予省略。

service的Impl中:

@Override

public  PaymentOrder  createPaymentOrderOffline(PaymentOrder  paymentOrder){

paymentOrder.setPayment(true);

paymentOrder.setCreationTime(new Date());

paymentOrder.setId(null);

paymentOrder.setPaymentSource(PaymentOrder.PaymentSource.none);

paymentOrder.setPaymentType(PaymentOrder.PaymentType.offline);

return  paymentOrderDao.save(paymentOrder);


之后的save方法在hibernate中实现即可。

以下为效果图:


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值