首页 > 编程语言 >java通过poi导出excel和pdf

java通过poi导出excel和pdf

时间:2022-12-05 16:38:41浏览次数:53  
标签:java excel HSSFCell testRangePDFVO createCell poi new setCellValue row

【背景】

    由于各户的需求,所以需要增加导出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成功~");
-

    实现效果如下图:
java通过poi导出excel和pdf_pdf

    

    导出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成功~");
-

    实现效果如下图:
java通过poi导出excel和pdf_poi_02 【运用】     当然有了自己写的小例子,通过对业务逻辑的梳理,按照相应要求,和业务逻辑结合,最终实现想要的效果就可以了。
    下面为我定制化编写的一个导出的方法中的代码,其中传入的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();
		}
-

    实现效果如下图:
java通过poi导出excel和pdf_数据_03     这里就列举了一个导出excel的运用,导出pdf是一样的效果,无非就是将对应的业务逻辑再融入到上面实例中的导出pdf小例子代码中~
【总结】     前行的路上总是会遇到各种各样的风景,要做的是敬请享受的同时切不可过度留恋,否则将会错过未来更好的风景O(∩_∩)O~
    通过自己实现小例子梳理其中的关系,最终融入相关业务逻辑加以践行,这样的一个梳理过程还是很给力的,同时也给小编带来如沐春风的感觉,不知读者您呢?

标签:java,excel,HSSFCell,testRangePDFVO,createCell,poi,new,setCellValue,row
From: https://blog.51cto.com/u_14471711/5913015

相关文章

  • poi解析word和excel文档
    -packagecom.gxt.testcase.service.impl;importcom.jj.system.pojo.web.SmUploadfile;importcom.jj.system.service.web.SmUploadfileService;importjava.io.Inp......
  • java并发数据结构之CopyOnWriteArrayList
    CopyOnWriteArrayList是一个线程安全的List实现,其在对对象进行读操作时,由于对象没有发生改变,因此不需要加锁,反之在对象进行增删等修改操作时,它会先复制一个对象副本,然后对......
  • jdk自带的javaVisualVM检测tomcat
    背景:在项目运行的过程中想了解一下tomcat的执行性能情况,下面以jdk自带的javaVisualVm为例进行配置检测1.在我本地(windows系统)找到jdk中的bin目录,找到jvisualvm.exe双击......
  • javaScript概述
    目录JS简介JS基础变量与常量基本数据类型运算符流程控制函数内置对象JS简介全称JavaScript但是与Java一毛钱关系都没有之所以这么叫是为了蹭Java的热度它是一门前端工......
  • Java 编程入门第一课:HelloWorld
    在之前的文章中,壹哥带大家搭建出了Java的开发环境,配置了JDK环境变量,并且我们也熟悉了dos命令行的操作。那么从这篇文章开始,壹哥就开始带各位真正地学习Java代码该......
  • 力扣1337(java&python)-矩阵中战斗力最弱的 K 行(简单)
    题目:给你一个大小为 m *n 的矩阵 mat,矩阵由若干军人和平民组成,分别用1和0表示。请你返回矩阵中战斗力最弱的 k 行的索引,按从最弱到最强排序。如果第 i 行......
  • 4、excel快速排序从1开始
    在分世界杯的文件时,要求把每一行从1开始排列,自己的做法就是先输入1和2,然后拖黑1和2,接着鼠标一直往下拖,这样就了。公式的方法:输入公式=Row()-1,如何在这个单元格的右下角双......
  • JavaDoc生成文档
    JavaDoc生成文档一.通过命令行生成JavaDoc文档1.打开指定的文件目录选中指定文件(类或者包)--->右键选中openin---->explorer2.打开指定文件的cmd再1中打开的文......
  • JavaScript深浅拷贝
    基本类型&引用类型ECMAScript中的数据类型可分为两种:基本类型:undefined,null,Boolean,String,Number,Symbol引用类型:Object,Array,Date,Function,RegExp等不同类......
  • java面试
    目录枚举泛型用反射动态给对象的某个属性赋值导包带*有什么影响idea如何取消自动导包为*BIO和NIO和AIO枚举点击查看代码packagecom.cdjdgm.pdms.enums;/***供电......