开发者社区> 沉江剑> 正文

Java与Excel的交互!-

简介: Java与Excel的交互!-
+关注继续查看

-1. Excel (POI)

1.1 导入poi报表需要的jar包

<poi.version>3.11</poi.version>

<!--
<!-- Excel解析工具类  
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>${poi.version}</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>${poi.version}</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml-schemas</artifactId>
    <version>${poi.version}</version>
</dependency>
-->
<!-- excel2003使用的包 -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.11</version>
        </dependency>
        <!-- excel2007+使用的包 -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.11</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-schemas</artifactId>
            <version>3.11</version>
        </dependency>

1.2.访问

$("#exportXlsBtn").click(function(){
    // 下载效果  不能是ajax异步
   <!-- $.ajax({
        type: "GET",
        url: "/report/exportXls"
    });
    -->
 location.href = "/excelInpost/downLoad?filename=运单模板表.xlsx";        
});

1.3 用法(页面)


<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>运单批量导入</title>
        <!-- 导入jquery核心类库 -->
        <script type="text/javascript" src="../../js/jquery-1.8.3.js"></script>
        <!-- 导入easyui类库 -->
        <link rel="stylesheet" type="text/css" href="../../js/easyui/themes/default/easyui.css">
        <link rel="stylesheet" type="text/css" href="../../js/easyui/themes/icon.css">
        <link rel="stylesheet" type="text/css" href="../../js/easyui/ext/portal.css">
        <link rel="stylesheet" type="text/css" href="../../css/default.css">
        <script type="text/javascript" src="../../js/easyui/jquery.easyui.min.js"></script>
        <script type="text/javascript" src="../../js/easyui/ext/jquery.portal.js"></script>
        <script type="text/javascript" src="../../js/easyui/ext/jquery.cookie.js"></script>
        <script src="../../js/easyui/locale/easyui-lang-zh_CN.js" type="text/javascript"></script>
        <script type="text/javascript" src="../../js/jquery.ocupload-1.1.2.js"></script>
        <script type="text/javascript">
            $(function(){
                $("#grid").datagrid({
                    url : '/wayBill/pageQuery',
                    method:"GET",
                    toolbar : [
                        {
                            id : 'btn-download',
                            text : '模板下载',
                            iconCls : 'icon-save',
                            handler : function(){
                                $.messager.confirm("提示","您确定下载模板吗?",function () {
                                    location.href = "/excelInpost/downLoad?filename=运单模板表.xlsx";
                                })
                            }
                        },{
                            id : 'btn-upload',
                            text : '批量导入',
                            iconCls : 'icon-redo'
                        },{
                            id : 'btn-refresh',
                            text : '刷新',
                            iconCls : 'icon-reload',
                            handler : function(){
                                $("#grid").datagrid('reload');                        
                            }
                        }        
                    ],
                    columns : [[
                        {
                            field : 'id',
                            title : '编号',
                            width : 120 ,
                            align : 'center'
                        },{
                            field : 'goodsType',
                            title : '产品',
                            width : 120 ,
                            align : 'center'
                        },{
                            field : 'sendProNum',
                            title : '快递产品类型',
                            width : 120 ,
                            align : 'center'
                        },{
                            field : 'sendName',
                            title : '发件人姓名',
                            width : 120 ,
                            align : 'center'
                        },{
                            field : 'sendMobile',
                            title : '发件人电话',
                            width : 120 ,
                            align : 'center'
                        },{
                            field : 'sendAddress',
                            title : '发件人地址',
                            width : 120 ,
                            align : 'center'
                        },{
                            field : 'recName',
                            title : '收件人姓名',
                            width : 120 ,
                            align : 'center'
                        },{
                            field : 'recMobile',
                            title : '收件人电话',
                            width : 120 ,
                            align : 'center'
                        },{
                            field : 'recCompany',
                            title : '收件人公司',
                            width : 120 ,
                            align : 'center'
                        },{
                            field : 'recAddress',
                            title : '收件人地址',
                            width : 120 ,
                            align : 'center'
                        }
                    ]],
                    pageList: [10,20,30],
                    pagination : true,
                    striped : true,
                    singleSelect: true,
                    rownumbers : true,
                    fit : true // 占满容器
                });
                
                /*// 一键上传
                $("#btn-upload").upload({
                     name: 'upload',  // <input name="file" />
                     action: '/excelInpost/excelUp',  // 提交请求action路径
                     enctype: 'multipart/form-data', // 编码格式
                     autoSubmit: true, // 选中文件提交表单
                     onComplete: function(response) {
                            if(response=="success"){
                                $.messager.alert("提示信息","数据导入成功!","info");
                                $("#grid").datagrid("reload");
                            }else{
                                $.messager.alert("错误提示",response,"error");
                            }
                     }// 请求完成时 调用函数
                });*/
                $("#btn-upload").upload({
                    action:"/excelInpost/excelUp",
                    name:"myFile",
                    onComplete:function () {
                        $.messager.alert("提示信息","数据导入成功!","info");
                        $("#grid").datagrid("reload");
                    },
                    onSelect:function () {
                        // 如果文件名字不符合要求,就阻止提交,
                        // 1 关闭默认的自动提交
                        this.autoSubmit = false;
                        // 2 获取文件名
                        var filename = this.filename();
                        // 3 正则表达式校验
                        // . 1个换行符意外的任意字符
                        // * 0-n个任意字符
                        // \. 标识.
                        // (a|b)  只能出现a或者b
                        var regex = /^.*\.(xls|xlsx)$/;
                        // 校验
                        if (regex.test(filename)) {
                            // 手动提交
                            this.submit();
                        }else{
                            // 不符合规则,不提交,给出提醒
                            $.messager.alert("提示","请选择xls或者xlsx结尾的文件")
                        }
                    }
                })
            });
        </script>

    </head>

    <body class="easyui-layout">
        <div region="center">
            <table id="grid"></table>
        </div>
    </body>
