Java 使用POI实现execl的导入导出数据实践

Wesley13
• 阅读 474

该篇文章使用poi3.5的版本

需要导入包如下

Java 使用POI实现execl的导入导出数据实践

execl导入

/**
     * execl 数据导入
     * @author 小涂
     * @title : import_excel
     * @date Aug 21, 2013 1:04:42 PM
     * @return String
     */
    public static String import_excel(){
        String id=null;
        String name=null;
        String  sex=null;
        String  Dormitory=null;
        String Sept=null;

        Workbook workbook = null;
        int k=0;
        int flag = 0;   //指示指针所访问的位置
        String path="C:/Users/X/Desktop/212.xls";//获取文件的路径
        try {
            InputStream is = new FileInputStream(path);
            HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);

            // 循环工作表Sheet
            for (int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++) {
                HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);
                if (hssfSheet == null) {
                    continue;
                }
                // 循环行Row
                for (int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {
                    HSSFRow hssfRow = hssfSheet.getRow(rowNum);
                    if (hssfRow == null) {
                        continue;
                    }
                    // 循环列Cell
                    // "学号","姓名","性别","寝室号","所在系"};
                    for (int cellNum = 0; cellNum <=4; cellNum++) {
                        HSSFCell xh = hssfRow.getCell(cellNum);
                        if (xh == null) {
                            continue;
                        }
                        System.out.print(getValue(xh)+"\t");
                    }
                    System.out.print("\n");
                }
            }
        }catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }

        return  null;
    }

    
    /**
     * 得到Excel表中的值
     * 
     * @param hssfCell
     *            Excel中的每一个格子
     * @return Excel中每一个格子中的值
     */
    @SuppressWarnings("static-access")
    private static String getValue(HSSFCell hssfCell) {
        if (hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN) {
            // 返回布尔类型的值
            return String.valueOf(hssfCell.getBooleanCellValue());
        } else if (hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC) {
            // 返回数值类型的值
            return String.valueOf(hssfCell.getNumericCellValue());
        } else {
            // 返回字符串类型的值
            return String.valueOf(hssfCell.getStringCellValue());
        }
    }

导出execl 文件

