java通过poi导出excel和pdf

本文涉及的产品
可视分析地图(DataV-Atlas),3 个项目,100M 存储空间
数据可视化DataV,5个大屏 1个月
简介: 由于各户的需求,所以需要增加导出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~

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

相关实践学习
DataV Board用户界面概览
本实验带领用户熟悉DataV Board这款可视化产品的用户界面
阿里云实时数仓实战 - 项目介绍及架构设计
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3&nbsp;)前置知识要求 &nbsp; 课程大纲 第一章&nbsp;了解数据仓库概念 初步了解数据仓库是干什么的 第二章&nbsp;按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章&nbsp;数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章&nbsp;采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章&nbsp;用户行为数据仓库 严格按照企业的标准开发 第六章&nbsp;搭建业务数仓理论基础和对表的分类同步 第七章&nbsp;业务数仓的搭建&nbsp; 业务行为数仓效果图&nbsp;&nbsp;
相关文章
|
16天前
|
Java API Apache
Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
【10月更文挑战第29天】Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
71 5
|
26天前
|
缓存 easyexcel Java
Java EasyExcel 导出报内存溢出如何解决
大家好,我是V哥。使用EasyExcel进行大数据量导出时容易导致内存溢出,特别是在导出百万级别的数据时。以下是V哥整理的解决该问题的一些常见方法,包括分批写入、设置合适的JVM内存、减少数据对象的复杂性、关闭自动列宽设置、使用Stream导出以及选择合适的数据导出工具。此外,还介绍了使用Apache POI的SXSSFWorkbook实现百万级别数据量的导出案例,帮助大家更好地应对大数据导出的挑战。欢迎一起讨论!
141 1
|
16天前
|
Java API Apache
|
19天前
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
25 4
|
23天前
|
JavaScript 前端开发 数据处理
Vue导出el-table表格为Excel文件的两种方式
Vue导出el-table表格为Excel文件的两种方式
|
1月前
|
easyexcel Java UED
SpringBoot中大量数据导出方案:使用EasyExcel并行导出多个excel文件并压缩zip后下载
在SpringBoot环境中,为了优化大量数据的Excel导出体验,可采用异步方式处理。具体做法是将数据拆分后利用`CompletableFuture`与`ThreadPoolTaskExecutor`并行导出,并使用EasyExcel生成多个Excel文件,最终将其压缩成ZIP文件供下载。此方案提升了导出效率,改善了用户体验。代码示例展示了如何实现这一过程,包括多线程处理、模板导出及资源清理等关键步骤。
|
1月前
|
前端开发 JavaScript
💥【exceljs】纯前端如何实现Excel导出下载和上传解析?
本文介绍了用于处理Excel文件的库——ExcelJS,相较于SheetJS,ExcelJS支持更高级的样式自定义且易于使用。表格对比显示,ExcelJS在样式设置、内存效率及流式操作方面更具优势。主要适用于Node.js环境,也支持浏览器端使用。文中详细展示了如何利用ExcelJS实现前端的Excel导出下载和上传解析功能,并提供了示例代码。此外,还提供了在线调试的仓库链接和运行命令,方便读者实践。
297 5
|
1月前
|
前端开发 JavaScript Java
导出excel的两个方式:前端vue+XLSX 导出excel,vue+后端POI 导出excel,并进行分析、比较
这篇文章介绍了使用前端Vue框架结合XLSX库和后端结合Apache POI库导出Excel文件的两种方法,并对比分析了它们的优缺点。
235 0
|
1月前
|
Java Apache Maven
将word文档转换成pdf文件方法
在Java中,将Word文档转换为PDF文件可采用多种方法:1) 使用Apache POI和iText库,适合处理基本转换需求;2) Aspose.Words for Java,提供更高级的功能和性能;3) 利用LibreOffice命令行工具,适用于需要开源解决方案的场景。每种方法都有其适用范围,可根据具体需求选择。
|
1月前
|
Java Apache Maven
Java将word文档转换成pdf文件的方法?
【10月更文挑战第13天】Java将word文档转换成pdf文件的方法?
138 1