</html>

1.4 用法(后台) --->自定义模板下载

  /**
     * 模板下载
     * @param filename 文件名
     * @return
     * @throws Exception
     */
    @GetMapping("/downLoad")
    public ResponseEntity<String> downLoadExcel(String filename) throws Exception {

        System.out.println(filename+"-------------------------------------------------------");
        /**
         * 查找数据之后,下面只需要将内容写进xls中,然后下载
         */

        //1 创建工作簿
        Workbook wb = new XSSFWorkbook();
        //2 创建工作表
        Sheet sheet = wb.createSheet();

        /**
         * 定义公共变量
         */
        int rowNo=0,cellNo=0;//行号  和  列号
        Row nRow = null;// 行对象通用变量
        Cell nCell = null;// 单元格对象通用变量

        /****************大标题打印****************/
        //3 创建行
        nRow = sheet.createRow(rowNo);
        // 设置行高
        nRow.setHeightInPoints(36);
        //4 创建单元格
        nCell = nRow.createCell(cellNo);
        //5 设置内容
        nCell.setCellValue("运单数据");
        //6 设置内容格式
        // 合并单元格  //参数1:起始行 参数2:终止行 参数3:起始列 参数4:终止列
        sheet.addMergedRegion(new CellRangeAddress(0, 0, (short) 0, (short) 9));
        // 样式
        CellStyle bigTitleCellStyle = bigTitleStyle(wb);
        nCell.setCellStyle(bigTitleCellStyle);

        rowNo++;
        nRow = sheet.createRow(rowNo);

        //小标题
        String[] titles={"编号","产品","快递产品类型","发件人姓名","发件人电话","发件人地址","收件人姓名","收件人电话","收件人公司","收件人地址"};

        for (int i = 0;i<titles.length;i++){
            String title = titles[i];
            //4 创建单元格
            nCell = nRow.createCell(cellNo++);// 先创建单元格,然后在新增
            //5 设置内容
            nCell.setCellValue(title);
            //6 设置内容格式
            nCell.setCellStyle(titleStyle(wb));

            //设置列宽 -->自动
            sheet.autoSizeColumn(i);
            sheet.setColumnWidth(i,sheet.getColumnWidth(i)*17/10);


        }

        //下载
        DownloadUtil downloadUtil = new DownloadUtil();
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        wb.write(byteArrayOutputStream);
        downloadUtil.download(byteArrayOutputStream,response,filename);

        return new ResponseEntity<>(HttpStatus.OK);

    }

1.5 上传导入

