zoukankan      html  css  js  c++  java
  • 简单Excel表格上传下载,POI

    一、废话

    Excel表格是office软件中的一员,几乎是使用次数最多的办公软件。所以在java进行企业级应用开发的时候经常会用到对应的上传下载便利办公。

    目前,比较常用的实现Java导入、导出Excel的技术有两种Jakarta POI和Java Excel。

    我最近使用的是POI进行上传下载。

    官方主页http://poi.apache.org/index.html,API文档http://poi.apache.org/apidocs/index.html

    二、正事

    HSSF(用于操作Excel的组件)提供给用户使用的对象在rg.apache.poi.hssf.usermodel包中,有以下几种对象:

    HSSFWorkbook                      excel的文档对象

    HSSFSheet                         excel的表单

    HSSFRow                           excel的行

    HSSFCell                          excel的格子单元

    HSSFFont                          excel字体

    HSSFDataFormat                    日期格式

    HSSFHeader                        sheet头

    HSSFFooter                        sheet尾(只有打印的时候才能看到效果)

    HSSFCellStyle                       cell样式

    HSSFDateUtil                        日期

    HSSFPrintSetup                      打印

    HSSFErrorConstants                  错误信息表

    其实Excel表格的操作类似于前端的TABLE操作:

    HSSFWorkbook→HSSFSheet →HSSFRow→HSSFCell  

    (工作文档对象→列表单对象 →行对象→列对象)  

    然后可以插入文字,设置格式,设置字体等处理

    下面演示一个小小的示范

     1 //文件源对象
     2 POIFSFileSystem fs=null;
     3 //工作文档对象
     4 HSSFWorkbook wb=null;
     5 //工作表单对象
     6 HSSFSheet sheet=null;
     7 
     8 fs=new POIFSFileSystem(new FileInputStream("D:/P1200/P1200/WebRoot/excel/"+filename+".xls"));
     9 wb = new HSSFWorkbook(fs);
    10 //获取第一个表单
    11 sheet =wb.getSheetAt(0);
    12 //获取第一行
    13 HSSFRow row = sheet.getRow(0);
    14 //获取第一行的第一列
    15 HSSFCell cell = row.getCell(0);
    16 //为得到的单元格对象赋值
    17 cell.setCellValue("随意");

    操作过程中需要记得几个要点:

    第一:你操作的对象是建立在java中的对象所以最后要是用如下IO流进行实现

    1 FileOutputStream fileOut = new FileOutputStream("D:/P1200/P1200/WebRoot/excel/"+filename+".xls");
    2 wb.write(fileOut);

    第二:注意每一个对象类似数组:也就是说起点是0;

    第三:setCellValue()这个方法现在是不推荐使用;

    现在给出一个SpringMVC上传实例;

    @RequestMapping("/report")
        public String report(@RequestParam("Excle")MultipartFile file,HttpServletRequest request){
                    //设置文件名,由系统时间生成比较难冲突,用来保存上传记录
            String fileName=System.currentTimeMillis()+".xls";
            String path = request.getSession().getServletContext().getRealPath("reportExcle");
                      //创建文档对象
            File targetFile = new File(path,fileName);
                      //异常字符串
            String EXCEPTION_PersonMsg=null;
                       //文档对象实例化
            if(!targetFile.exists()){
                targetFile.mkdirs();//递归创建父目录
            }
            try {
                file.transferTo(targetFile);
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }                                                            
            
             
    
            HSSFWorkbook wb=null;
            try {
                POIFSFileSystem fs=new POIFSFileSystem(new FileInputStream("d:/P1200/P1200/WebRoot/reportExcle/"+fileName)); 
                wb = new HSSFWorkbook(fs);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } 
            
            //得到Excel工作表对象    
                    HSSFSheet sheet = wb.getSheetAt(0);   
    
            
            //校验可以不用看自己另外写
          
            
            //与数据库进行交互
         //通过循环遍历表中每行
    for(i=1;i<sheet.getLastRowNum();i++){ Personalmsg bean=new Personalmsg(); HSSFRow row = sheet.getRow(i);
    //通过循环遍历行中每列
    for(int j=0;j<5;j++){ HSSFCell cell = row.getCell((short)j); System.out.println(cell); if(j==1&&cell!=null&&!cell.toString().trim().equals("")){ bean.setPersonMsgs(cell.toString()); } if(j==2&&cell!=null&&!cell.toString().trim().equals("")){ bean.setPersonMsgNote(cell.toString()); } if(j==3&&cell!=null&&!cell.toString().trim().equals("")){ bean.setPrice(Double.parseDouble(cell.toString())); } if(j==4){ bean.setPersonMsgDate(new Date()); bean.setStatus(1); System.out.println(bean); XXXXXXXX.save(bean); } } } return "redirect:/test/PersonMsg/tolist.spring"; }

    在使用上传过程中可以把上传文件直接转换成IO流不用保存源文件

    在上传过程中应该避免以ajax技术提交文件,因为会与MultipartFile冲突导致找不到对应的Requestmapping

  • 相关阅读:
    LeetCode-079-单词搜索
    awk学习笔记
    Python实现排列组合算法
    python模拟登录人人
    Python的SQLite数据库使用方法
    C语言排序算法——插入排序算法
    C语言排序算法——简单选择排序算法
    C语言排序算法——冒泡排序算法
    Python学习——python的函数参数传递
    Python学习——实现secure copy功能
  • 原文地址:https://www.cnblogs.com/blackdeng/p/6043623.html
Copyright © 2011-2022 走看看