java通过poi导出excel和pdf

简介: 由于各户的需求,所以需要增加导出excel这个功能,其实大部分系统都需要这个导出功能的,所以这里也就不详细说明具体导出的背景了O(∩_∩)O~

【背景】


   由于各户的需求,所以需要增加导出excel这个功能,其实大部分系统都需要这个导出功能的,所以这里也就不详细说明具体导出的背景了O(∩_∩)O~


   干完导出excel将现有的导出pdf也进行了独立研究与结构实现O(∩_∩)O~


【说明】


   这里我是通过poi进行的导出excel的实现,在项目中引入poi-3.7.jar,然后进行编码就可以了~

   要是导出pdf的话,需要引入itextpdf-5.2.1.jar


【实例】


   下面是我自己通过main方法实现的小例子,由于没有浏览器的输出,所以我采取的是通过输出到对应的磁盘路径下来实现的。

   导出excel代码如下:


-
// 第一步,创建一个webbook,对应一个Excel文件  
      HSSFWorkbook workbook = new HSSFWorkbook();  
      // 第二步,在webbook中添加一个sheet,对应Excel文件中的工作簿,并设置工作簿名称 
      HSSFSheet sheet = workbook.createSheet("新建表111");  
      // 第三步,在建立的工作簿中创建一行 
      HSSFRow row = sheet.createRow(0);  
      // 第四步,创建该行中的对应列
      HSSFCell cell = row.createCell(0);
      // 第五步,向该行该列中设置内容
      cell.setCellValue("我是设置的内容信息~");
      // 第六步,定义输出的位置
      FileOutputStream out = new  FileOutputStream("H:/workbook.xls");
      //如果是浏览器通过request请求需要在浏览器中输出则使用下面方式
      //OutputStream out = response.getOutputStream();
      workbook.write(out);
      out.close();
      System.out.println("导出excel成功~");
-


   实现效果如下图:

  20170413190316044.jpg


   导出pdf代码如下:


-
 // 第一步,实例化一个document对象
    Document document = new Document();
    // 第二步,设置要到出的路径
    FileOutputStream out = new  FileOutputStream("H:/workbook111.pdf");
      //如果是浏览器通过request请求需要在浏览器中输出则使用下面方式
      //OutputStream out = response.getOutputStream();
    // 第三步,设置字符
    BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", false);
    Font fontZH = new Font(bfChinese, 12.0F, 0);
    // 第四步,将pdf文件输出到磁盘
      PdfWriter writer = PdfWriter.getInstance(document, out);
      // 第五步,打开生成的pdf文件
      document.open();
      // 第六步,设置内容
      String title = "标题";
      document.add(new Paragraph(new Chunk(title, fontZH).setLocalDestination(title)));
      document.add(new Paragraph("\n"));
      // 创建table,注意这里的2是两列的意思,下面通过table.addCell添加的时候必须添加整行内容的所有列
      PdfPTable table = new PdfPTable(2);
      table.setWidthPercentage(100.0F);
      table.setHeaderRows(1);
      table.getDefaultCell().setHorizontalAlignment(1);
      table.addCell(new Paragraph("序号", fontZH));
      table.addCell(new Paragraph("结果", fontZH));
      table.addCell(new Paragraph("1", fontZH));
      table.addCell(new Paragraph("出来了", fontZH));
      document.add(table);
      document.add(new Paragraph("\n"));
      // 第七步,关闭document
      document.close();
      System.out.println("导出pdf成功~");
-


   实现效果如下图:


20170413190613408.jpg


【运用】


   当然有了自己写的小例子,通过对业务逻辑的梳理,按照相应要求,和业务逻辑结合,最终实现想要的效果就可以了。

   下面为我定制化编写的一个导出的方法中的代码,其中传入的out为实例中注释掉的第二种方式,在浏览器中输出的方式。

   代码如下:


