首页 > 代码库 > 利用poi3.9做的excel导出工具
利用poi3.9做的excel导出工具
一、先看看所生成的文件效果图
二、准备
本文需要六个jar包:
dom4j-1.6.1.jar
ojdbc14.jar
poi-3.9-20121203.jar
poi-ooxml-3.9-20121203.jar
poi-ooxml-schemas-3.9-20121203.jar
xmlbeans-2.3.0.jar
除了ojdbc14.jar是用来访问数据库的,其它的都是导出excel所需要的poi相关jar包。
注:本文是以poi3.9版本写的,利用了SXSSFWorkbook这个Workbook,这个可以分批写入,防止内存溢出。这个类只有在3.8及3.8以上版本才有。
三、写个连接数据库的工具
写得很简单,用的是oracle数据库
代码如下:
package com.utils; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DBUtil { private static String driver="oracle.jdbc.driver.OracleDriver"; private static String url="jdbc:oracle:thin:@127.0.0.1:1521:xe"; private static String user="test"; private static String password="test"; public static Connection getConnection(){ Connection conn = null; try { Class.forName(driver); conn = DriverManager.getConnection(url,user,password); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return conn; } public static void main(String[] args) { System.out.println(DBUtil.getConnection());//测试连接 } }四、写导出工具类
代码如下:
package com.utils; import java.io.FileOutputStream; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.streaming.SXSSFWorkbook; public class POIExport { /** * 根据所传入的参数生成一个Workbook * @param sql 查询数据的sql * @param columns sql中列名字符串,以英文逗号分隔,不区分大小写 * @param headers 表头字符串数组,如果是多表头,在需要合并的地方写"null",如:test1,test2,null,null,test3。 * 这表示test2将占三列。如果test2下面没有null,则占一行三列,有n个null,则占n行3列 * @param splitStr 分割表头字符串的分割符 * @return */ public static Workbook export(String sql,String columns,String[] headers, String splitStr){ SXSSFWorkbook wb = new SXSSFWorkbook(1000);//创建excel文档,内存中保留 1000 条数据,以免内存溢出 Font font = wb.createFont();//字体 font.setBoldweight(Font.BOLDWEIGHT_BOLD);//加粗 CellStyle cellStylehead = wb.createCellStyle();//表头样式 cellStylehead.setFont(font);//设置字体样式 cellStylehead.setAlignment(CellStyle.ALIGN_CENTER);//水平对齐 cellStylehead.setVerticalAlignment(CellStyle.VERTICAL_CENTER);//垂直对齐 cellStylehead.setWrapText(true);//自动换行 //设置边框 cellStylehead.setBorderTop(CellStyle.BORDER_THIN); cellStylehead.setBorderRight(CellStyle.BORDER_THIN); cellStylehead.setBorderBottom(CellStyle.BORDER_THIN); cellStylehead.setBorderLeft(CellStyle.BORDER_THIN); //表体样式 CellStyle cellStyleBody = wb.createCellStyle();//表体单元格样式 cellStyleBody.setAlignment(CellStyle.ALIGN_LEFT);//水平对齐 cellStyleBody.setVerticalAlignment(CellStyle.VERTICAL_CENTER);//垂直对齐 cellStyleBody.setWrapText(true);//自动换行 //设置边框 cellStyleBody.setBorderTop(CellStyle.BORDER_THIN); cellStyleBody.setBorderRight(CellStyle.BORDER_THIN); cellStyleBody.setBorderBottom(CellStyle.BORDER_THIN); cellStyleBody.setBorderLeft(CellStyle.BORDER_THIN); Sheet sheet = wb.createSheet("sheet1");//创建一个sheet sheet.setDefaultColumnWidth(15);//设置默认列宽 //写表头 createHeader(wb,sheet,cellStylehead,headers,splitStr); //写表体 int beginRowNumber = headers.length;//表体开始行 String[] cols = columns.split(",");//切分sql列名 int cellSize = cols.length;//列数 Connection conn = null; Statement stmt = null; ResultSet rs = null; conn = DBUtil.getConnection(); try { stmt = conn.createStatement(); rs = stmt.executeQuery(sql); int count = 0;//记录行号 while(rs.next()){ Row row = sheet.createRow(count+beginRowNumber); row.setHeightInPoints(14);//设置行高 for(int j=0;j<cellSize;j++){ Cell cell = row.createCell(j); Object obj = rs.getObject(cols[j]); String cv = obj==null?"":obj.toString();//取得对应列中的值 cell.setCellValue(cv);//设置单元格的值 cell.setCellStyle(cellStyleBody);//设置样式 } count++; } System.out.println("共写入数据:"+count+"条"); } catch (SQLException e) { e.printStackTrace(); } finally { try { if(rs!=null){ rs.close(); } } catch (SQLException e) { e.printStackTrace(); } try { if(stmt!=null){ stmt.close(); } } catch (SQLException e) { e.printStackTrace(); } try { if(conn!=null){ conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } return wb; } /** * 创建excel表头 * @param wb excel的workbook * @param sheet excel的sheet * @param cellStylehead excel的样式 * @param headers 表头字符串数组 * @param splitStr 表头字符串切割符 */ private static void createHeader(SXSSFWorkbook wb, Sheet sheet, CellStyle cellStylehead, String[] headers, String splitStr) { //遍历创建单元格 for(int i=0;i<headers.length;i++){ Row row = sheet.createRow(i); String[] header = headers[i].split(splitStr); for(int r=0;r<header.length;r++){ Cell cell = row.createCell(r); cell.setCellValue(header[r]); cell.setCellStyle(cellStylehead); } } //遍历合并单元格,如果是单表头则跳过 if(headers.length>1){ int[][][] mergeDatas = parseHeader(headers,splitStr); for(int i=0;i<mergeDatas.length;i++){ int[][] mergeData = http://www.mamicode.com/mergeDatas[i];>五、如有什么bug请批评指正。我把源码打包了,如果不想浪费2分,可以直接复制以上代码。如果不想复制,可以点这里下载:
http://download.csdn.net/detail/yunsyz/8345949
附文件目录图:
利用poi3.9做的excel导出工具
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。