首页 > 代码库 > JAVA通过poi对Excel数据在(jsp+ssh)环境下导入导出

JAVA通过poi对Excel数据在(jsp+ssh)环境下导入导出

POI下载与安装 

  请到网站
http://www.apache.org/dyn/closer.cgi/poi/右击超链接2.5.1.zip下载压缩包poi-bin-2.5.1-final-20040804.zip(或下载最新的这种压缩包),解压缩后得到如图2.1所示的目录结构。我们主要用到poi-2.5.1-final-20040804.jar这个库文件。请把poi-2.5.1-final-20040804.jar这个文件的路径添加到系统环境变量classpath中,否则无法编译下面的示例程序。

1. 首先搭建ssh框架(这儿不做介绍);

2. 导入jar包(如下):

3. 导出:(下面以一个例子的形式)

1.  新创建一个jsp页面如(export.jsp),在页面上添加如下代码:

<a href="http://www.mamicode.com//indexAction!export.action">导出数据到excel</a>

2.  进入indexAction.java文件,编写export方法由于要用到一个STUDENT类,就先编写STUDENT类,Student类代码如下:

public class Student {private String studentId;private String studentName;private String studentSex;private String studentDormitory;private  String studentSept;public String getStudentId() {return studentId;}public void setStudentId(String studentId) {this.studentId = studentId;}public String getStudentName() {return studentName;}public void setStudentName(String studentName) {this.studentName = studentName;}public String getStudentSex() {return studentSex;}public void setStudentSex(String studentSex) {this.studentSex = studentSex;}public String getStudentDormitory() {return studentDormitory;}public void setStudentDormitory(String studentDormitory) {this.studentDormitory = studentDormitory;}public String getStudentSept() {return studentSept;}public void setStudentSept(String studentSept) {this.studentSept = studentSept;} }

编写export方法:代码如下

此类中需要导入的jar包如下:

