zoukankan      html  css  js  c++  java
  • java通过模板导出excel的一个实例

    写之前,大家请先下好poi的相关jar包,网上遍地都是,不多说

    <input type="button" id="exportBtn" class="CommonBtn" value="导出Excel" />  这个是按钮

    这个是相关事件

    // 导出按钮
    $('#exportBtn').click(function(){
    txtBeginDate = $('#txtBeginDate').datebox('getValue');
    txtEndDate = $('#txtEndDate').datebox('getValue');
    window.location.href='${CTX_ROOT}/TBoilerrunlogController?method=getExcelByBoiler&begin='+txtBeginDate+'&end='+txtEndDate+'';
    });  //我是转向spring mvc的controllor里面了,我这里还给传了俩个值,一个是开始时间,一个是结束时间
    


    controllor代码如下:

    @RequestMapping(params = "method=getExcelByBoiler")
    @ResponseBody
    public String getExcelByBoiler(HttpServletRequest request,
    HttpServletResponse response) {
    String begin="";
    String end="";
    if(request.getParameter("begin")!=null && request.getParameter("end") !=null){
    begin=request.getParameter("begin");
    end = request.getParameter("end");
    }
    
    try {
    String path =request.getServletContext().getRealPath("")
    + "/excelTemplate/统计.xls";   //这个是我的excel模板
    InputStream in = new FileInputStream(new File(path));
    SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //为了转时间
    HSSFWorkbook work = new HSSFWorkbook(in);
    // 得到excel的第0张表
    HSSFSheet sheet = work.getSheetAt(0);
    // 得到第1行的第一个单元格的样式
    HSSFRow rowCellStyle = sheet.getRow(2);
    HSSFCellStyle columnOne = rowCellStyle.getCell(0).getCellStyle();
    HSSFCellStyle columnOne1 = rowCellStyle.getCell(1).getCellStyle();
    HSSFCellStyle columnOne2 = rowCellStyle.getCell(4).getCellStyle();
    // 这里面的行和列的数法与计算机里的一样,从0开始是第一
    // 填充title数据
    
    HSSFRow row = sheet.getRow(0);
    HSSFCell cell = row.getCell(2);
    cell.setCellValue("一号机组启停统计(" + begin + "~" + end + ")");
    int i = 2;// 计数器
    List<Map<String, Object>> list = this.getBoilerRunlog("GL1",begin,end);
    // 创建每个单元格,添加样式,最后合并
    work.getSheetAt(0).shiftRows(3, 3, list.size() - 1); // 把第三行移动到列表的长度-1的地方  这个地方我是要把模板的第四行放到最后一行
    int numberbegin = 0;// 统计
    int numberend = 0;// 统计
    for (Map map : list) {
    row = sheet.createRow(i);// 得到行
    cell = row.createCell(0);// 得到第0个单元格
    if (!(map.get("actiondatetime") == null)) {
    cell.setCellValue(simpleFormat.format(map.get("actiondatetime")));
    } else {
    cell.setCellValue("");
    }
    cell.setCellStyle(columnOne);// 填充样式
    
    
    cell = row.createCell(1);
    if (!(map.get("actionstatus") == null)) {
    cell.setCellValue(map.get("actionstatus").toString());
    } else {
    cell.setCellValue("");
    }
    cell.setCellStyle(columnOne1);// 填充样式
    cell = row.createCell(2);
    if (!(map.get("logmemo") == null)) {
    cell.setCellValue(map.get("logmemo").toString());
    } else {
    cell.setCellValue("");
    }
    cell.setCellStyle(columnOne1);// 填充样式
    cell = row.createCell(3);
    if (!(map.get("rundays") == null)) {
    cell.setCellValue(map.get("rundays").toString());
    numberbegin++;
    } else {
    cell.setCellValue("");
    }
    cell.setCellStyle(columnOne1);// 填充样式
    cell = row.createCell(4);
    if (!(map.get("stophours") == null)) {
    cell.setCellValue(map.get("stophours").toString());
    numberend++;
    } else {
    cell.setCellValue("");
    }
    cell.setCellStyle(columnOne2);// 填充样式
    // .....给每个单元格填充数据和样式
    i++;
    }
    HSSFRow row1 = sheet.getRow(list.size() + 2);
    HSSFCell cell1 = row1.getCell(0);
    cell1.setCellValue("启停共" + (numberbegin+numberend) + "次," +  "其中启" + numberbegin
    + "次,停" + numberend + "次");//
    /*******************************sheet二*******************************************/
    HSSFSheet sheet1 = work.getSheetAt(1);
    // 得到第1行的第一个单元格的样式
    HSSFRow rowCellStyle1 = sheet1.getRow(2);
    HSSFCellStyle columnOne01 = rowCellStyle1.getCell(0).getCellStyle();
    HSSFCellStyle columnOne02 = rowCellStyle1.getCell(1).getCellStyle();
    HSSFCellStyle columnOne03 = rowCellStyle1.getCell(4).getCellStyle();
    HSSFRow row2 = sheet1.getRow(0);
    HSSFCell cell2 = row2.getCell(2);
    cell2.setCellValue("二号机组启停统计(" + begin + "~" + end + ")");
    int j = 2;// 计数器
    List<Map<String, Object>> list2 = this.getBoilerRunlog("GL2",begin,end);
    // 创建每个单元格,添加样式,最后合并
    work.getSheetAt(1).shiftRows(3, 3, list2.size() - 1); // 把第三行移动到列表的长度-1的地方
    int numberbegin1 = 0;// 统计
    int numberend1 = 0;// 统计
    for (Map map : list2) {
    row2 = sheet1.createRow(j);// 得到行
    cell2 = row2.createCell(0);// 得到第0个单元格
    if (!(map.get("actiondatetime") == null)) {
    cell2.setCellValue(simpleFormat.format(map.get("actiondatetime")));
    } else {
    cell2.setCellValue("");
    }
    cell2.setCellStyle(columnOne01);// 填充样式
    cell2 = row2.createCell(1);
    if (!(map.get("actionstatus") == null)) {
    cell2.setCellValue(map.get("actionstatus").toString());
    } else {
    cell2.setCellValue("");
    }
    cell2.setCellStyle(columnOne02);// 填充样式
    cell2 = row2.createCell(2);
    if (!(map.get("logmemo") == null)) {
    cell2.setCellValue(map.get("logmemo").toString());
    } else {
    cell2.setCellValue("");
    }
    cell2.setCellStyle(columnOne02);// 填充样式
    cell2 = row2.createCell(3);
    if (!(map.get("rundays") == null)) {
    cell2.setCellValue(map.get("rundays").toString());
    numberbegin1++;
    } else {
    cell2.setCellValue("");
    }
    cell2.setCellStyle(columnOne02);// 填充样式
    cell2 = row2.createCell(4);
    if (!(map.get("stophours") == null)) {
    cell2.setCellValue(map.get("stophours").toString());
    numberend1++;
    } else {
    cell2.setCellValue("");
    }
    cell2.setCellStyle(columnOne03);// 填充样式
    // .....给每个单元格填充数据和样式
    i++;
    }
    HSSFRow row3 = sheet1.getRow(list2.size() + 2);
    HSSFCell cell3 = row3.getCell(0);
    cell3.setCellValue("启停共" + (numberbegin1+numberend1) + "次," +  "其中启" + numberbegin1
    + "次,停" + numberend1 + "次");//
    
    
    /****************************输出流*****************************************/
    String address = simpleFormat.format(new Date());
    OutputStream os = response.getOutputStream();// 取得输出流
    response.setContentType("application/vnd.ms-excel");
    response.setHeader("Content-disposition",
    "attachment;filename=jzqttj_"+address+".xls");
    work.write(os);
    os.close();
    } catch (FileNotFoundException e) {
    System.out.println("文件路径错误");
    e.printStackTrace();
    } catch (IOException e) {
    System.out.println("文件输入流错误");
    e.printStackTrace();
    }
    return null;
    }


    这个大概思路就是,我把提前写好的excel模板的要遍历的那一行每个cell(单元格)的样式复制出来,然后在接下来的每行每个cell都给赋予相关的样式

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    【转】BFT类共识协议概览与分析实测
    谈谈架构设计的八条原则
    Python爬虫入门教程 61-100 写个爬虫碰到反爬了,动手破坏它!
    Python如何实现单步调试
    Python如何实现单步调试
    Flash调用Alchemy编译的代码时出现Error #1506的解决
    Flash调用Alchemy编译的代码时出现Error #1506的解决
    Flash调用Alchemy编译的代码时出现Error #1506的解决
    Flash调用Alchemy编译的代码时出现Error #1506的解决
    showModalDialog使用讲解
  • 原文地址:https://www.cnblogs.com/shipeng22022/p/4614026.html
Copyright © 2011-2022 走看看