/**
     * 导入
     * @return
     */
    @RequestMapping("/excelUp")
    public ResponseEntity<Void> batchImport(@RequestParam("myFile") MultipartFile file){
        try {

            // 1.1 获取文件名
            String originalFilename = file.getOriginalFilename();// 文件名
            String name = file.getName();//此名字对应<input> 文本框的name属性的值
            // 1.2 设置保存的path
            String path = "d:\\"+ UUID.randomUUID().toString()+originalFilename;
            // 1.3 创建File--path
            File myFile = new File(path);
            // 1.4 复制
            file.transferTo(myFile);


            // 解析xls,将数据存入数据库
            // 2 创建Workbook
            // 2.1 创建输入流
            FileInputStream is = new FileInputStream(myFile);
//            InputStream is = file.getInputStream();

            // 2.2 创建Workbook
            Workbook wb = new XSSFWorkbook(is);
            // 3 获取Sheet
            Sheet sheet = wb.getSheetAt(0);

            // 定义List集合存放数据,最后一次性保存
            List<WayBill> list = new ArrayList<>();

            // 4 获取row
            for(Row row:sheet){
                // 5 获取单元格数据
                // 跳过第一行
                if(row.getRowNum()==0 || row.getRowNum()==1){
                    continue;
                }

                // 如果第一列为空,整条数据都不读取
                if(row.getCell(0)==null || (int) row.getCell(0).getNumericCellValue()==0){
                    continue;
                }


                WayBill wayBill = new WayBill();
                //编号
                int value0 = (int) row.getCell(0).getNumericCellValue();
                wayBill.setId(value0);

                //产品
                wayBill.setGoodsType(row.getCell(1).getStringCellValue());

                //快递产品类型
                wayBill.setSendProNum(row.getCell(2).getStringCellValue());

                //发件人姓名
                wayBill.setSendName(row.getCell(3).getStringCellValue());

                //发件人电话
                String value4 =""+ (int) row.getCell(4).getNumericCellValue();
                wayBill.setSendMobile(value4);

                //发件人地址
                wayBill.setSendAddress(row.getCell(5).getStringCellValue());

                //收件人姓名
                wayBill.setRecName(row.getCell(6).getStringCellValue());

                //收件人电话
                wayBill.setRecMobile(""+ (int) row.getCell(7).getNumericCellValue());

                //收件人公司
                wayBill.setRecCompany(row.getCell(8).getStringCellValue());

                //收件人地址
                wayBill.setRecAddress(row.getCell(9).getStringCellValue());


                list.add(wayBill);
            }


            // 6 保存至数据库
            wayBillService.saveWayBillAll(list);


        }catch (Exception e){
            e.printStackTrace();
            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
        }
        return new ResponseEntity<>(HttpStatus.OK);
    }



    public CellStyle bigTitleStyle(Workbook wb){
        // 创建格式
        CellStyle cellStyle = wb.createCellStyle();
        // 水平对齐方式
        cellStyle.setAlignment(CellStyle.ALIGN_CENTER);
        // 垂直居中
        cellStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);

        // 设置字体
        Font font = wb.createFont();
        // 是数值的1/20 大小
        font.setFontHeight((short) 480);

        font.setBold(true);
        font.setColor(Font.COLOR_RED);

        cellStyle.setFont(font);
        return cellStyle;
    }

    public CellStyle titleStyle(Workbook wb){
        CellStyle cellStyle = wb.createCellStyle();
        cellStyle.setBorderTop(CellStyle.BORDER_THIN);
        cellStyle.setBorderRight(CellStyle.BORDER_THIN);
        cellStyle.setBorderBottom(CellStyle.BORDER_THIN);
        cellStyle.setBorderLeft(CellStyle.BORDER_THIN);

        Font font = wb.createFont();
        font.setFontHeight((short)300);
        cellStyle.setFont(font);
        return cellStyle;
    }

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
18066 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
24839 0
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
17050 0
阿里云服务器ECS远程登录用户名密码查询方法
阿里云服务器ECS远程连接登录输入用户名和密码,阿里云没有默认密码,如果购买时没设置需要先重置实例密码,Windows用户名是administrator,Linux账号是root,阿小云来详细说下阿里云服务器远程登录连接用户名和密码查询方法
21553 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
18684 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
18674 0
+关注
10
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载