Poi编程

1.相关jar包:
  
      dom4j.jar
     poi-3.8-beta5-20111217.jar
     poi-ooxml-3.8-beta5-20111217.jar
     poi-ooxml-schemas-3.8-beta5-20111217.jar
     poi-scratchpad-3.8-beta5-20111217.jar
     xmlbeans-2.3.0.jar

2.编写Excel-导出:
  
    /**
     * [Poi编程-导出到excel]
     * @author HanJia
     * @date 2017年4月12日 上午10:46:25
     * @return
     */
    public JSONObject excels(HttpServletRequest request){
        JSONObject obj = new JSONObject();
        //2.1创建列名数组(就是excel表格中的列名):
        String[] colName = new String[]{"列名1","列名2","列名3","列名4","列名5","列名6"};
        //2.2创建列名对应的key值(list结果会根据key与列名进行关联);
        String[] key = new String[]{"key1","key2","key3","key4","key5","key6"};
        //2.3创建工作薄
        try {
            //获取excel工作薄对象
            Workbook workbook = new SXSSFWorkbook(-1);
            //创建工作薄
            Sheet sheet = workbook.createSheet();
            /**--特殊设置第一行时-开始--**/
            //创建第一行表格
            //Row row0 = sheet.createRow(0);
            //为第一行表格填充内容
            //row0.createCell(0).setCellValue("");
            //合并第一样单元格(开始行,结束行,开始列,结束列)
            //CellRangeAddress cra=new CellRangeAddress(0, 0, 0, 6);
            //添加进工作薄
            //sheet.addMergedRegion(cra);
            //将第二行设置为第一行开始写表格
            //Row row = sheet.createRow(1);
            /**--特殊设置第一行时-结束--**/
            //创建第一行
            Row row = sheet.createRow(0);
            //设置行高
            row.setHeightInPoints(16L);
            //2.4为Excel设置列名指定不同的列宽
            for (int i = 0; i < colName.length; i++) {
                //创建当前行的每一列
                Cell cell = row.createCell(i);
                //设置列名
                cell.setCellValue(colName[i]);
                //设置列宽
                if(colName[i].equals("列名3") || colName[i].equals("列名5")){
                    sheet.setColumnWidth(i, 5000);
                }else{
                    sheet.setColumnWidth(i, 3000);
                }
            }
            //2.5list为结果集([{key1=1,key2=2,key3=3,...}{key1=1,key2=2,..}])
            List> result = new ArrayList<>();
            //判断结果集
            if(result!=null && !result.isEmpty()){
                //记录添加到哪一行了
                int count = 1;
                //2.6遍历结果集并写入excel工作薄
                for (Map map : result) {
                    //创建新的一行
                    Row row2 = sheet.createRow(count);
                    //组装数据
                    msg(map,row2,key);
                    //计数
                    count++;
                }
            }
            //2.7刷出信息到excel
            ((SXSSFSheet) sheet).flushRows();
            //2.8创建文件名字
            String fileName = UUID.randomUUID()+".xls";
            //2.9获取tomcat文件路径(WebApp/项目/files文件夹-需要在项目中WebContent下创建files文件夹)
            String address = request.getSession().getServletContext().getRealPath("/")+"files\\";
            //2.10打开文件流开始输出电子表格
            OutputStream out = new FileOutputStream(address+fileName);
            workbook.write(out);
            if(out != null){
                //关闭连接
                out.close();
                //返回成功状态和文件路径、名字
                obj.put("result", "success");
                obj.put("data", "/files/"+fileName);
                return obj;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        //失败返回错误
        obj.put("result", "error");
        return obj;
    }


     /**
     * [描述信息]
     * @author HanJia
     * @date 2017年4月12日 上午10:35:12
     * @param map 数据
     * @param row 行数
     * @param key
     */
    public void msg(Map map,Row row,String[] key){
        //为每一行设置行高
        row.setHeightInPoints(16L);
        try {
            //遍历key根据key组装内容
            for (int i = 0; i < key.length; i++) {
                //创建每一行的每一列
                Cell cell = row.createCell(i);
                //当前value不为空时写入
                if(map.get(key[i])!=null && !map.get(key[i]).equals("")){
                    if(key[i].equals("key1")){
                        cell.setCellValue(map.get(key[i]).toString());
                    }else if(key[i].equals("key2")){
                        cell.setCellValue(map.get(key[i]).toString());
                    }else if(key[i].equals("key3")){
                        cell.setCellValue(map.get(key[i]).toString());
                    }else if(key[i].equals("key4")){
                        cell.setCellValue(map.get(key[i]).toString());
                    }else if(key[i].equals("key5")){
                        cell.setCellValue(map.get(key[i]).toString());
                    }else if(key[i].equals("key6")){
                        cell.setCellValue(map.get(key[i]).toString());
                    }else{
                        cell.setCellValue(map.get(key[i]).toString());
                    }
                }else{
                //为空时写""
                    cell.setCellValue("");
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


1.相关jar包:
   
  commons-fileupload.jar
 commons-io.jar


2.编写Excel-导入:

beans.xml:
   
       
       
       
   


web.jsp:
     
           
           
     


java-controller:
/**
 * [说明/描述]
 * @author HanJia
 * @date 2017年4月20日 下午4:40:45
 * @version 1.0
 * @copyright copyright (c) 2017
 */
java.controller

      /**
      * [controller]
     * @author HanJia
     * @date 2017年4月20日 下午5:00:07
     * @param files
     */
     @RequestMapping("/file")
     @ResponseBody
      //required=true,为前台必须发送该参数变量   值可以是null 或者 ""
     public void fileControl(@RequestParam(required=true,value="files") MultipartFile[] files){
        //非空判断
        if(files!=null && files.length>0){
            //调用file处理方法
            this.fileService(files);
        }
    }

java-service:
    /**
     * [解析excel文件]
     * @author HanJia
     * @date 2017年4月20日 下午5:05:54
     * @param files
     */
    public void fileService(MultipartFile[] files){
        //获取传来的file文件的文件名字
        String fileName = files[0].getOriginalFilename();
        //获取excel文件的类型 " .xls "
        String fileType = fileName.substring(fileName.lastIndexOf(".")+1,fileName.length());
        //存放解析出来的excel内容
        List> excelList = new ArrayList>();
        //创建字节流
        ByteArrayInputStream bs = null;
        //创建工作簿
        Workbook wb = null;
        try {
            //将文件内容转换为byte数组
            byte[] bt = IOUtils.toByteArray(files[0].getInputStream());
            //将byte数组放入字节流中
            bs = new ByteArrayInputStream(bt);
            //根据文件类型创建工作簿
            if(fileType.equals("xls")){
                wb = new HSSFWorkbook(bs);
            }else{
                wb = new XSSFWorkbook(bs);
            }
            //获取excel文件对象
            Sheet sheet = wb.getSheetAt(0);
            //逐行获取结果 i=1排除第一行 i=0不排除第一行
            for( int i = 1; i < sheet.getLastRowNum()+1; i++){
                Row row = sheet.getRow(i);
                //存放每一行的数据
                List cellList = new ArrayList();
                //逐列获取结果
                for (int j = 0; j < 12; j++) {
                    if(row.getCell(j)!=null){
                        //此处需要转换cell类型否则会有异常
                        row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
                        //获取当前行当前列的内容并去空格
                        String cellValue = this.dataUtils.strMethod(row.getCell(j).getStringCellValue());
                        cellValue = (cellValue!=null && !cellValue.equals("")) ? cellValue : " ";
                        //保存当前内容
                        cellList.add(cellValue);
                    }
                    else{
                        //没有值填空白
                        cellList.add(" ");
                    }
                }
                //保存解析出来的excel内容
                excelList.add(cellList);
            }

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

你可能感兴趣的:(java)