poi excel文件上传并解析xls文件

1.jsp页面

<form action="hw/pe_xls_upload" method="post" enctype="multipart/form-data" >
    <table>
        <tr>
            <td>导入硬件序列号/密码Excel文件:</td>
            <td><input name="hwFile" type="file"/>&nbsp;&nbsp;</td> <!-- style="width: 400px;height: 25px;" -->
            <td><input type="submit" value="上传导入并激活" onclick="javascript:layer.alert(‘正在处理中‘, 16);"/></td>
        </tr>
    </table>
    </form>

2.controller控制器

@RequestMapping("pe_xls_upload")
    public String hwXlsUpload(@RequestParam("hwFile") MultipartFile hwFile, HttpServletRequest request){
        String msg = "";
        if(!hwFile.isEmpty()){
            String fileType = hwFile.getContentType();
            System.err.println("fileType:" + fileType);
            if(!fileType.equals("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") && !fileType.equals("application/vnd.ms-excel") ){
                logger.error("上传文件类型错误!fileType:{}", fileType);
                msg = "上传文件类型错误";
            }else{
                try{
                    String basePath = SysConf.CON_IMAGE_DIR + "upload/";
                    java.io.File dir = new java.io.File(basePath);
                    if(!dir.exists()){
                        dir.mkdir();
                    }
                    String fileName = basePath + hwFile.getOriginalFilename();
                    File file = new File(fileName);
                    FileUtils.writeByteArrayToFile(file, hwFile.getBytes());
                    if(file.exists()){
                        //Excel文件操作
                        Map<String, String> map = null;
                        map = CarHwXls.readXls(fileName);
                        /*for (Map.Entry<String, String> entry : map.entrySet()){
                            System.err.println("$$entry.getKey():" + entry.getKey() + " --- " + entry.getValue());
                        }*/

                        //1.硬件导入和激活
                        CarHwApiNew.insertHwPsw(map);
                        //2.硬件导入和激活
                        CarHwApiNew.activeHwCar();

                        msg = "文件上传成功,并导入和激活设备序列号和密码信息成功完成";
                    }else{
                        msg = "文件上传失败";
                    }
                }catch(Exception e){
                    logger.error("添加硬件设备号:", e);
                    msg = e.getMessage();
                }
            }
        }else{
            msg = "请选择上传文件";
        }

        request.setAttribute("msg", msg);
        queryHwList(new CarHwSearchBean(),request);

        return "hw/list";
    }

3.xls工具类

public class CarHwXls {
    private static Logger logger = LoggerFactory.getLogger(CarHwXls.class);

    /**
     * 读取xls文件内容
     *
     * @return List<XlsDto>对象
     * @throws IOException
     *             输入/输出(i/o)异常
     */
    public static Map<String, String> readXls(String xlspath) throws IOException {
        Map<String, String> map = new HashMap<String, String>();
        /** 检查文件名是否为空或者是否是Excel格式的文件 */
        if (xlspath == null || !(WDWUtil.isExcel2003(xlspath) || WDWUtil.isExcel2007(xlspath)))
        {
            logger.info("文件名不是excel格式");
            map.put("msg", "文件名不是excel格式");
            return map;
        }  

        /** 检查文件是否存在 */
        File file = new File(xlspath);
        if (file == null || !file.exists())
        {
            logger.info("文件不存在");
            map.put("msg", "文件不存在");
            return map;
        }  

        InputStream is = new FileInputStream(xlspath);
//        HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);
        /** 根据版本选择创建Workbook的方式 */  

        Workbook wb = null;  

        if (WDWUtil.isExcel2003(xlspath))
        {
            wb = new HSSFWorkbook(is);
        }
        else
        {
            wb = new XSSFWorkbook(is);
        }  

//        CellStyle cellStyle = wb.createCellStyle();
//        DataFormat format = wb.createDataFormat();
//        cellStyle.setDataFormat(format.getFormat("@"));

        // 循环工作表Sheet
        for (int numSheet = 0; numSheet < wb.getNumberOfSheets(); numSheet++) {
            Sheet sheet = wb.getSheetAt(numSheet);   //HSSF
//            System.out.println("sheet:" + sheet);
            if (sheet == null) {
                continue;
            }
            // 循环行Row,从第一行开始。
            for (int rowNum = 1; rowNum <= sheet.getLastRowNum(); rowNum++) {
                Row row = sheet.getRow(rowNum);  //HSSF
//                System.out.println("row:"+row);
                if (row == null) {
                    continue;
                }
                // 循环列Cell
                // 0学号 1姓名 2学院 3课程名 4 成绩
                // for (int cellNum = 0; cellNum <=4; cellNum++) {
                Cell cell0 = row.getCell(0);  //HSSF
//                cell0.setCellStyle(cellStyle);  //设置为文本型
//                System.out.println("@@cell0:" + getValue(cell0));
                if (cell0 == null || !getValue(cell0).startsWith("96779")) {   //不已96779开头的记录。
                    continue;
                }

                Cell cell1 = row.getCell(1);  //HSSF
//                cell1.setCellStyle(cellStyle);  //设置为文本型
//                System.out.println("$$cell1:" + getValue(cell1));
                if (cell1 == null || getValue(cell1).length() != 8) {
                    continue;
                }

                map.put(getValue(cell0), getValue(cell1));
            }
        }
//        System.out.println("SIZE:" + list.size());
        return map;
    }

