【背景】
由于各户的需求,所以需要增加导出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~
通过自己实现小例子梳理其中的关系,最终融入相关业务逻辑加以践行,这样的一个梳理过程还是很给力的,同时也给小编带来如沐春风的感觉,不知读者您呢?