import java.io.IOException;import java.io.OutputStream;import java.util.List;import javax.servlet.http.HttpServletResponse;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFCellStyle;import org.apache.poi.hssf.usermodel.HSSFFont;import org.apache.poi.hssf.usermodel.HSSFHeader;import org.apache.poi.hssf.usermodel.HSSFRow;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.struts2.ServletActionContext;     public String export()throws Exception    {                        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 {            response = ServletActionContext.getResponse();//初始化HttpServletResponse对象            out = response.getOutputStream();//              StringheaderStr ="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;   }注:最好返回null,否则有可能报错。

4.数据的导入(以例子的形式展示)

 1.jsp页面的编写:在页面上添加如下代码

其中action可以自己编写,table标签的内容可以不要。(DEMO页面添加TABLE标签主要是展示导入效果)

<s:form action="indexAction!importExcel.action" method="post" enctype="multipart/form-data" theme="simple"> <td><s:file name="excelFile" id="excelFile" cssStyle="width:160px"></s:file>//选择导入的文件</td><td><input type="submit" value="http://www.mamicode.com/导入学生数据"/></td></s:form>//下面是展示导入效果<table><th>学号</th><th>姓名</th><th>性别</th><th>寝室号</th><th>所在系</th><s:iterator value="http://www.mamicode.com/stuList"><tr><td><s:property value="http://www.mamicode.com/studentId"/></td><td><s:property value="http://www.mamicode.com/studentName"/></td><td><s:property value="http://www.mamicode.com/studentSex"/></td><td><s:property value="http://www.mamicode.com/studentDormitory"/></td><td><s:property value="http://www.mamicode.com/studentSept"/></td></tr></s:iterator></table>

2.strus.xml编写(如果要展示效果,DEMo就编写的返回的页面如下)

<action name="indexAction" class="com.dev.iex.action.IndexAction">            <result name="SUCCESS">/index.jsp</result>   </action>

3. java代码如下

在indexAction中添加 

Import的类:

import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.ArrayList;import java.util.List; import javax.servlet.http.HttpServletResponse; import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFCellStyle;import org.apache.poi.hssf.usermodel.HSSFFont;import org.apache.poi.hssf.usermodel.HSSFHeader;import org.apache.poi.hssf.usermodel.HSSFRow;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.usermodel.Workbook;import org.apache.poi.xssf.usermodel.XSSFCell;import org.apache.poi.xssf.usermodel.XSSFRow;import org.apache.poi.xssf.usermodel.XSSFSheet;import org.apache.poi.xssf.usermodel.XSSFWorkbook;import org.apache.struts2.ServletActionContext;import com.dev.iex.po.Student;  定义的的变量:private File excelFile;//File对象,目的是获取页面上传的文件private  List<Student> stuList=new ArrayList<Student>(); 定义的方法: public File getExcelFile() {    return excelFile;}public void setExcelFile(File excelFile) {    this.excelFile = excelFile;}public List<Student> getStuList() {    return stuList;}public void setStuList(List<Student> stuList) {    this.stuList = stuList;} 主要编写的是importExcel方法,如下:    @SuppressWarnings("finally")public String importExcel()throws Exception{                String id=null;    String name=null;    String  sex=null;    String  Dormitory=null;    String Sept=null;         Workbook workbook = null;    int k=0;    int flag = 0;   //指示指针所访问的位置    if(excelFile!=null)    {        String path=excelFile.getAbsolutePath();//获取文件的路径         try {            workbook = new XSSFWorkbook(path);//初始化workbook对象            for (int numSheets = 0; numSheets < workbook.getNumberOfSheets(); numSheets++) {                                                //读取每一个sheet                  System.out.println("2007版进入读取sheet的循环");                    if (null != workbook.getSheetAt(numSheets)) {                           XSSFSheet aSheet = (XSSFSheet)workbook.getSheetAt(numSheets);//定义Sheet对象                        for (int rowNumOfSheet = 0; rowNumOfSheet <= aSheet.getLastRowNum(); rowNumOfSheet++) {                            //进入当前sheet的行的循环                              if (null != aSheet.getRow(rowNumOfSheet)) {                                XSSFRow  aRow = aSheet.getRow(rowNumOfSheet); //定义行,并赋值                                for (int cellNumOfRow = 0; cellNumOfRow <= aRow.getLastCellNum(); cellNumOfRow++)                                {                          //读取rowNumOfSheet值所对应行的数据                                    XSSFCell  xCell = aRow.getCell(cellNumOfRow); //获得行的列数                                                           //获得列值                                     //System.out.println("type="+xCell.getCellType());                                   if (null != aRow.getCell(cellNumOfRow))                                   {                                                                              if(rowNumOfSheet == 0)                                        {                                                                                   // 如果rowNumOfSheet的值为0,则读取表头,判断excel的格式和预定格式是否相符                                                            if(xCell.getCellType() == XSSFCell .CELL_TYPE_NUMERIC)                                               {                                                                                            }else if(xCell.getCellType() == XSSFCell .CELL_TYPE_BOOLEAN)                                             {                                                                                        }else if(xCell.getCellType() == XSSFCell .CELL_TYPE_STRING)                                             {                                            if(cellNumOfRow == 0)                                            {                                                   if(xCell.getStringCellValue().replace(‘\t‘, ‘ ‘).replace(‘\n‘, ‘ ‘).replace(‘\r‘, ‘ ‘).trim().equals("学号"))                                                 {                                                    flag++;                                                 }else{                                                   System.out.println("错误:第一行的学号不符合约定格式");                                                 }                                            }else if(cellNumOfRow == 1)                                            {                                                 if(xCell.getStringCellValue().replace(‘\t‘, ‘ ‘).replace(‘\n‘, ‘ ‘).replace(‘\r‘, ‘ ‘).trim().equals("姓名"))                                                 {                                                     flag++;                                                 }else{                                                     System.out.println("错误:第一行的姓名不符合约定格式");                                                 }                                                            }else if(cellNumOfRow == 2)                                             {                                                 if(xCell.getStringCellValue().replace(‘\t‘, ‘ ‘).replace(‘\n‘, ‘ ‘).replace(‘\r‘, ‘ ‘).trim().equals("性别")){                                                     flag++;                                                                                                     }else{                                                 System.out.println("第一行的性别不符合约定格式");        }                                                                                             }else if (cellNumOfRow == 3) {                                                 if(xCell.getStringCellValue().replace(‘\t‘, ‘ ‘).replace(‘\n‘, ‘ ‘).replace(‘\r‘, ‘ ‘).trim().equals("寝室号"))                                                 {                                                     flag++;                                                     System.out.println("=========flag:" + flag);                                                 }else{                                                 System.out.println("第一行的寝室号不符合约定格式");        }                                                                                             }else if (cellNumOfRow == 4)        {                                                 if(xCell.getStringCellValue().replace(‘\t‘, ‘ ‘).replace(‘\n‘, ‘ ‘).replace(‘\r‘, ‘ ‘).trim().equals("所在系")){                                                     flag++;                                                     System.out.println("=========flag:" + flag);                                                  }else{                                                 System.out.println("第一行的所在系不符合约定格式");        }        }      }    }    else {                                           //rowNumOfSheet != 0 即开始打印内容                             if(id != null && name != null && sex != null && Dormitory != null && Sept != null ){                               Student stu=new Student();                               stu.setStudentId(id);                               stu.setStudentName(name);                               stu.setStudentSept(Sept);                               stu.setStudentSex(sex);                               stu.setStudentDormitory(Dormitory);                               stuList.add(stu);                                k++;                            }             } //获得一行,即读取每一行              }                  //读取每一个sheet                        }            }catch (Exception e) {                    /********************************************                         下面使用的是2003除了workbook的赋值不同其它与2007基本相同,就不作介绍了                     *********************************************            InputStream is = new FileInputStream(path);                   workbook = new HSSFWorkbook(is);            try {                 for (int numSheets = 0; numSheets < workbook.getNumberOfSheets(); numSheets++) {                                                      //读取每一个sheet                       System.out.println("2003版进入读取sheet的循环");                    if (null != workbook.getSheetAt(numSheets)) {                           HSSFSheet aSheet = (HSSFSheet)workbook.getSheetAt(numSheets);                        for (int rowNumOfSheet = 0; rowNumOfSheet <= aSheet.getLastRowNum(); rowNumOfSheet++) {                                    //获得一行                                                       if (null != aSheet.getRow(rowNumOfSheet)) {                                HSSFRow  aRow = aSheet.getRow(rowNumOfSheet);                                for (int cellNumOfRow = 0; cellNumOfRow <= aRow.getLastCellNum(); cellNumOfRow++) {                                 //读取rowNumOfSheet值所对应行的数据                                    HSSFCell  aCell = aRow.getCell(cellNumOfRow);                                                                 //获得列值                                                                       if (null != aRow.getCell(cellNumOfRow)){                                        if(rowNumOfSheet == 0){                                                                                      // 如果rowNumOfSheet的值为0,则读取表头,判断excel的格式和预定格式是否相符                                                         if(aCell.getCellType() == HSSFCell .CELL_TYPE_NUMERIC){                                             }else if(aCell.getCellType() == HSSFCell .CELL_TYPE_BOOLEAN){                                             }else if(aCell.getCellType() == HSSFCell .CELL_TYPE_STRING){                                              if(cellNumOfRow == 0){                                                       if(aCell.getStringCellValue().replace(‘\t‘, ‘ ‘).replace(‘\n‘, ‘ ‘).replace(‘\r‘, ‘ ‘).trim().equals("学号")){                                                        flag++;                                                        System.out.println("=========flag:" + flag);                                                     }else{                                                       System.out.println("错误:第一行的学号不符合约定格式");                                                     }                                                }else if(cellNumOfRow == 1){                                                     if(aCell.getStringCellValue().replace(‘\t‘, ‘ ‘).replace(‘\n‘, ‘ ‘).replace(‘\r‘, ‘ ‘).trim().equals("姓名")){                                                         flag++;                                                         System.out.println("=========flag:" + flag);                                                     }else{                                                         System.out.println("错误:第一行的姓名不符合约定格式");                                                     }                                                                }else if(cellNumOfRow == 2){                                                     if(aCell.getStringCellValue().replace(‘\t‘, ‘ ‘).replace(‘\n‘, ‘ ‘).replace(‘\r‘, ‘ ‘).trim().equals("性别")){                                                         flag++;                                                         System.out.println("=========flag:" + flag);                                                     }else{                                                     System.out.println("第一行的性别不符合约定格式");                                                     }                                                                                                     }else if (cellNumOfRow == 3){                                                     if(aCell.getStringCellValue().replace(‘\t‘, ‘ ‘).replace(‘\n‘, ‘ ‘).replace(‘\r‘, ‘ ‘).trim().equals("寝室号")){                                                         flag++;                                                         System.out.println("=========flag:" + flag);                                                     }else{                                                     System.out.println("第一行的寝室号不符合约定格式");                                                     }                                                                                                     }else if (cellNumOfRow == 4){                                                     if(aCell.getStringCellValue().replace(‘\t‘, ‘ ‘).replace(‘\n‘, ‘ ‘).replace(‘\r‘, ‘ ‘).trim().equals("所在系")){                                                         flag++;                                                         System.out.println("=========flag:" + flag);                                                     }else{                                                     System.out.println("第一行的所在系不符合约定格式");                                                     }                                                 }                                             }                                        }                                        else {                                            if(aCell.getCellType() == HSSFCell .CELL_TYPE_NUMERIC){                                                                         //为数值型                                                 System.out.println("======进入XSSFCell .CELL_TYPE_NUMERIC模块==========");                                                if(cellNumOfRow == 0){                                                        id = String.valueOf(aCell.getStringCellValue().replace(‘\t‘, ‘ ‘).replace(‘\n‘, ‘ ‘).replace(‘\r‘, ‘ ‘).trim());                                                        if(id == null){                                                            System.out.println("错误:在Sheet"+(numSheets+1)+"中的第"+(rowNumOfSheet+1)+"行的第"+(cellNumOfRow+1)+"列的学号不能为空");                                                        }                                                    }else if(cellNumOfRow == 1){                                                                                                                                                   name = String.valueOf(aCell.getStringCellValue().replace(‘\t‘, ‘ ‘).replace(‘\n‘, ‘ ‘).replace(‘\r‘, ‘ ‘).trim());                                                        if(name == null){                                                            System.out.println("错误:在Sheet"+(numSheets+1)+"中的第"+(rowNumOfSheet+1)+"行的第"+(cellNumOfRow+1)+"列的姓名不能为空");                                                        }                                                    }else if(cellNumOfRow == 2){                                                                                                                                                   sex = String.valueOf(aCell.getStringCellValue().replace(‘\t‘, ‘ ‘).replace(‘\n‘, ‘ ‘).replace(‘\r‘, ‘ ‘).trim());                                                        if(sex == null){                                                            System.out.println("错误:在Sheet"+(numSheets+1)+"中的第"+(rowNumOfSheet+1)+"行的第"+(cellNumOfRow+1)+"列的性别不能为空");                                                        }                                                                                                  }else if (cellNumOfRow == 3){                                                                                                                                                   Dormitory = String.valueOf(aCell.getStringCellValue().replace(‘\t‘, ‘ ‘).replace(‘\n‘, ‘ ‘).replace(‘\r‘, ‘ ‘).trim());                                                        if(Dormitory == null){                                                         System.out.println("错误:在Sheet"+(numSheets+1)+"中的第"+(rowNumOfSheet+1)+"行的第"+(cellNumOfRow+1)+"列的寝室号不能为空");                                                        }                                                    }else if (cellNumOfRow == 4){                                                                                                                                                   Sept = String.valueOf(aCell.getStringCellValue().replace(‘\t‘, ‘ ‘).replace(‘\n‘, ‘ ‘).replace(‘\r‘, ‘ ‘).trim());                                                        if(Sept == null){                                                                                  System.out.println("错误:在Sheet"+(numSheets+1)+"中的第"+(rowNumOfSheet+1)+"行的第"+(cellNumOfRow+1)+"列的所在系不能为空");                                                        }                                                                                                       }                                                                                      }else if(aCell.getCellType() == HSSFCell .CELL_TYPE_STRING){                                                                      //为字符串型                                                 System.out.print("===============进入XSSFCell .CELL_TYPE_STRING模块============");                                                if(cellNumOfRow == 0){                                                        id = aCell.getStringCellValue().replace(‘\t‘, ‘ ‘).replace(‘\n‘, ‘ ‘).replace(‘\r‘, ‘ ‘).trim();                                                        if(id == null){                                                            System.out.println("错误:在Sheet"+(numSheets+1)+"中的第"+(rowNumOfSheet+1)+"行的第"+(cellNumOfRow+1)+"列的学号不能为空");                                                        }                                                    }else if(cellNumOfRow == 1){                                                                                                                                                   name = aCell.getStringCellValue().replace(‘\t‘, ‘ ‘).replace(‘\n‘, ‘ ‘).replace(‘\r‘, ‘ ‘).trim();                                                        if(name == null){                                                            System.out.println("错误:在Sheet"+(numSheets+1)+"中的第"+(rowNumOfSheet+1)+"行的第"+(cellNumOfRow+1)+"列的姓名不能为空");                                                        }                                                    }else if(cellNumOfRow == 2){                                                                                                                                                   sex = aCell.getStringCellValue().replace(‘\t‘, ‘ ‘).replace(‘\n‘, ‘ ‘).replace(‘\r‘, ‘ ‘).trim();                                                        if(sex == null){                                                            System.out.println("错误:在Sheet"+(numSheets+1)+"中的第"+(rowNumOfSheet+1)+"行的第"+(cellNumOfRow+1)+"列的性别不能为空");                                                        }                                                                                                  }else if (cellNumOfRow == 3){                                                                                                                                                  Dormitory =aCell.getStringCellValue().replace(‘\t‘, ‘ ‘).replace(‘\n‘, ‘ ‘).replace(‘\r‘, ‘ ‘).trim();                                                        if(Dormitory == null){                                                         System.out.println("错误:在Sheet"+(numSheets+1)+"中的第"+(rowNumOfSheet+1)+"行的第"+(cellNumOfRow+1)+"列的寝室号不能为空");                                                        }                                                    }else if (cellNumOfRow == 4){                                                                                                                                                   Sept =aCell.getStringCellValue().replace(‘\t‘, ‘ ‘).replace(‘\n‘, ‘ ‘).replace(‘\r‘, ‘ ‘).trim();                                                        if(Sept == null){                                                                                 System.out.println("错误:在Sheet"+(numSheets+1)+"中的第"+(rowNumOfSheet+1)+"行的第"+(cellNumOfRow+1)+"列的所在系不能为空");                                                        }                                                    }                                                                                                 }else if (aCell.getCellType() == HSSFCell .CELL_TYPE_BLANK) {                                              System.out.println("提示:在Sheet"+(numSheets+1)+"中的第"+(rowNumOfSheet+1)+"行的第"+(cellNumOfRow+1)+"列的值为空,请查看核对是否符合约定要求".toString());                                             }                                        }                                                                                                            }                                                                 }                                                                if (flag!=5){                                   System.out.println("请核对后重试");                                                                       }                            }                                            if(id != null && name != null && sex != null && Dormitory != null && Sept != null ){                                   Student stu=new Student();                                   stu.setStudentId(id);                                   stu.setStudentName(name);                                   stu.setStudentSept(Sept);                                   stu.setStudentSex(sex);                                   stu.setStudentDormitory(Dormitory);                                   stuList.add(stu);                                    k++;                                }                                                    }                        if(k!=0){                          System.out.println("提示:您导入的数据已存在于数据库,请核对!k 为:" + k);                          }else{                              System.out.println("提示:成功导入了"+k+"条数据");                          }                    }                   }                                           } catch (Exception ex) {                    ex.printStackTrace();                }finally{                    try {                        if(is!=null)                            is.close();                    }catch (Exception e1) {                            e1.printStackTrace();                    }                }            }    }    return "SUCCESS";    }

 

JAVA通过poi对Excel数据在(jsp+ssh)环境下导入导出