java通过poi导出excel和pdf
【背景】
由于各户的需求,所以需要增加导出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"));// 第七步,关闭documentdocument.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~
通过自己实现小例子梳理其中的关系,最终融入相关业务逻辑加以践行,这样的一个梳理过程还是很给力的,同时也给小编带来如沐春风的感觉,不知读者您呢?
java通过poi导出excel和pdf相关推荐
- java利用poi导出excel功能-附带图片导出
java利用poi导出excel功能-附带图片导出 写在前面 最近刚离职,闲来无事,于是把上两家公司都有碰到过的需求但都没有去研究实现:即导出带图片的excel报表.于是就折腾了一下这个功能,研究出来 ...
- java中poi导出Excel表格(前台流文件接收)
java中poi导出Excel表格,前端以流的方式接收,而非直接生成文件再下载,解决多台服务器部署后,路径地址不统一导致的下载问题. 生成Excel示例图: 2.代码说明 ① 在上次的基础上增加了底部 ...
- Java操作poi导出Excel自定义字体颜色
Java操作poi导出Excel自定义字体颜色 功能介绍 POI操作Excel 第一步创建一个导出的工具类 整体定义表格字体样式 自定义表格字体样式 总结 功能介绍 Apache POI 是用Java ...
- Java和poi导出excel报表
一:poi jar下载地址:点击打开链接: 二:工程截图: 三:运行效果截图: 四:源代码: Student.java: package com.poi.bean;import java.util.D ...
- Java使用POi导出Excel(包含图片)
Java使用poi组件导出excel报表,能导出excel报表的还可以使用jxl组件,但jxl想对于poi功能有限,jxl应该不能载excel插入浮动层图片,poi能很好的实现输出excel各种功能, ...
- java 使用poi导出excel,可控制固定前2列固定标头排版,带统计数据格式的
使用poi导出排版漂亮的excel文件 html代码: <button class="btn btn-link" ng-model="exportExcel&quo ...
- poi导出excel 损坏_急!!!java用poi导出excel文件,打开导出的文件时报错“文件错误,数据可能丢失”...
展开全部 两个原因: 1.你的excel模版本身有问题,可以尝试新建一个模版. 2.你的excel使用了一e68a8462616964757a686964616f31333365643662些POI不 ...
- java使用poi导出Excel表发回浏览器或是保存到本地
在实际工作中不可避免的会遇上统计.导出报表的工作,我自己整理了一份导出Excel代码放到这里,即为了分享知识,也是对自己的总结 首先导入依赖 <dependency><groupId ...
- java使用poi导出excel太慢
场景是查询数据然后导出excel,接口响应太慢. 处理接口慢,首先要找出哪个环节慢. 打日志看各环节花费时间,10W条数据 关联查询sql花费 3s,导出excel花费5S,响应传输时间很快不是关键问 ...
最新文章
- Keil uVision5 下载程序 add flash programming algorithm选项缺少需要的下载算法的解决办法
- apache http server指的是什么
- XHProf报告字段含义
- linux下利用C或C++语言调用需要root权限的函数
- Redis java客户端操作
- Windows手动更新补丁
- 英寸、 Picas、 点、 跨度和 Twips 之间的关系
- 【Clickhosue】MySQL 没有主键导致CK不可用 The db.scene cannot be materialized, because there is no primary keys
- 【Clickhouse】CLICKHOUSE SQL文件等常用语句
- 计算机组成原理课后习题答案(第五版白中英)
- mysql安装包5.7.17.0_mysql-5.7.17-winx64压缩版的安装包下载和安装配置
- 余额宝收益用计算机该怎么算,余额宝收益计算器怎么用
- 用树莓派制作智能小车
- 推荐几个资源搜索网站
- 小明左右手分别拿了两张牌,黑桃十和红心八,现在交换手中的牌。编写一个程序模拟这一过程:两个整数分别保存两个变量,将这两个变量的值互换,并输出互换后的结果
- [渝粤教育] 中国地质大学 大学语文 复习题 (2)
- 波士顿房价预测python决策树_机器学习第二练---波士顿房价预测
- Staring into the Abyss: An Evaluation of Concurrency Control with One Thousand Cores 论文阅读
- IPad amp; iPhone storage - delete my iPad manuscript data
- 蓝牙配对-扫描-连接-状态查询