java使用poi进行excle的导入导出(多种方式)

一、Excel的导入导出

1、通过本地的导出模版进行Excel的导出(适合表头比较复杂的导出)

这个是我放到本地的模版 

以下是我导出的方法

我把查询出来的数据放到一个二维数组里面 通过读取二维数组的数据进行导出

 

 

导出来之后的数据就是

 

2 丶通过POI进行excle导出数据  

直接上代码  需要自己创建一个user实体类

@Override
    public void downloadFile(HttpServletRequest request,HttpServletResponse response) {
        try {
            
            User users = new User();
            users.setId("1222");
            users.setUsername("张三");
            users.setPhone("1760767162");
            users.setAddress("深圳塘朗");
            users.setCardno("4325241995086246");
            users.setTitel("java删库到跑路");
            users.setState("");
               //获取数据
            List<User> list = new ArrayList<User>();
             list.add(users);

               // excel标题
               String[] title = { "学生姓名", "手机号", "身份证号", "地址", "课程名称", "课程付费状态","id"};

               // excel文件名
               String fileName = "代理商"+users.getUsername()+"的招生信息统计表" + System.currentTimeMillis() + ".xls";
               // CellRangeAddress callRangeAddress = new
               // CellRangeAddress(0,0,0,6);//起始行,结束行,起始列,结束列

               // sheet名
               String sheetName = "招生信息统计表22";
               String[][] content = new String[list.size()][title.length];
               String state = "";
               for (int i = 0; i < list.size(); i++) {
                  // content[i] = new String[title.length];
                  User user = list.get(i);
                  if(null != user.getState()){
                     state="已付费";
                  }else {
                     
                     state = "未付费";
                  }
                  /*
                   * Date date = obj.getReportDate(); content[i][0] =
                   * sDateFormat.format(date);
                   */
                  
                  content[i][0] = user.getUsername();
                  content[i][1] = user.getPhone() + "";
                  content[i][2] = user.getCardno() + "";
                  content[i][3] = user.getAddress() + "";
                  content[i][4] = user.getTitel();
                  content[i][5] = state;
                  content[i][6] = user.getId();
               }
               //合并单元格的内容
               String mergeCell = "代理商"+users.getUsername()+"招生总人数:"+list.size()+" 人";
               Integer cellNum = 5;//合并单元格6列
               // 创建HSSFWorkbook
               // HSSFWorkbook wb1 = new HSSFWorkbook();
               HSSFWorkbook wb = ExcelUtil.getHSSFWorkbook(sheetName, title, content, null,mergeCell,cellNum);
               // File errFile = new File(CoinConfig.RESOURCE_BASIC_PATH+"/"
               // +fileName);
               // 响应到客户端
               try {
                  this.setResponseHeader(response, fileName);
                  OutputStream os = response.getOutputStream();
                  // OutputStream os = new FileOutputStream(errFile);
                  wb.write(os);
                  os.flush();
                  os.close();
               } catch (Exception e) {
                  e.printStackTrace();
               }
        
        
        } catch (Exception e) {
            log.error("下载失败", e);
        }
        
    }

工具类的方法

public class ExcelUtil {

   /**
     * 导出Excel
     * @param sheetName sheet名称
     * @param title 标题
     * @param values 内容
     * @param wb HSSFWorkbook对象
     * @return
     */
    public static HSSFWorkbook getHSSFWorkbook(String sheetName,String []title,String [][]values, HSSFWorkbook wb,String mergeCell,Integer cellNum ){

        // 第一步,创建一个HSSFWorkbook,对应一个Excel文件
        if(wb == null){
            wb = new HSSFWorkbook();
        }

        // 第二步,在workbook中添加一个sheet,对应Excel文件中的sheet
        HSSFSheet sheet = wb.createSheet(sheetName);

        // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制
        HSSFRow row = sheet.createRow(0);

        // 第四步,创建单元格,并设置值表头 设置表头居中
        HSSFCellStyle style = wb.createCellStyle();
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式

        //声明列对象
        HSSFCell cell = null;
        
        if (StringUtils.isNotEmpty(mergeCell)) {
           //合并单元格
            CellRangeAddress callRangeAddress = new CellRangeAddress(0,0,0,cellNum);//起始行,结束行,起始列,结束列
            sheet.addMergedRegion(callRangeAddress);
            cell = row.createCell(0);
            cell.setCellValue(mergeCell);
            cell.setCellStyle(style);
            row = sheet.createRow(1);
         // HSSFCell cell = null;
            //创建标题
            for(int i=0;i<title.length;i++){
                cell = row.createCell(i);
                cell.setCellValue(title[i]);
                cell.setCellStyle(style);
            }

            //创建内容
            for(int i=0;i<values.length;i++){
                row = sheet.createRow(i + 2);
                for(int j=0;j<values[i].length;j++){
                    //将内容按顺序赋给对应的列对象
                    row.createCell(j).setCellValue(values[i][j]);
                }
            }
      }else{
         
         // HSSFCell cell = null;
           //创建标题
           for(int i=0;i<title.length;i++){
               cell = row.createCell(i);
               cell.setCellValue(title[i]);
               cell.setCellStyle(style);
           }

           //创建内容
           for(int i=0;i<values.length;i++){
               row = sheet.createRow(i + 1);
               for(int j=0;j<values[i].length;j++){
                   //将内容按顺序赋给对应的列对象
                   row.createCell(j).setCellValue(values[i][j]);
               }
           }
         
      }
        return wb;
    }
}
3丶可以通过配置html模版进行导出

猜你喜欢

转载自blog.csdn.net/qq_39008613/article/details/104994921
今日推荐