    /**
     * 得到Excel表中的值
     *
     * @param hssfCell
     *            Excel中的每一个格子
     * @return Excel中每一个格子中的值
     */
    @SuppressWarnings("static-access")
    public static String getValue(Cell cell) {  //HSSF
        /*if (cell.getCellType() == cell.CELL_TYPE_BOOLEAN) {
            // 返回布尔类型的值
            return String.valueOf(cell.getBooleanCellValue());
        } else if (cell.getCellType() == cell.CELL_TYPE_NUMERIC) {
            // 返回数值类型的值
            return String.valueOf(cell.getNumericCellValue());
        } else {
            // 返回字符串类型的值
            return String.valueOf(cell.getStringCellValue());
        }*/
        String cellValue = "";
        if (null != cell)
        {
            // 以下是判断数据的类型
            switch (cell.getCellType())
            {
            case HSSFCell.CELL_TYPE_NUMERIC: // 数字
//                cellValue = cell.getNumericCellValue() + "";
                DecimalFormat df = new DecimalFormat("0");     //避免科学计数法显示。
                cellValue = df.format(cell.getNumericCellValue());  

//                cellValue = cell.getStringCellValue();
                break;  

            case HSSFCell.CELL_TYPE_STRING: // 字符串
                cellValue = cell.getStringCellValue();
                break;  

            case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean
                cellValue = cell.getBooleanCellValue() + "";
                break;  

            case HSSFCell.CELL_TYPE_FORMULA: // 公式
                cellValue = cell.getCellFormula() + "";
                break;  

            case HSSFCell.CELL_TYPE_BLANK: // 空值
                cellValue = "";
                break;  

            case HSSFCell.CELL_TYPE_ERROR: // 故障
                cellValue = "非法字符";
                break;  

            default:
                cellValue = "未知类型";
                break;
            }
        }
        return cellValue;

    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        Map<String, String> map = null;
        try {
            map = CarHwXls.readXls("d://硬件号.xlsx");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        for (Map.Entry<String, String> entry : map.entrySet()){
            System.err.println("entry.getKey():" + entry.getKey() + " --- " + entry.getValue());
        }
    }

}

class WDWUtil
{
    /**
     * @描述:是否是2003的excel,返回true是2003
     * @参数:@param filePath 文件完整路径
     * @参数:@return
     * @返回值:boolean
     */
    public static boolean isExcel2003(String filePath)
    {
        return filePath.matches("^.+\\.(?i)(xls)$");
    }  

