100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 数据库数据按指定格式导出到Excel

数据库数据按指定格式导出到Excel

时间:2019-03-24 12:10:32

相关推荐

数据库数据按指定格式导出到Excel

数据库数据按指定格式导出到Excel

一.博客目的:

工作需要做一个关于列表打印的功能,不适用第三方,有图片,又表体,表格上下有额外的信息,表格行数不确定,多的时候可能上万行。第一次通过画jsp使用ie浏览器的window.print进行打印。

这样一次只能打印当前显示的页面,数据量过大,分页会出现断层,然后自己使用js做了一个分页,基本功能已经实现,但是还存在一个问题,如果数据量上万条,分页分了一百多页,一页一页的打印,是不是想想都比较恐怖。

所以经过综合考虑,决定将数据导出到Excel,通过excel进行打印,别说,效果出奇的好,而且不用考虑分页。讲此实现记录下来方便自己回顾。

二.使用技术:

通过poi组件操作Excel。

三.详细的做法:

首先要搭建poi环境,也就是下载jar包,我是在csdn上下别人分享的,poi 3.7 beta2,所以就不附链接了,地球人都能找到。

页面就加了一个按钮,将后台需要的传了过去,师太是使用servlet写的。

倒入的类

下面先列出项目用到的类,下次导的时候分不清可以做参考:

import org.apache.poi.hssf.usermodel.HSSFCell;

import org.apache.poi.hssf.usermodel.HSSFCellStyle;

import org.apache.poi.hssf.usermodel.HSSFClientAnchor;

import org.apache.poi.hssf.usermodel.HSSFFont;

import org.apache.poi.hssf.usermodel.HSSFPatriarch;

import org.apache.poi.hssf.usermodel.HSSFRow;

import org.apache.poi.hssf.usermodel.HSSFSheet;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import org.apache.poi.hssf.util.HSSFColor;

import org.apache.poi.hssf.util.Region;设计思路

思路很简单,短短几句话就能概括:创建sheet页,创建行,创建单元格向单元格set内容,设计样式。

这样问题就很简单了,就那其中的行举例说明:行通过什么创建,方法是什么,创建的行要多高,边框怎么设置。其他的也都这样思考,挨着考虑完,基本写的过程就出来了。、

使用到的方法

创建Excel工作簿对象:createSheet();

设置工作簿名字:setSheetName(int sheetIx, “名字”);

创建行:.createRow(int n),创建第n行;

设置行高:row.setHeightInPoints(int n);

合并单元格:addMergedRegion(new Region(1, (short) 0, 1, (short) cellNum));1,3,参数是行,2,4,参数是列;

加载图片

workbook.addPicture(Byte[] imgBytes, workbook.PICTURE_TYPE_PNG);第一个参数是图片的字节数组,第二个是图片类型;

创建绘制图片区域

HSSFClientAnchor anchoranchor = new HSSFClientAnchor(int x1, int y1, int x2, int y2, (short) col1, row1, (short) col2, row 2)

x1,y1是图片区域左上角的位置,x2,y2是右下角位置,row1和row2是区域上方和下方所在行,col1,col2是取悦左右所在列;

创建用于绘画的对象:createDrawingPatriarch();

将图片画到Excel指定区域:createPicture(anchor, pacIndex);

创建单元格:createCell(int n);n为第几个单元格

给单元格set值:setCellValue();方法里可以传不同的数据类型

设置单元格样式:setCellStyle();

代码实现(为了我以后看起来方便,所以代码全罗列,别人看的时候可以跳着看,代码考下来改一下可以直接使用)

//。。。。。。。查询数据省略。。。。。。private void jxlBuildExcel(Map installMap, String policyNo, String riskCode,HttpServletResponse response) throws IOException {HSSFWorkbook workbook = new HSSFWorkbook();// 使用HSSFWorkbook对象创建Excel工作簿对象HSSFSheet sheet = workbook.createSheet();// 可以设置一个工作表名称,也就是excel打开后下方sheet页的名字workbook.setSheetName(0, policyNo);//因为我要做五个模板,所以我先定义一个变量cellNum 设置列数int cellNum = 16;if ("1113".equals(riskCode)) {cellNum = 16;} else if ("1152".equals(riskCode)) {cellNum = 17;} else if ("1177".equals(riskCode)) {if(maxCount == 0){cellNum = 15;}else{cellNum = 19;}} else if ("1164".equals(riskCode)) {cellNum = 16;} else {if(maxCount == 0){cellNum = 12;}else{cellNum = 17;}}// 在工作表里创建对象,第一行放图片,位置中心,每个模板列不同,每个列的宽度不一样,所以画图区域的自己慢慢调。HSSFRow row1 = sheet.createRow(0);row1.setHeightInPoints(60);//设置一下第一列的高度,因为要加载图片,所以高度设置的大了写。// 将图片传入ExcleString path = this.getServletContext().getRealPath("/");FileInputStream fis = new FileInputStream(path + "common/images/pm_logo.png");byte[] imgBytes = new byte[fis.available()];// 添加图片字节数据到工作簿对象中,addPicture方法第一个参数是图片字节数组,第二个是图片类型,我的图片是.pngint pacIndex = workbook.addPicture(imgBytes, workbook.PICTURE_TYPE_PNG);//此处创建画图区域HSSFClientAnchor anchor;//图片的区域根据实际列数来确定大小if ("1113".equals(riskCode)) {anchor = new HSSFClientAnchor(100, 30, 900, 200, (short) 7, 0, (short) 11, 0);} else if ("1152".equals(riskCode)) {anchor =

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。