java通过poi导出excel和pdf

★知识点研究 专栏收录该内容
31 篇文章 1 订阅

【背景】

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

    实现效果如下图:

    

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

    实现效果如下图:

【运用】

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

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

【总结】

    前行的路上总是会遇到各种各样的风景,要做的是敬请享受的同时切不可过度留恋,否则将会错过未来更好的风景O(∩_∩)O~
    通过自己实现小例子梳理其中的关系,最终融入相关业务逻辑加以践行,这样的一个梳理过程还是很给力的,同时也给小编带来如沐春风的感觉,不知读者您呢?
相关推荐
©️2020 CSDN 皮肤主题: 鲸 设计师:meimeiellie 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值