    /**
     * @描述:是否是2007的excel,返回true是2007
     * @参数:@param filePath 文件完整路径
     * @参数:@return
     * @返回值:boolean
     */
    public static boolean isExcel2007(String filePath)
    {
        return filePath.matches("^.+\\.(?i)(xlsx)$");
    }
}  
时间: 2024-12-28 15:00:48

poi excel文件上传并解析xls文件的相关文章

php 文件上传后缀名与文件类型对照表(几乎涵盖所有文件)

网上有很多php文件上传的类,文件上传处理是php的一个特色(至少手册上是将此作为php特点来展示的,个人认为php在数组方面的优异功能更有特 色),学php的人都知道文件上传怎么做,但很多人在编程中却可能忽视了一些细节问题,那就是文件的类型(MIME).在表单将文件提交给php做处理之 前,浏览器会先解析识别一边是什么类型的文件,之后进入php处理环节,php又会去识别解析此文件的原始类型(并不是说你改成什么后缀就是什么文件). 在这个过程中会有一些浏览器兼容,更准确来说是文件类型解析标识不一

文件上传类,实现文件上传功能

/** *==================================================================  * upload.class.php 文件上传类,实现文件上传功能 * 2013年3月27日0:37:15 *================================================================== */ class Upload{    private $path;   //文件上传目录    privat

Excel文件上传,解析,下载(一 文件上传,使用MultipartFile来实现)

文件上传我使用的是jquery的一个插件"ajaxfileupload.js",使用方式详见下面的一种方式,使用file类型的input,同时需要给button绑定事件,这边使用的"ajaxfileupload.js"当中定义的ajax请求,到后台. <div id="fileupload"> <input type="file" id="file" name="file&quo

1.2 文件上传之解析漏洞

浅谈文件解析及上传漏洞 文件解析漏洞 解析漏洞主要是一些特殊文件被iis.Apache.Nginx等服务在某种情况下解释成脚本文件格式并得以执行而产生的漏洞. iis 5.x/6.0解析漏洞 iis6.0解析漏洞主要有以下三种: ?? 1. 目录解析漏洞 /xx.asp/xx.jpg ??在网站下创建文件夹名字为.asp..asa的文件夹,其目录内的任何扩展名的文件都被iis当做asp文件来解析         并执行.因此只要攻击者可以通过该漏洞直接上传图片马,并且可以不需要改后缀名! 2.

ajax结合文件上传类进行多文件的单个上传

今天做项目的时候碰见一个问题:之前一个同事离职之前做了一个网站,有一个上传商品详细图片的功能,当时已经完成,但是由于后期程序的有更改以及更改的程序员的水平也是参差不齐,最后导致程序bug很多,由于当时用的是一个框架,最终也没找到说明文档,后来我就重新写了一个结合ajax上传文件的upload.classs.php虽然界面欠缺美观,但是通俗易懂好维护. //首先是页面. index.php <!DOCTYPE html> <html lang="en"> <

PHP核心编程--文件上传(包含多文件上传)

一.单文件上传 图片上传界面: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <form name='frm'action="./uploadSave.php" method="p

SpringMVC 文件上传配置,多文件上传,使用的MultipartFile

一.配置文件:SpringMVC 用的是 的MultipartFile来进行文件上传 所以我们首先要配置MultipartResolver:用于处理表单中的file <!-- 配置MultipartResolver 用于文件上传 使用spring的CommosMultipartResolver --> <beans:bean id="multipartResolver" class="org.springframework.web.multipart.com

php文件上传参考配置大文件上传

PHP用超级全局变量数组$_FILES来记录文件上传相关信息的,在php文件上传之前,可通过调节php.ini中相关配置指令,来控制上传相关细节. 1.file_uploads=on/off   是否允许通过http方式上传文件 2.max_execution_time=30   允许脚本最大执行时间,超过这个时间就会报错 3.memory_limit=50M   设置脚本可以分配的最大内存量,防止失控脚本占用过多内存,此指令只有在编译时设置了    --enable-memory-limit标

Servlet实现文件上传,可多文件上传

一.Servlet实现文件上传,需要添加第三方提供的jar包 下载地址: 1) commons-fileupload-1.2.2-bin.zip      :   点击打开链接 2) commons-io-2.3-bin.zip                       :    点击打开链接 接着把这两个jar包放到 lib文件夹下: 二: 文件上传的表单提交方式必须是POST方式, 编码类型:enctype="multipart/form-data",默认是 applicatio