-
// 第一步,创建一个webbook,对应一个Excel文件 
      HSSFWorkbook workbook = new HSSFWorkbook();
      for (TestRangePDFVO testRangePDFVO : list) {
         //第二步,在webbook中添加一个sheet,对应Excel文件中的工作簿 
        HSSFSheet sheet = workbook.createSheet(testRangePDFVO.getCaseTitle());
            //设置sheet中的默认列宽
        sheet.setDefaultColumnWidth(20);
        //设置工作簿中的测试用例标题
        HSSFRow row0 = sheet.createRow(0);
        HSSFCell cell00 = row0.createCell(0);
        cell00.setCellValue("测试用例标题");
        HSSFCell cell01 = row0.createCell(1);
        cell01.setCellValue(testRangePDFVO.getCaseTitle());
      //设置工作簿中的测试用例编号
        HSSFRow row1 = sheet.createRow(1);
        HSSFCell cell10 = row1.createCell(0);
        cell10.setCellValue("测试用例编号");
        HSSFCell cell11 = row1.createCell(1);
        cell11.setCellValue(testRangePDFVO.getCaseCode());
        if (testRangePDFVO.getTestRangeStepPDFVOs().size() > 0) {
          //步骤内容的标头
          HSSFRow row2 = sheet.createRow(2);
          HSSFCell cell20 = row2.createCell(0);
          cell20.setCellValue("序号");
          HSSFCell cell21 = row2.createCell(1);
          cell21.setCellValue("步骤");
          HSSFCell cell22 = row2.createCell(2);
          cell22.setCellValue("预期结果");
          HSSFCell cell23 = row2.createCell(3);
          cell23.setCellValue("操作结果");
          HSSFCell cell24 = row2.createCell(4);
          cell24.setCellValue("操作备注");
          HSSFCell cell25 = row2.createCell(5);
          cell25.setCellValue("测试人");
          //将步骤中的数据放入工作簿中
          for (int i = 0; i < testRangePDFVO.getTestRangeStepPDFVOs().size(); i++) {
            TestRangeStepPDFVO stepvo =testRangePDFVO.getTestRangeStepPDFVOs().get(i);
            //步骤内容的标头
            HSSFRow row = sheet.createRow(i+3);
            HSSFCell cell0 = row.createCell(0);
            cell0.setCellValue(i+1);
            HSSFCell cell1 = row.createCell(1);
            cell1.setCellValue(stepvo.getContent());
            HSSFCell cell2 = row.createCell(2);
            cell2.setCellValue(stepvo.getExpectResult());
            HSSFCell cell3 = row.createCell(3);
            String resultType = "△";
                  if (stepvo.getResulttype().equals("0"))
                    resultType = "√";
                  else if (stepvo.getResulttype().equals("1")) {
                    resultType = "╳";
                  }
            cell3.setCellValue(resultType);
            HSSFCell cell4 = row.createCell(4);
            cell4.setCellValue(stepvo.getExecutememo());
            HSSFCell cell5 = row.createCell(5);
            cell5.setCellValue(stepvo.getCreatename());
        }
        }
        if (testRangePDFVO.getRangeType() == 1) {
          //设置数据内容标头
          HSSFRow row3 = sheet.createRow(4+testRangePDFVO.getTestRangeStepPDFVOs().size());
          HSSFCell cell30 = row3.createCell(0);
          cell30.setCellValue("序号");
          HSSFCell cell31 = row3.createCell(1);
          cell31.setCellValue("作业面");
        //标头动态参考列
          String[] cols = testRangePDFVO.getColumncontent().split("◆");
          int colsnum = cols.length;
          for (int i = 0; i < cols.length; i++) {
             HSSFCell cell32 = row3.createCell(2+i);
           cell32.setCellValue(cols[i]);
        }
          HSSFCell cell33 = row3.createCell(2+colsnum);
          cell33.setCellValue("操作结果");
          HSSFCell cell34 = row3.createCell(3+colsnum);
          cell34.setCellValue("操作备注");
          HSSFCell cell35 = row3.createCell(4+colsnum);
          cell35.setCellValue("测试人");
          //向工作簿中导入数据内容
          for (int i = 0; i < testRangePDFVO.getTestRangeDataPDFVOs().size(); i++) {
            TestRangeDataPDFVO datavo = testRangePDFVO.getTestRangeDataPDFVOs().get(i);
             HSSFRow row = sheet.createRow(5+testRangePDFVO.getTestRangeStepPDFVOs().size()+i);
           HSSFCell cell0 = row.createCell(0);
             cell0.setCellValue(i+1);
             HSSFCell cell1 = row.createCell(1);
             cell1.setCellValue(datavo.getWorkplanename());
             //动态列对应的数据
             String str = datavo.getDatacontents().substring(0, datavo.getDatacontents().length() - 1);
                 String[] datacontents = str.split("◆", -1);
                 int colsnum1 = datacontents.length;
                 for (int j = 0; j < datacontents.length; j++) {
               HSSFCell cell2 = row.createCell(2+j);
             cell2.setCellValue(datacontents[j]);
           }
                 HSSFCell cell3 = row.createCell(2+colsnum1);
                 String resultType = "△";
                 if (datavo.getResulttype().equals("0"))
                     resultType = "√";
                 else if (datavo.getResulttype().equals("1")) {
                     resultType = "╳";
                 }
               cell3.setCellValue(resultType);
               HSSFCell cell4 = row.createCell(3+colsnum1);
               cell4.setCellValue(datavo.getExecutememo());
               HSSFCell cell5 = row.createCell(4+colsnum1);
               cell5.setCellValue(datavo.getCreatename());
        }
        }
    }
      //将excel设置好的数据输出
      try {
        workbook.write(out);
    } catch (IOException e) {
      e.printStackTrace();
    }
-


   实现效果如下图:


