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

一.文件上传到数据库

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.       
          
    1. //学生模型
    2. public class Student{
    3. private String name;
    4. private String gender;
    5. private int age;
    6. ......
    7. }

  2. //对应数据库表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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hspringh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值