/**
     * 导出execl 文件
     * @author 小涂
     * @title : extport
     * @date Aug 21, 2013 12:27:38 PM
     * @return String
     */

    public String extport(){
        List studentList=new ArrayList<Student>();//学生LIst

        for(int i=0;i<10;i++)
        {   Student student=new Student();//学生对象
        student.setStudentId("200908110"+i);
        student.setStudentName("杨波"+i);
        student.setStudentSex("男");
        student.setStudentDormitory("14-20"+i);
        student.setStudentSept("软件工程系");
        studentList.add(student);
        }

        String []tableHeader={"学号","姓名","性别","寝室号","所在系"};

        short cellNumber=(short)tableHeader.length;//表的列数
        HSSFWorkbook workbook = new HSSFWorkbook();   //创建一个excel
        HSSFCell cell = null;                                    //Excel的列
        HSSFRow row = null;                                      //Excel的行
        HSSFCellStyle style = workbook.createCellStyle();        //设置表头的类型
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        HSSFCellStyle style1 = workbook.createCellStyle();       //设置数据类型
        style1.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        HSSFFont font = workbook.createFont();                 //设置字体
        HSSFSheet sheet = workbook.createSheet("sheet1");        //创建一个sheet
        HSSFHeader header = sheet.getHeader();//设置sheet的头
        try {              
            if(studentList.size() < 1 ){
                header.setCenter("查无资料");
            }else{
                header.setCenter("学生表");
                row = sheet.createRow(0);
                row.setHeight((short)400);
                for(int k = 0;k < cellNumber;k++){
                    cell = row.createCell(k);//创建第0行第k列
                    cell.setCellValue(tableHeader[k]);//设置第0行第k列的值
                    sheet.setColumnWidth(k,8000);//设置列的宽度
                    font.setColor(HSSFFont.COLOR_NORMAL);      // 设置单元格字体的颜色.
                    font.setFontHeight((short)350); //设置单元字体高度
                    style1.setFont(font);//设置字体风格
                    cell.setCellStyle(style1);
                }

                for(int i = 0 ;i < studentList.size() ;i++){                            
                    Student student1 = (Student)studentList.get(i);//获取student对象
                    row = sheet.createRow((short) (i + 1));//创建第i+1行
                    row.setHeight((short)400);//设置行高

                    if(student1.getStudentId() != null){
                        cell = row.createCell(0);//创建第i+1行第0列
                        cell.setCellValue(student1.getStudentId());//设置第i+1行第0列的值
                        cell.setCellStyle(style);//设置风格
                    }
                    if(student1.getStudentName() != null){
                        cell = row.createCell(1); //创建第i+1行第1列

                        cell.setCellValue(student1.getStudentName());//设置第i+1行第1列的值

                        cell.setCellStyle(style); //设置风格
                    }
                    //由于下面的和上面的基本相同,就不加注释了
                    if(student1.getStudentSex() != null){
                        cell = row.createCell(2);
                        cell.setCellValue(student1.getStudentSex());
                        cell.setCellStyle(style);
                    }
                    if(student1.getStudentDormitory()!= null){
                        cell = row.createCell(3);
                        cell.setCellValue(student1.getStudentDormitory());
                        cell.setCellStyle(style);
                    }
                    if(student1.getStudentSept() != null){
                        cell = row.createCell(4);
                        cell.setCellValue(student1.getStudentSept());
                        cell.setCellStyle(style);
                    }

                }

            }

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

        // HttpServletResponse response = null;//创建一个HttpServletResponse对象
        OutputStream out = null;
        try {
            out = new FileOutputStream(new File("C:/Users/X/Desktop/212.xls"));
            //response = ServletActionContext.getResponse();//初始化HttpServletResponse对象
            //out = response.getOutputStream();//
        } catch (FileNotFoundException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        try {

//             String headerStr ="student学生";
//             headerStr =new String(headerStr.getBytes("gb2312"), "ISO8859-1");//headerString为中文时转码
//             response.setHeader("Content-disposition","attachment; filename="+    headerStr+".xls");//filename是下载的xls的名,建议最好用英文
//             response.setContentType("application/msexcel;charset=UTF-8");//设置类型
//             response.setHeader("Pragma","No-cache");//设置头
//             response.setHeader("Cache-Control","no-cache");//设置头
//             response.setDateHeader("Expires", 0);//设置日期头
            
            workbook.write(out);
            out.flush();
            workbook.write(out);
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            try{
                if(out!=null){
                    out.close();
                }
            }catch(IOException e){
                e.printStackTrace();
            }
        }
        return null;
    }

如果你是在web应用是使用请将Response 和out 的代码打开

测试结果

导出文件

Java 使用POI实现execl的导入导出数据实践

导入数据

Java 使用POI实现execl的导入导出数据实践

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
PHP导入导出EXCELl,CSV
PHP导入导出Excel,CSVHTML<formaction"{:U('Admin/Unit/importcsv')}"method"post"name"myform"id"myform"enctype"multipart/formdata"<input
Wesley13 Wesley13
2年前
Java爬虫之JSoup使用教程
title:Java爬虫之JSoup使用教程date:201812248:00:000800update:201812248:00:000800author:mecover:https://imgblog.csdnimg.cn/20181224144920712(https://www.oschin
Wesley13 Wesley13
2年前
VirtualBox导入已安装好的操作系统的方法
VirtualBox导入已安装好的操作系统的方法1、修改UUID进入VirtualBox安装目录,运行VBoxManage修改UUID,命令运行如下:D:\\VirtualBoxVBoxManage.exe internalcommands setvdiuuid E:\\VirtualX
Stella981 Stella981
2年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这