20170413191033444.jpg


   这里就列举了一个导出excel的运用,导出pdf是一样的效果,无非就是将对应的业务逻辑再融入到上面实例中的导出pdf小例子代码中~


【总结】


   前行的路上总是会遇到各种各样的风景,要做的是敬请享受的同时切不可过度留恋,否则将会错过未来更好的风景O(∩_∩)O~

   通过自己实现小例子梳理其中的关系,最终融入相关业务逻辑加以践行,这样的一个梳理过程还是很给力的,同时也给小编带来如沐春风的感觉,不知读者您呢?

相关实践学习
基于Hologres轻量实时的高性能OLAP分析
本教程基于GitHub Archive公开数据集,通过DataWorks将GitHub中的项⽬、行为等20多种事件类型数据实时采集至Hologres进行分析,同时使用DataV内置模板,快速搭建实时可视化数据大屏,从开发者、项⽬、编程语⾔等多个维度了解GitHub实时数据变化情况。
阿里云实时数仓实战 - 用户行为数仓搭建
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3&nbsp;)前置知识要求:熟练掌握 SQL 语法熟悉 Linux 命令,对 Hadoop 大数据体系有一定的了解 &nbsp; 课程大纲 第一章&nbsp;了解数据仓库概念 初步了解数据仓库是干什么的 第二章&nbsp;按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章&nbsp;数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章&nbsp;采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章&nbsp;用户行为数据仓库 严格按照企业的标准开发 第六章&nbsp;搭建业务数仓理论基础和对表的分类同步 第七章&nbsp;业务数仓的搭建&nbsp; 业务行为数仓效果图&nbsp;&nbsp;
相关文章
|
8月前
|
小程序
公众号如何添加附传Word、Excel、Pdf、PPT文档
公众号里添加一些文档给公众号粉丝下载,比如课件PPT、申请表Word文档、岗位需求Excel表、大赛入围/获奖名单等。公众号本身是不支持直接上传文件的,但我们可以通过附件小程序“间接”上传文件。
1337 0
|
10月前
|
Python
Excel中如何批量重命名工作表与将每个工作表导出到单独Excel文件
本文介绍了如何在Excel中使用VBA批量重命名工作表、根据单元格内容修改颜色,以及将工作表导出为独立文件的方法。同时提供了Python实现导出工作表的代码示例,适用于自动化处理Excel文档。
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
3791 65
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
人工智能 算法 安全
使用CodeBuddy实现批量转换PPT、Excel、Word为PDF文件工具
通过 CodeBuddy 实现本地批量转换工具,让复杂的文档处理需求转化为 “需求描述→代码生成→一键运行” 的极简流程,真正实现 “技术为效率服务” 的目标。感兴趣的快来体验下把
826 10
|
文字识别 Serverless 开发工具
【全自动改PDF名】批量OCR识别提取PDF自定义指定区域内容保存到 Excel 以及根据PDF文件内容的标题来批量重命名
学校和教育机构常需处理成绩单、报名表等PDF文件。通过OCR技术,可自动提取学生信息并录入Excel,便于统计分析和存档管理。本文介绍使用阿里云服务实现批量OCR识别、内容提取、重命名及导出表格的完整步骤,包括开通相关服务、编写代码、部署函数计算和设置自动化触发器等。提供Python示例代码和详细操作指南,帮助用户高效处理PDF文件。 链接: - 百度网盘:[链接](https://pan.baidu.com/s/1mWsg7mDZq2pZ8xdKzdn5Hg?pwd=8866) - 腾讯网盘:[链接](https://share.weiyun.com/a77jklXK)
2415 5
|
Java BI API
Java Excel报表生成:JXLS库的高效应用
在Java应用开发中,经常需要将数据导出到Excel文件中,以便于数据的分析和共享。JXLS库是一个强大的工具,它基于Apache POI,提供了一种简单而高效的方式来生成Excel报表。本文将详细介绍JXLS库的使用方法和技巧,帮助你快速掌握Java中的Excel导出功能。
718 6
|
数据格式 UED
记录一次NPOI库导出Excel遇到的小问题解决方案
【11月更文挑战第16天】本文记录了使用 NPOI 库导出 Excel 过程中遇到的三个主要问题及其解决方案:单元格数据格式错误、日期格式不正确以及合并单元格边框缺失。通过自定义单元格样式、设置数据格式和手动添加边框,有效解决了这些问题,提升了导出文件的质量和用户体验。
1156 3
|
前端开发
实现Excel文件和其他文件导出为压缩包,并导入
实现Excel文件和其他文件导出为压缩包,并导入
380 1
|
Java API Apache
|
10月前
|
Python
如何根据Excel某列数据为依据分成一个新的工作表
在处理Excel数据时,我们常需要根据列值将数据分到不同的工作表或文件中。本文通过Python和VBA两种方法实现该操作:使用Python的`pandas`库按年级拆分为多个文件,再通过VBA宏按班级生成新的工作表,帮助高效整理复杂数据。