您的位置:首页 > 编程语言 > Java开发

java通过poi导出excel和pdf

2017-04-13 19:11 796 查看

【背景】

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

    通过自己实现小例子梳理其中的关系,最终融入相关业务逻辑加以践行,这样的一个梳理过程还是很给力的,同时也给小编带来如沐春风的感觉,不知读者您呢?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  pdf excel poi