poi之Excel文件上传到数据库和导出(结合ssh)

来源:互联网 发布:月相模拟软件 编辑:程序博客网 时间:2024/05/23 20:48

一.文件上传到数据库

1.Jquery相关文件
     a.jquery-1.8.3.js
  b.jquery.ocupload-1.1.2.js
2.poi相关jar包,可从网上下载
  核心包:poi-3.9-20121203.jar(版本可根据需要选择)
  相关包:根据需要选择是否导入
3.上传学生表Student实例及相关代码
    1. //学生模型
    2. public class Student{
    3. private String name;
    4. private String gender;
    5. private int age;
    6. ......
    7. }

  1. //对应数据库表t_student
        第一步:前端定义上传按钮 
  1. <input type="button" id="upload" value = "上传"/>
        第二步:前端调用js
  1. $(function(){
  2. $("#upload").upload({
action:"uploadAction_test.action"//上传请求 name:filename//上传文件名称 params:{}//传递请求参数,可选 onSelect:function(selef,element){}//根据需要选择触发事件 onComplete:function (data, self, element) {}//上传完毕后的回调
  1. });
  2. });
        第三步:服务端处理action请求
  1. public class uploadAction extends ActionSupport implements ModelDriven<Sudent> {
  2. //模型驱动
  3. private Studnet student = new Student();
  4. public Studnet getModel() {
  5. return student;
  6. }
  7. private File filename;//对应js中的filename
  8. public void setFilename(File filename) {
  9.   this.filename=filename;
  10. }
  11. public String test () 
  12. //定义list集合用来封装存储数据
  13. List<Studnet> list = new ArrayList<Studnet> ();
  14. //关联excle表,创建excel操作对象
  15. HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(filename)); 
  16. //拿到excel表中的sheet  
  17. HSSFSheet sheetAt = workbook.getSheetAt(0);
  18.         // 循环遍历sheet,拿到表中的每一行        for (Row row : sheetAt) {            //去掉标题行            if(row.getRowNum()==0){                continue;            }            //拿到每一行并封装成对象,注意拿到的都是Sting类型            String name = row.getCell(0).getStringCellValue();            String age = row.getCell(1).getStringCellValue();
  19.             String gender = row.getCell(2).getStringCellValue();
  20.             //封装成对象
  21.             Student student = new Student (name,Integer.parseInt(age),gender)
  22.             //存储到集合
  23.             list.add(student);
  24.     }
  25.     //调用服务层,将集合中的元素取出存到数据库即可
  26.     new service().importXls(list);
  27. }
  28.  ......省略服务层以及dao层的代码

        二.导出下载数据到excel 表

       第一步:前端下载请求
  1. <input type="button"  id = "download" value="导出"/>
  1. $(function(){
    1. $("#download").click(function(){
    2.       window.location.href="downloadAction_exportXls.action";
    3. });
  2. });
       第二步:服务端处理请求
      
  1.   public class DownloadAction extends ActionSupport impelemts ModelDriven<Student> {
  2.         public String  exportXls() {
  3.         //通过服务层和dao层,查询数据库,获得需要导出的数据
  4.         List<Studnet> list = daoImpl.getStudnets()//简写直接调用dao
  5.         //创建excel操作对象
  6.         HSSFWorkbook workbook = new HSSFWorkbook();
  7.          //创建sheet
  8.         HSSFSheet  sheet = workbook.createSheet("学生数据");
  9.          //设置表格的标题行
  10.          HSSFRow  headRow = sheet.createRow(0);
  11.           headRow.createCell(0).setCellValue("姓名");
      1. headRow.createCell(1).setCellValue("年龄");
      2. headRow.createCell(2).setCellValue("性别");
      3. //遍历集合,将每一条记录写入excel表
      4. for (Student student : list) {
  12.             HSSFRow row = sheet.createRow(sheet.getLastRowNum() + 1);
  13.             row.createCell(0).setCellValue(studetn.getName());
  14.             row.createCell(1).setCellValue(subarea.getAge());
  15.             row.createCell(2).setCellValue(subarea.getGender());
  16.          } 
  17.            //创建输出流
  18.           ServletOutputStream  os = ServletActionContext.getResponse().getOutputStream();
  19.           //下载的文件名
  20.           String filename = "学生数据.xsl"
  21.            //利用工具类处理文件名,做到浏览器兼容
  22.            filename=FileUtils.encodeDownloadFilename(filename,ServletActionContext.getRequest().getHead("user-agent");
  23.            //设置响应头
  24.     ServletActionContext.getResponse().setContentType(ServletActionContext.getServletContext.getMimeType(filename));
  25. ServletActionContext.getRespone().setHeader("content-disposition","attachement;filename="+filename);
  26.     workbook.write(os);
  27.      }
  28. }
  29. //文件工具类public class FileUtils {        /**         * 下载文件时,针对不同浏览器,进行附件名的编码         *          * @param filename         *            下载文件名         * @param agent         *            客户端浏览器         * @return 编码后的下载附件名         * @throws IOException         */        public static String encodeDownloadFilename(String filename, String agent)                throws IOException {            if (agent.contains("Firefox")) { // 火狐浏览器                filename = "=?UTF-8?B?"                        + new BASE64Encoder().encode(filename.getBytes("utf-8"))                        + "?=";                filename = filename.replaceAll("\r\n", "");            } else { // IE及其他浏览器                filename = URLEncoder.encode(filename, "utf-8");                filename = filename.replace("+"," ");            }            return filename;        }}










0 0
原创粉丝点击