Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 1439|回复: 0

单文件上传以及解析Excel文档

[复制链接]

该用户从未签到

发表于 2011-10-12 21:09:13 | 显示全部楼层 |阅读模式
struts2没有提供自己的请求解析器,也就是说,struts2不会自己区处理multipart/form-data的请

求,它需要调用其他请求解析器,将HTTP请求中的表单域解析出来,但struts2在原有的上传解析器

上作了进一步封装,更进一步简化了文件上传


以下是Ext上传form表单


       function importExcel() {

    var excelForm = new Ext.form.FormPanel({

              id : 'importExcelForm',

              name : 'importExcelForm',

              autoWidth : true,

              height : 70,

              frame : true,

              labelWidth : 70,

              fileUpload : true,  //上传文件,这个是必须的

              enctype : 'multipart/form-data', //上传文件,这个是必须的

              items : [{

                         xtype : 'textfield',

                         id : 'excelFile',

                         anchor : '100%',

                         fieldLabel : 'Excel文件',

                         name : 'excelFile',

                         inputType : 'file',

                         style : 'padding: 3px'

                     }]

           });

    var importExcelWin = new Ext.Window({

              height : 150,

              width : 400,

              id : 'importExcelWin',

              name : 'importExcelWin',

              bodyStyle : 'padding:5px 5px 5px 5px',

              layout : 'form',

              modal : true,

              title : '导入Excel数据',

              buttonAlign : 'center',

              items : excelForm,

              buttons : [{

                  text : '确定',

                  handler : function add() {

                     var flowDefinitionFileValue = Ext.getCmp('excelFile')

                            .getValue();

                     var pos1 = flowDefinitionFileValue.lastIndexOf("\\")

                            * 1;

                     var fileNameTemp = flowDefinitionFileValue

                            .substring(pos1 + 1);

                     var pos2 = fileNameTemp.indexOf(".") * 1;

                     var fileName = fileNameTemp.substring(0, pos2);

                     var fileType = fileNameTemp.substring(pos2 + 1);

                     var fileTypeUpperCase = fileType.toUpperCase();

                     if (!(fileTypeUpperCase == null || fileTypeUpperCase == '')) {

                         if (!(fileTypeUpperCase == 'XLS')) {

                             Ext.example.msg('提示:', '导入文件必须为xls文件!', 3);

                            return;

                         }

                     } else {

                         Ext.example.msg('提示:', '请输入导入xls文件!');

                         return

                     }

                     excelForm.form.submit({

                                waitMag : '正在导入数据请稍候',

                                waitTitle : '提示',

                                url : WWWROOT

                                       + '/asset/importAssetExcel.action',

                                method : 'post',

                                params : {

                                   excelFile : flowDefinitionFileValue,

                                   checkId : id

                                },

                                success : function(form, action) {

                                   Ext.example.msg('提示:', '导入数据成功!');

                                   importExcelWin.close();

                                   Ext.getCmp("excelGrid").getStore()

                                          .reload();

                                },

                                failure : function() {

                                   Ext.example.msg('提示:', '导入数据失败!');

                                }

                            });

                  }

              }, {

                  text : '关闭',

                  handler : function close() {

                     importExcelWin.close();

                  }

              }]

           });

    importExcelWin.show();

}


java代码:


package com.newsoft.aos.action.assetManager;


import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;



public class AssetExcelAction extends BaseAction {

    private File excelFile;


    public void setExcelFile(File excelFile) {

       this.excelFile = excelFile;

    }


    public File getExcelFile() {

       return excelFile;

    }

    /**

     * 上传文件

     *

     * 导出Excel文件

     *

     */

    public void importAssetExcel() {

       String filePath = StrutsParamTools.getPraramValue("excelFile", "");

       AssetExcel temp = new AssetExcel();

       int begin = 2;

       int end = 1000;

       int sheet = 1;


       try {

           // 得到文件的扩展名

           String t_ext = filePath.substring(filePath.lastIndexOf(".") + 1);

           // 根据系统时间生成上传后保存的文件名

           String prefix = String.valueOf(System.currentTimeMillis());

           // 保存的路径

           String savePath = StrutsParamTools.getRequest().getRealPath("/")

                  + "upload/" + prefix + "." + t_ext;

           // 输出流

           FileOutputStream fos = new FileOutputStream(savePath);

           // 输入流

           FileInputStream fis = new FileInputStream(getExcelFile());

           // 写入

           byte[] buffer = new byte[1024];

           int len = 0;

           while ((len = fis.read(buffer)) > 0) {

              fos.write(buffer, 0, len);

           }

       } catch (Exception e) {

           e.printStackTrace();

       }

    }

}


解析excel文件:

大体思路:

页面(显示数据)--->点击导入--->选择文件--->后台处理(先上传,然后读取文件写入数据库)--->页

面自动刷新显示所有数据.

import jxl.Sheet;

import jxl.Workboo        // // 获得输入流

       InputSream is = new FileInputStream(excelFile);

       // 定义excel工作簿,也就是在工作的sheet页面

       Workbook wb;

       // 资产Excel表格

       AssetExcel assetExcel;


       // 根据输入流获得工作簿

       wb = Workbook.getWorkbook(is);


       // 用于存储资产表格集合

       List<AssetExcel> lists = new ArrayList<AssetExcel>();


       // 循环工作薄Excel中的sheet

       for (int i = 0; i < sheet; i++) {

           Sheet sh = wb.getSheet(i);

           if (sh == null) {

              break;

           }

           // 获取Sheet表中所包含的总行数

           int e = sh.getRows() >= end ? end : sh.getRows();

           // 开始循环读取Excel表中的数据

           // 外层循环循环行

           for (int j = begin - 1; j < e; j++) {

              if (sh.getCell(0, j).getContents() != null

                     && !"".equals(sh.getCell(0, j).getContents())) {

                  // 实例化一个资产excel表格信息

                  assetExcel = new AssetExcel();

                  // sh.getRow(j) 获得一行的所有单元格

                  // sh.getRow(j).length 列的数量

                  int cols = sh.getRow(j).length;

                  if (cols > 0 && sh.getCell(0, j) != null) {

                     // sh.getCell(0, j) 第一个参数是列,第二个参数是行

                     assetExcel.setAssetNo(sh.getCell(0, j).getContents()

                            .trim());

                     assetExcel.setCheckId(checkId);

                  }

                  lists.add(assetExcel);

              }

           } 

        //以下是对数据库的操作

           // 获得该盘点项下的所有盘点资产

           List<AssetExcel> aes = objectDao.findByProperty(AssetExcel.class

                  .getName(), "checkId", checkId);

           // 删除该盘点下的资产

           objectDao.deleteAll(aes);


           // 保存

           objectDao.saveAll(lists);
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2024-5-20 08:02 , Processed in 0.369382 second(s), 48 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表